diff --git a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java index 8ff68763..a80c762d 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/EntityRewriterBase.java @@ -23,6 +23,7 @@ import com.viaversion.viabackwards.api.entities.storage.EntityReplacement; import com.viaversion.viabackwards.api.entities.storage.WrappedEntityData; import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.data.entity.EntityTracker; import com.viaversion.viaversion.api.data.entity.StoredEntityData; import com.viaversion.viaversion.api.data.entity.TrackedEntity; import com.viaversion.viaversion.api.minecraft.ClientWorld; @@ -238,15 +239,27 @@ protected PacketHandler getTrackerHandler() { return getTrackerHandler(Types.VAR_INT, 1); } - protected PacketHandler getTrackerHandler(EntityType entityType, Type intType) { - return wrapper -> tracker(wrapper.user()).addEntity((int) wrapper.get(intType, 0), entityType); + protected PacketHandler getTrackerHandler(EntityType entityType) { + return wrapper -> tracker(wrapper.user()).addEntity((int) wrapper.get(Types.VAR_INT, 0), entityType); } - protected PacketHandler getDimensionHandler(int index) { + protected PacketHandler getPlayerTrackerHandler() { return wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); - int dimensionId = wrapper.get(Types.INT, index); - clientWorld.setEnvironment(dimensionId); + final int entityId = wrapper.get(Types.INT, 0); + + final EntityTracker tracker = tracker(wrapper.user()); + tracker(wrapper.user()).setClientEntityId(entityId); + tracker.addEntity(entityId, tracker.playerType()); + }; + } + + protected PacketHandler getDimensionHandler() { + return wrapper -> { + ClientWorld clientWorld = wrapper.user().getClientWorld(this.protocol.getClass()); + int dimensionId = wrapper.get(Types.INT, 1); + if (clientWorld.setEnvironment(dimensionId)) { + onDimensionChange(wrapper.user()); + } }; } } diff --git a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyEntityRewriter.java b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyEntityRewriter.java index 8728902e..b10a7598 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyEntityRewriter.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/LegacyEntityRewriter.java @@ -66,8 +66,10 @@ protected void registerRespawn(C packetType) { public void register() { map(Types.INT); handler(wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); - clientWorld.setEnvironment(wrapper.get(Types.INT, 0)); + ClientWorld clientWorld = wrapper.user().getClientWorld(protocol.getClass()); + if (clientWorld.setEnvironment(wrapper.get(Types.INT, 0))) { + onDimensionChange(wrapper.user()); + } }); } }); @@ -81,8 +83,8 @@ public void register() { map(Types.UNSIGNED_BYTE); // 1 - Gamemode map(Types.INT); // 2 - Dimension handler(wrapper -> { - ClientWorld clientChunks = wrapper.user().get(ClientWorld.class); - clientChunks.setEnvironment(wrapper.get(Types.INT, 1)); + ClientWorld clientWorld = wrapper.user().getClientWorld(protocol.getClass()); + clientWorld.setEnvironment(wrapper.get(Types.INT, 1)); final int entityId = wrapper.get(Types.INT, 0); addTrackedEntity(wrapper, entityId, playerType); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/Protocol1_10To1_9_3.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/Protocol1_10To1_9_3.java index d5eae4bc..a4ea27d4 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/Protocol1_10To1_9_3.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/Protocol1_10To1_9_3.java @@ -98,11 +98,8 @@ public void register() { @Override public void init(UserConnection user) { - if (!user.has(ClientWorld.class)) { - user.put(new ClientWorld()); - } - user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, EntityTypes1_10.EntityType.PLAYER)); + user.addClientWorld(this.getClass(), new ClientWorld()); } @Override diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/rewriter/BlockItemPacketRewriter1_10.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/rewriter/BlockItemPacketRewriter1_10.java index 9e76254c..0fa81041 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/rewriter/BlockItemPacketRewriter1_10.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_10to1_9_3/rewriter/BlockItemPacketRewriter1_10.java @@ -50,7 +50,7 @@ protected void registerPackets() { registerSetCreativeModeSlot(ServerboundPackets1_9_3.SET_CREATIVE_MODE_SLOT); protocol.registerClientbound(ClientboundPackets1_9_3.LEVEL_CHUNK, wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_10To1_9_3.class); ChunkType1_9_3 type = ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment()); Chunk chunk = wrapper.passthrough(type); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/Protocol1_11_1To1_11.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/Protocol1_11_1To1_11.java index 0c7482a9..0f128d3f 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/Protocol1_11_1To1_11.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11_1to1_11/Protocol1_11_1To1_11.java @@ -39,11 +39,8 @@ public Protocol1_11_1To1_11() { @Override public void init(UserConnection user) { - if (!user.has(ClientWorld.class)) { - user.put(new ClientWorld()); - } - user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, EntityTypes1_11.EntityType.PLAYER)); + user.addClientWorld(this.getClass(), new ClientWorld()); } @Override diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/Protocol1_11To1_10.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/Protocol1_11To1_10.java index 6e4b2ede..f3f475e3 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/Protocol1_11To1_10.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/Protocol1_11To1_10.java @@ -62,11 +62,8 @@ protected void registerPackets() { @Override public void init(UserConnection user) { - if (!user.has(ClientWorld.class)) { - user.put(new ClientWorld()); - } - user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, EntityTypes1_11.EntityType.PLAYER)); + user.addClientWorld(this.getClass(), new ClientWorld()); if (!user.has(WindowTracker.class)) { user.put(new WindowTracker()); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/BlockItemPacketRewriter1_11.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/BlockItemPacketRewriter1_11.java index bb05ac61..d5222e11 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/BlockItemPacketRewriter1_11.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_11to1_10/rewriter/BlockItemPacketRewriter1_11.java @@ -147,7 +147,7 @@ public void register() { registerSetCreativeModeSlot(ServerboundPackets1_9_3.SET_CREATIVE_MODE_SLOT); protocol.registerClientbound(ClientboundPackets1_9_3.LEVEL_CHUNK, wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_11To1_10.class); ChunkType1_9_3 type = ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment()); // Use the 1.10 Chunk type since nothing changed. Chunk chunk = wrapper.passthrough(type); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/Protocol1_12To1_11_1.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/Protocol1_12To1_11_1.java index 7ea21aa9..43831b8c 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/Protocol1_12To1_11_1.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/Protocol1_12To1_11_1.java @@ -71,11 +71,8 @@ protected void registerPackets() { @Override public void init(UserConnection user) { - if (!user.has(ClientWorld.class)) { - user.put(new ClientWorld()); - } - user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, EntityTypes1_12.EntityType.PLAYER)); + user.addClientWorld(this.getClass(), new ClientWorld()); user.put(new ShoulderTracker(user)); } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/BlockItemPacketRewriter1_12.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/BlockItemPacketRewriter1_12.java index 3c44d7b7..5d248157 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/BlockItemPacketRewriter1_12.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/BlockItemPacketRewriter1_12.java @@ -131,7 +131,7 @@ public void register() { registerSetCreativeModeSlot(ServerboundPackets1_9_3.SET_CREATIVE_MODE_SLOT); protocol.registerClientbound(ClientboundPackets1_12.LEVEL_CHUNK, wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_12To1_11_1.class); ChunkType1_9_3 type = ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment()); // Use the 1.9.4 Chunk type since nothing changed. Chunk chunk = wrapper.passthrough(type); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/EntityPacketRewriter1_12.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/EntityPacketRewriter1_12.java index b6a73f53..b6612da8 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/EntityPacketRewriter1_12.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_12to1_11_1/rewriter/EntityPacketRewriter1_12.java @@ -119,9 +119,8 @@ public void register() { map(Types.UNSIGNED_BYTE); // 1 - Gamemode map(Types.INT); // 2 - Dimension - handler(getTrackerHandler(EntityTypes1_12.EntityType.PLAYER, Types.INT)); - - handler(getDimensionHandler(1)); + handler(getDimensionHandler()); + handler(getPlayerTrackerHandler()); handler(wrapper -> { ShoulderTracker tracker = wrapper.user().get(ShoulderTracker.class); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/Protocol1_13_1To1_13.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/Protocol1_13_1To1_13.java index d811253b..2ed9918f 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/Protocol1_13_1To1_13.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/Protocol1_13_1To1_13.java @@ -203,10 +203,7 @@ public void register() { @Override public void init(UserConnection user) { user.addEntityTracker(getClass(), new EntityTrackerBase(user, EntityTypes1_13.EntityType.PLAYER)); - - if (!user.has(ClientWorld.class)) { - user.put(new ClientWorld()); - } + user.addClientWorld(getClass(), new ClientWorld()); } @Override diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java index 81ead79b..66399118 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13_1to1_13/rewriter/WorldPacketRewriter1_13_1.java @@ -34,7 +34,7 @@ public static void register(Protocol1_13_1To1_13 protocol) { BlockRewriter blockRewriter = BlockRewriter.legacy(protocol); protocol.registerClientbound(ClientboundPackets1_13.LEVEL_CHUNK, wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_13_1To1_13.class); Chunk chunk = wrapper.passthrough(ChunkType1_13.forEnvironment(clientWorld.getEnvironment())); blockRewriter.handleChunk(chunk); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/Protocol1_13To1_12_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/Protocol1_13To1_12_2.java index 8d07e4f7..3a2b0c1f 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/Protocol1_13To1_12_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/Protocol1_13To1_12_2.java @@ -114,11 +114,8 @@ protected void registerPackets() { @Override public void init(UserConnection user) { - if (!user.has(ClientWorld.class)) { - user.put(new ClientWorld()); - } - user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, EntityTypes1_13.EntityType.PLAYER)); + user.addClientWorld(this.getClass(), new ClientWorld()); user.put(new BackwardsBlockStorage()); user.put(new TabCompleteStorage()); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/BlockItemPacketRewriter1_13.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/BlockItemPacketRewriter1_13.java index ae064349..9d2d8dcb 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/BlockItemPacketRewriter1_13.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/BlockItemPacketRewriter1_13.java @@ -279,7 +279,7 @@ public void register() { }); protocol.registerClientbound(ClientboundPackets1_13.LEVEL_CHUNK, wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_13To1_12_2.class); ChunkType1_9_3 type_old = ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment()); ChunkType1_13 type = ChunkType1_13.forEnvironment(clientWorld.getEnvironment()); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/EntityPacketRewriter1_13.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/EntityPacketRewriter1_13.java index 0d9bc3ef..3d3389fc 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/EntityPacketRewriter1_13.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_13to1_12_2/rewriter/EntityPacketRewriter1_13.java @@ -27,6 +27,7 @@ import com.viaversion.viabackwards.protocol.v1_13to1_12_2.storage.BackwardsBlockStorage; import com.viaversion.viabackwards.protocol.v1_13to1_12_2.storage.NoteBlockStorage; import com.viaversion.viabackwards.protocol.v1_13to1_12_2.storage.PlayerPositionStorage1_13; +import com.viaversion.viaversion.api.minecraft.ClientWorld; import com.viaversion.viaversion.api.minecraft.Particle; import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_13; @@ -172,7 +173,7 @@ public void register() { map(Types.VAR_INT); map(Types.UUID); - handler(getTrackerHandler(EntityTypes1_13.EntityType.PAINTING, Types.VAR_INT)); + handler(getTrackerHandler(EntityTypes1_13.EntityType.PAINTING)); handler(wrapper -> { int motive = wrapper.read(Types.VAR_INT); String title = PaintingNames1_13.getStringId(motive); @@ -188,10 +189,15 @@ public void register() { public void register() { map(Types.INT); // 0 - Dimension ID - handler(getDimensionHandler(0)); handler(wrapper -> { - wrapper.user().get(BackwardsBlockStorage.class).clear(); - wrapper.user().get(NoteBlockStorage.class).clear(); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_13To1_12_2.class); + int dimensionId = wrapper.get(Types.INT, 0); + + if (clientWorld.setEnvironment(dimensionId)) { + onDimensionChange(wrapper.user()); + wrapper.user().get(BackwardsBlockStorage.class).clear(); + wrapper.user().get(NoteBlockStorage.class).clear(); + } }); } }); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/Protocol1_14To1_13_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/Protocol1_14To1_13_2.java index 7af0a097..08bf1d42 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/Protocol1_14To1_13_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/Protocol1_14To1_13_2.java @@ -162,11 +162,8 @@ private static boolean isSet(int mask, int i) { @Override public void init(UserConnection user) { - if (!user.has(ClientWorld.class)) { - user.put(new ClientWorld()); - } - user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, EntityTypes1_14.PLAYER)); + user.addClientWorld(this.getClass(), new ClientWorld()); if (!user.has(ChunkLightStorage.class)) { user.put(new ChunkLightStorage()); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/BlockItemPacketRewriter1_14.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/BlockItemPacketRewriter1_14.java index db874a78..f129b965 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/BlockItemPacketRewriter1_14.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/BlockItemPacketRewriter1_14.java @@ -360,7 +360,7 @@ public void register() { }); protocol.registerClientbound(ClientboundPackets1_14.LEVEL_CHUNK, wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_14To1_13_2.class); Chunk chunk = wrapper.read(ChunkType1_14.TYPE); wrapper.write(ChunkType1_13.forEnvironment(clientWorld.getEnvironment()), chunk); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/EntityPacketRewriter1_14.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/EntityPacketRewriter1_14.java index 6141fd35..d06de355 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/EntityPacketRewriter1_14.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_14to1_13_2/rewriter/EntityPacketRewriter1_14.java @@ -304,8 +304,8 @@ public void register() { map(Types.UNSIGNED_BYTE); // 1 - Gamemode map(Types.INT); // 2 - Dimension - handler(getTrackerHandler(EntityTypes1_14.PLAYER, Types.INT)); - handler(getDimensionHandler(1)); + handler(getDimensionHandler()); + handler(getPlayerTrackerHandler()); handler(wrapper -> { short difficulty = wrapper.user().get(DifficultyStorage.class).getDifficulty(); wrapper.write(Types.UNSIGNED_BYTE, difficulty); @@ -329,14 +329,16 @@ public void register() { map(Types.INT); // 0 - Dimension ID handler(wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_14To1_13_2.class); int dimensionId = wrapper.get(Types.INT, 0); - clientWorld.setEnvironment(dimensionId); + + if (clientWorld.setEnvironment(dimensionId)) { + onDimensionChange(wrapper.user()); + wrapper.user().get(ChunkLightStorage.class).clear(); + } short difficulty = wrapper.user().get(DifficultyStorage.class).getDifficulty(); wrapper.write(Types.UNSIGNED_BYTE, difficulty); - - wrapper.user().get(ChunkLightStorage.class).clear(); }); } }); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/Protocol1_15To1_14_4.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/Protocol1_15To1_14_4.java index eedaa693..3bd59e5d 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/Protocol1_15To1_14_4.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/Protocol1_15To1_14_4.java @@ -102,8 +102,8 @@ private int toEffectCoordinate(float coordinate) { @Override public void init(UserConnection user) { - user.put(new ImmediateRespawnStorage()); user.addEntityTracker(getClass(), new EntityTrackerBase(user, EntityTypes1_15.PLAYER)); + user.put(new ImmediateRespawnStorage()); } @Override diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/EntityPacketRewriter1_15.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/EntityPacketRewriter1_15.java index 45eb30c7..516e973f 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/EntityPacketRewriter1_15.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_15to1_14_4/rewriter/EntityPacketRewriter1_15.java @@ -96,6 +96,7 @@ public void register() { public void register() { map(Types.INT); read(Types.LONG); // Seed + handler(getDimensionHandler()); } }); @@ -113,7 +114,7 @@ public void register() { map(Types.VAR_INT); // 5 - View Distance map(Types.BOOLEAN); // 6 - Reduce Debug Info - handler(getTrackerHandler(EntityTypes1_15.PLAYER, Types.INT)); + handler(getPlayerTrackerHandler()); handler(wrapper -> { boolean immediateRespawn = !wrapper.read(Types.BOOLEAN); // Inverted @@ -138,7 +139,7 @@ public void register() { map(Types.BYTE); // 6 - Pitch handler(wrapper -> wrapper.write(Types1_14.ENTITY_DATA_LIST, new ArrayList<>())); // Entity data is no longer sent in 1.15, so we have to send an empty one - handler(getTrackerHandler(EntityTypes1_15.PLAYER, Types.VAR_INT)); + handler(getTrackerHandler(EntityTypes1_15.PLAYER)); } }); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/EntityPacketRewriter1_16_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/EntityPacketRewriter1_16_2.java index 1721b191..642febb5 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/EntityPacketRewriter1_16_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16_2to1_16_1/rewriter/EntityPacketRewriter1_16_2.java @@ -101,13 +101,15 @@ public void register() { wrapper.write(Types.UNSIGNED_BYTE, (short) Math.min(maxPlayers, 255)); }); // ... - handler(getTrackerHandler(EntityTypes1_16_2.PLAYER, Types.INT)); + handler(getPlayerTrackerHandler()); } }); protocol.registerClientbound(ClientboundPackets1_16_2.RESPAWN, wrapper -> { CompoundTag dimensionData = wrapper.read(Types.NAMED_COMPOUND_TAG); wrapper.write(Types.STRING, getDimensionFromData(dimensionData)); + + onDimensionChange(wrapper.user()); }); } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/Protocol1_16To1_15_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/Protocol1_16To1_15_2.java index c90c5b88..97336dbe 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/Protocol1_16To1_15_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/Protocol1_16To1_15_2.java @@ -168,14 +168,12 @@ public void register() { @Override public void init(UserConnection user) { - if (!user.has(ClientWorld.class)) { - user.put(new ClientWorld()); - } + user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, EntityTypes1_16.PLAYER)); + user.addClientWorld(this.getClass(), new ClientWorld()); user.put(new PlayerSneakStorage()); user.put(new WorldNameTracker()); user.put(new PlayerAttributesStorage()); - user.addEntityTracker(this.getClass(), new EntityTrackerBase(user, EntityTypes1_16.PLAYER)); } @Override diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/EntityPacketRewriter1_16.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/EntityPacketRewriter1_16.java index cba86133..fa9c5516 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/EntityPacketRewriter1_16.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_16to1_15_2/rewriter/EntityPacketRewriter1_16.java @@ -111,7 +111,7 @@ public void register() { wrapper.read(Types.BYTE); // Previous gamemode // Grab client world - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_16To1_15_2.class); int dimension = wrapper.get(Types.INT, 0); // Send a dummy respawn with a different dimension if the world name was different and the same dimension was used @@ -127,7 +127,9 @@ public void register() { packet.send(Protocol1_16To1_15_2.class); } - clientWorld.setEnvironment(dimension); + if (clientWorld.setEnvironment(dimension)) { + onDimensionChange(wrapper.user()); + } wrapper.write(Types.STRING, "default"); // Level type wrapper.read(Types.BOOLEAN); // Debug @@ -168,9 +170,8 @@ public void register() { map(Types.LONG); // Seed map(Types.UNSIGNED_BYTE); // Max players handler(wrapper -> { - ClientWorld clientChunks = wrapper.user().get(ClientWorld.class); - clientChunks.setEnvironment(wrapper.get(Types.INT, 1)); - tracker(wrapper.user()).addEntity(wrapper.get(Types.INT, 0), EntityTypes1_16.PLAYER); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_16To1_15_2.class); + clientWorld.setEnvironment(wrapper.get(Types.INT, 1)); wrapper.write(Types.STRING, "default"); // Level type diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/EntityPacketRewriter1_17.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/EntityPacketRewriter1_17.java index bac9d0e5..3da39f89 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/EntityPacketRewriter1_17.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_17to1_16_4/rewriter/EntityPacketRewriter1_17.java @@ -100,7 +100,7 @@ public void register() { wrapper.set(Types.BYTE, 1, (byte) 0); } }); - handler(getTrackerHandler(EntityTypes1_17.PLAYER, Types.INT)); + handler(getPlayerTrackerHandler()); handler(worldDataTrackerHandler(1)); handler(wrapper -> { CompoundTag registry = wrapper.get(Types.NAMED_COMPOUND_TAG, 0); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_9_3to1_9_1/Protocol1_9_3To1_9_1.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_9_3to1_9_1/Protocol1_9_3To1_9_1.java index 3415876b..8e5595b1 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_9_3to1_9_1/Protocol1_9_3To1_9_1.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_9_3to1_9_1/Protocol1_9_3To1_9_1.java @@ -71,7 +71,7 @@ public void register() { }); registerClientbound(ClientboundPackets1_9_3.LEVEL_CHUNK, wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_9_3To1_9_1.class); ChunkType1_9_3 newType = ChunkType1_9_3.forEnvironment(clientWorld.getEnvironment()); ChunkType1_9_1 oldType = ChunkType1_9_1.forEnvironment(clientWorld.getEnvironment()); // Get the old type to not write Block Entities @@ -89,10 +89,10 @@ public void register() { map(Types.INT); // 2 - Dimension handler(wrapper -> { - ClientWorld clientChunks = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_9_3To1_9_1.class); int dimensionId = wrapper.get(Types.INT, 1); - clientChunks.setEnvironment(dimensionId); + clientWorld.setEnvironment(dimensionId); }); } }); @@ -103,7 +103,7 @@ public void register() { map(Types.INT); // 0 - Dimension ID handler(wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + ClientWorld clientWorld = wrapper.user().getClientWorld(Protocol1_9_3To1_9_1.class); int dimensionId = wrapper.get(Types.INT, 0); clientWorld.setEnvironment(dimensionId); @@ -117,8 +117,6 @@ public void register() { @Override public void init(UserConnection userConnection) { - if (!userConnection.has(ClientWorld.class)) { - userConnection.put(new ClientWorld()); - } + userConnection.addClientWorld(this.getClass(), new ClientWorld()); } }