diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/Protocol1_15_2To1_16.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/Protocol1_15_2To1_16.java index 7d0bfc0d..df13c809 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/Protocol1_15_2To1_16.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/Protocol1_15_2To1_16.java @@ -6,6 +6,7 @@ import nl.matsv.viabackwards.api.rewriters.SoundRewriter; import nl.matsv.viabackwards.api.rewriters.TranslatableRewriter; import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.chat.TranslatableRewriter1_16; import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.data.BackwardsMappings; +import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.data.DimensionNameTracker; import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.packets.BlockItemPackets1_16; import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.packets.EntityPackets1_16; import nl.matsv.viabackwards.protocol.protocol1_15_2to1_16.storage.PlayerSneakStorage; @@ -181,6 +182,7 @@ public class Protocol1_15_2To1_16 extends BackwardsProtocol { @Override public void registerMap() { map(dimensionTransformer); // Dimension Type - map(Type.STRING, Type.NOTHING); // Dimension - map(Type.LONG); // Seed - map(Type.UNSIGNED_BYTE); // Gamemode - map(Type.BYTE, Type.NOTHING); // Previous gamemode handler(wrapper -> { + // Grab the tracker for dimension names + DimensionNameTracker dimensionNameTracker = wrapper.user().get(DimensionNameTracker.class); + String nextDimensionName = wrapper.read(Type.STRING); // Dimension + + wrapper.passthrough(Type.LONG); // Seed + wrapper.passthrough(Type.UNSIGNED_BYTE); // Gamemode + wrapper.read(Type.BYTE); // Previous gamemode + + // Grab client world ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); int dimension = wrapper.get(Type.INT, 0); // Send a dummy respawn with a different dimension if the previous one is equal to the new - if (clientWorld.getEnvironment() != null && dimension == clientWorld.getEnvironment().getId()) { + if (clientWorld.getEnvironment() != null && dimension == clientWorld.getEnvironment().getId() && !nextDimensionName.equals(dimensionNameTracker.getDimensionName())) { PacketWrapper packet = wrapper.create(ClientboundPackets1_15.RESPAWN.ordinal()); packet.write(Type.INT, dimension == 0 ? -1 : 0); packet.write(Type.LONG, 0L); @@ -76,6 +82,9 @@ public class EntityPackets1_16 extends EntityRewriter { wrapper.set(Type.STRING, 0, "flat"); } wrapper.read(Type.BOOLEAN); // Keep all playerdata + + // Finally update the dimension + dimensionNameTracker.setDimensionName(nextDimensionName); }); } }); @@ -89,7 +98,10 @@ public class EntityPackets1_16 extends EntityRewriter { map(Type.STRING_ARRAY, Type.NOTHING); // World list map(Type.NBT, Type.NOTHING); // whatever this is map(dimensionTransformer); // Dimension Type - map(Type.STRING, Type.NOTHING); // Dimension + handler(wrapper -> { + DimensionNameTracker dimensionNameTracker = wrapper.user().get(DimensionNameTracker.class); + dimensionNameTracker.setDimensionName(wrapper.read(Type.STRING)); // Save the dimension name + }); map(Type.LONG); // Seed map(Type.UNSIGNED_BYTE); // Max players handler(wrapper -> {