From b9317df8596e011f90ffbfa874f12e92cfa77fad Mon Sep 17 00:00:00 2001 From: KennyTV Date: Mon, 10 Aug 2020 21:21:10 +0200 Subject: [PATCH] Use effects data to determine legacy dimension, cleanup ClientWorld usage --- .../api/rewriters/EntityRewriterBase.java | 29 --------------- .../api/rewriters/LegacyEntityRewriter.java | 30 ++++++++++++++++ .../packets/BlockItemPackets1_14.java | 2 +- .../Protocol1_14_4To1_15.java | 4 --- .../packets/BlockItemPackets1_15.java | 6 ++-- .../packets/EntityPackets1_15.java | 2 -- .../packets/BlockItemPackets1_16.java | 6 ++-- .../Protocol1_16_1To1_16_2.java | 4 --- .../packets/BlockItemPackets1_16_2.java | 6 ++-- .../packets/EntityPackets1_16_2.java | 36 ++++++------------- pom.xml | 2 +- 11 files changed, 49 insertions(+), 78 deletions(-) diff --git a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java index 2c58600d..69875816 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriterBase.java @@ -202,35 +202,6 @@ public abstract class EntityRewriterBase extends Re return storage; } - public void registerRespawn(ClientboundPacketType packetType) { - protocol.registerOutgoing(packetType, new PacketRemapper() { - @Override - public void registerMap() { - map(Type.INT); - handler(wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); - clientWorld.setEnvironment(wrapper.get(Type.INT, 0)); - }); - } - }); - } - - public void registerJoinGame(ClientboundPacketType packetType, EntityType playerType) { - protocol.registerOutgoing(packetType, new PacketRemapper() { - @Override - public void registerMap() { - map(Type.INT); // 0 - Entity ID - map(Type.UNSIGNED_BYTE); // 1 - Gamemode - map(Type.INT); // 2 - Dimension - handler(wrapper -> { - ClientWorld clientChunks = wrapper.user().get(ClientWorld.class); - clientChunks.setEnvironment(wrapper.get(Type.INT, 1)); - getEntityTracker(wrapper.user()).trackEntityType(wrapper.get(Type.INT, 0), playerType); - }); - } - }); - } - /** * Helper method to handle player, painting, or xp orb trackers without meta changes. */ diff --git a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacyEntityRewriter.java b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacyEntityRewriter.java index 756f740d..818ca582 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacyEntityRewriter.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/LegacyEntityRewriter.java @@ -14,6 +14,7 @@ import us.myles.ViaVersion.api.protocol.ClientboundPacketType; import us.myles.ViaVersion.api.remapper.PacketHandler; import us.myles.ViaVersion.api.remapper.PacketRemapper; import us.myles.ViaVersion.api.type.Type; +import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import java.util.HashMap; import java.util.List; @@ -42,6 +43,35 @@ public abstract class LegacyEntityRewriter extends return objectTypes.get(type); } + protected void registerRespawn(ClientboundPacketType packetType) { + protocol.registerOutgoing(packetType, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.INT); + handler(wrapper -> { + ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); + clientWorld.setEnvironment(wrapper.get(Type.INT, 0)); + }); + } + }); + } + + protected void registerJoinGame(ClientboundPacketType packetType, EntityType playerType) { + protocol.registerOutgoing(packetType, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.INT); // 0 - Entity ID + map(Type.UNSIGNED_BYTE); // 1 - Gamemode + map(Type.INT); // 2 - Dimension + handler(wrapper -> { + ClientWorld clientChunks = wrapper.user().get(ClientWorld.class); + clientChunks.setEnvironment(wrapper.get(Type.INT, 1)); + getEntityTracker(wrapper.user()).trackEntityType(wrapper.get(Type.INT, 0), playerType); + }); + } + }); + } + protected void registerMetadataRewriter(ClientboundPacketType packetType, Type> oldMetaType, Type> newMetaType) { getProtocol().registerOutgoing(packetType, new PacketRemapper() { @Override diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/BlockItemPackets1_14.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/BlockItemPackets1_14.java index c346d83e..fed9095e 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/BlockItemPackets1_14.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_13_2to1_14/packets/BlockItemPackets1_14.java @@ -416,7 +416,7 @@ public class BlockItemPackets1_14 extends nl.matsv.viabackwards.api.rewriters.It @Override public void handle(PacketWrapper wrapper) throws Exception { ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); - Chunk chunk = wrapper.read(new Chunk1_14Type(clientWorld)); + Chunk chunk = wrapper.read(new Chunk1_14Type()); wrapper.write(new Chunk1_13Type(clientWorld), chunk); ChunkLightStorage.ChunkLight chunkLight = wrapper.user().get(ChunkLightStorage.class).getStoredLight(chunk.getX(), chunk.getZ()); diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_4to1_15/Protocol1_14_4To1_15.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_4to1_15/Protocol1_14_4To1_15.java index 872b16f4..88867675 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_4to1_15/Protocol1_14_4To1_15.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_4to1_15/Protocol1_14_4To1_15.java @@ -20,7 +20,6 @@ import us.myles.ViaVersion.protocols.protocol1_14to1_13_2.ServerboundPackets1_14 import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.ClientboundPackets1_15; import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.Protocol1_15To1_14_4; import us.myles.ViaVersion.protocols.protocol1_15to1_14_4.data.MappingData; -import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; public class Protocol1_14_4To1_15 extends BackwardsProtocol { @@ -103,9 +102,6 @@ public class Protocol1_14_4To1_15 extends BackwardsProtocol { @@ -62,9 +61,8 @@ public class BlockItemPackets1_15 extends nl.matsv.viabackwards.api.rewriters.It handler(new PacketHandler() { @Override public void handle(PacketWrapper wrapper) throws Exception { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); - Chunk chunk = wrapper.read(new Chunk1_15Type(clientWorld)); - wrapper.write(new Chunk1_14Type(clientWorld), chunk); + Chunk chunk = wrapper.read(new Chunk1_15Type()); + wrapper.write(new Chunk1_14Type(), chunk); if (chunk.isFullChunk()) { int[] biomeData = chunk.getBiomeData(); diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_4to1_15/packets/EntityPackets1_15.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_4to1_15/packets/EntityPackets1_15.java index efca8b06..68820e08 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_4to1_15/packets/EntityPackets1_15.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_14_4to1_15/packets/EntityPackets1_15.java @@ -91,7 +91,6 @@ public class EntityPackets1_15 extends EntityRewriter { public void registerMap() { map(Type.INT); map(Type.LONG, Type.NOTHING); // Seed - handler(getDimensionHandler(0)); } }); @@ -110,7 +109,6 @@ public class EntityPackets1_15 extends EntityRewriter { map(Type.BOOLEAN); // 6 - Reduce Debug Info handler(getTrackerHandler(Entity1_15Types.EntityType.PLAYER, Type.INT)); - handler(getDimensionHandler(1)); handler(wrapper -> wrapper.user().get(ImmediateRespawn.class).setImmediateRespawn(wrapper.read(Type.BOOLEAN))); } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/BlockItemPackets1_16.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/BlockItemPackets1_16.java index e5412c13..6a91292e 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/BlockItemPackets1_16.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/BlockItemPackets1_16.java @@ -24,7 +24,6 @@ import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.ClientboundPackets1_16 import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.data.MappingData; import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.packets.InventoryPackets; import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.types.Chunk1_16Type; -import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import us.myles.ViaVersion.util.CompactArrayUtil; import us.myles.viaversion.libs.opennbt.tag.builtin.CompoundTag; import us.myles.viaversion.libs.opennbt.tag.builtin.IntArrayTag; @@ -138,9 +137,8 @@ public class BlockItemPackets1_16 extends nl.matsv.viabackwards.api.rewriters.It @Override public void registerMap() { handler(wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); - Chunk chunk = wrapper.read(new Chunk1_16Type(clientWorld)); - wrapper.write(new Chunk1_15Type(clientWorld), chunk); + Chunk chunk = wrapper.read(new Chunk1_16Type()); + wrapper.write(new Chunk1_15Type(), chunk); for (int i = 0; i < chunk.getSections().length; i++) { ChunkSection section = chunk.getSections()[i]; diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_1to1_16_2/Protocol1_16_1To1_16_2.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_1to1_16_2/Protocol1_16_1To1_16_2.java index 48a70f24..6fc681d4 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_1to1_16_2/Protocol1_16_1To1_16_2.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_1to1_16_2/Protocol1_16_1To1_16_2.java @@ -20,7 +20,6 @@ import us.myles.ViaVersion.protocols.protocol1_16_2to1_16_1.ServerboundPackets1_ import us.myles.ViaVersion.protocols.protocol1_16_2to1_16_1.data.MappingData; import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.ClientboundPackets1_16; import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.ServerboundPackets1_16; -import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; public class Protocol1_16_1To1_16_2 extends BackwardsProtocol { @@ -116,9 +115,6 @@ public class Protocol1_16_1To1_16_2 extends BackwardsProtocol { @@ -67,9 +66,8 @@ public class BlockItemPackets1_16_2 extends nl.matsv.viabackwards.api.rewriters. @Override public void registerMap() { handler(wrapper -> { - ClientWorld clientWorld = wrapper.user().get(ClientWorld.class); - Chunk chunk = wrapper.read(new Chunk1_16_2Type(clientWorld)); - wrapper.write(new Chunk1_16Type(clientWorld), chunk); + Chunk chunk = wrapper.read(new Chunk1_16_2Type()); + wrapper.write(new Chunk1_16Type(), chunk); chunk.setIgnoreOldLightData(true); for (int i = 0; i < chunk.getSections().length; i++) { diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_1to1_16_2/packets/EntityPackets1_16_2.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_1to1_16_2/packets/EntityPackets1_16_2.java index 7b053172..99aa6b7d 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_1to1_16_2/packets/EntityPackets1_16_2.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_16_1to1_16_2/packets/EntityPackets1_16_2.java @@ -1,5 +1,6 @@ package nl.matsv.viabackwards.protocol.protocol1_16_1to1_16_2.packets; +import com.google.common.collect.Sets; import nl.matsv.viabackwards.api.rewriters.EntityRewriter; import nl.matsv.viabackwards.protocol.protocol1_16_1to1_16_2.Protocol1_16_1To1_16_2; import us.myles.ViaVersion.api.entities.Entity1_16Types; @@ -14,13 +15,16 @@ import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.version.Types1_14; import us.myles.ViaVersion.protocols.protocol1_16_2to1_16_1.ClientboundPackets1_16_2; import us.myles.ViaVersion.protocols.protocol1_16to1_15_2.packets.EntityPackets; -import us.myles.ViaVersion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; import us.myles.viaversion.libs.gson.JsonElement; import us.myles.viaversion.libs.opennbt.tag.builtin.CompoundTag; import us.myles.viaversion.libs.opennbt.tag.builtin.StringTag; +import java.util.Set; + public class EntityPackets1_16_2 extends EntityRewriter { + private final Set oldDimensions = Sets.newHashSet("minecraft:overworld", "minecraft:the_nether", "minecraft:the_end"); + public EntityPackets1_16_2(Protocol1_16_1To1_16_2 protocol) { super(protocol); } @@ -55,7 +59,7 @@ public class EntityPackets1_16_2 extends EntityRewriter wrapper.write(Type.NBT, EntityPackets.DIMENSIONS_TAG); CompoundTag dimensionData = wrapper.read(Type.NBT); - wrapper.write(Type.STRING, dimensionFromData(dimensionData)); + wrapper.write(Type.STRING, getDimensionFromData(dimensionData)); }); map(Type.STRING); // Dimension map(Type.LONG); // Seed @@ -64,12 +68,7 @@ public class EntityPackets1_16_2 extends EntityRewriter wrapper.write(Type.UNSIGNED_BYTE, (short) Math.max(maxPlayers, 255)); }); // ... - handler(wrapper -> { - ClientWorld clientChunks = wrapper.user().get(ClientWorld.class); - String dimension = wrapper.get(Type.STRING, 0); - clientChunks.setEnvironment(dimension); - getEntityTracker(wrapper.user()).trackEntityType(wrapper.get(Type.INT, 0), Entity1_16_2Types.EntityType.PLAYER); - }); + handler(getTrackerHandler(Entity1_16_2Types.EntityType.PLAYER, Type.INT)); } }); @@ -78,28 +77,15 @@ public class EntityPackets1_16_2 extends EntityRewriter public void registerMap() { handler(wrapper -> { CompoundTag dimensionData = wrapper.read(Type.NBT); - wrapper.write(Type.STRING, dimensionFromData(dimensionData)); + wrapper.write(Type.STRING, getDimensionFromData(dimensionData)); }); } }); } - private String dimensionFromData(CompoundTag dimensionData) { - StringTag infiniburn = dimensionData.get("infiniburn"); - if (infiniburn == null) return "minecraft:overworld"; - - // Not much we can do aside from guessing, since the data doesn't actually contain the dimension key - switch (infiniburn.getValue()) { - case "minecraft:infiniburn_nether": - return "minecraft:the_nether"; - - case "minecraft:infiniburn_end": - return "minecraft:the_end"; - - case "minecraft:infiniburn_overworld": - default: - return "minecraft:overworld"; - } + private String getDimensionFromData(CompoundTag dimensionData) { + StringTag effectsLocation = dimensionData.get("effects"); + return effectsLocation != null && oldDimensions.contains(effectsLocation.getValue()) ? effectsLocation.getName() : "minecraft:overworld"; } @Override diff --git a/pom.xml b/pom.xml index 893f231f..b5c3353a 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,7 @@ us.myles viaversion - 3.1.0-20w30a + 3.1.0-1.16.2-RC2 provided