From 0166d1a3b1d7ad6c3b555c3403c9fd35171e786f Mon Sep 17 00:00:00 2001 From: KennyTV Date: Mon, 1 Feb 2021 16:17:53 +0100 Subject: [PATCH] Fix 1.16->1.15 lightning Closes ViaVersion/ViaVersion#2309 --- .../api/rewriters/EntityRewriter.java | 19 +++++++---- .../packets/EntityPackets1_16.java | 32 ++++++++++++++++++- sponge/pom.xml | 2 +- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriter.java b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriter.java index dfde101e..c57e304a 100644 --- a/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriter.java +++ b/core/src/main/java/nl/matsv/viabackwards/api/rewriters/EntityRewriter.java @@ -9,6 +9,7 @@ import us.myles.ViaVersion.api.minecraft.metadata.MetaType; import us.myles.ViaVersion.api.minecraft.metadata.Metadata; import us.myles.ViaVersion.api.minecraft.metadata.types.MetaType1_14; 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; @@ -37,17 +38,21 @@ public abstract class EntityRewriter extends Entity map(Type.BYTE); // 6 - Pitch map(Type.BYTE); // 7 - Yaw map(Type.INT); // 8 - Data - handler(wrapper -> { - EntityType entityType = setOldEntityId(wrapper); - if (entityType == fallingBlockType) { - int blockState = wrapper.get(Type.INT, 0); - wrapper.set(Type.INT, 0, protocol.getMappingData().getNewBlockStateId(blockState)); - } - }); + handler(getSpawnTracketWithDataHandler(fallingBlockType)); } }); } + public PacketHandler getSpawnTracketWithDataHandler(EntityType fallingBlockType) { + return wrapper -> { + EntityType entityType = setOldEntityId(wrapper); + if (entityType == fallingBlockType) { + int blockState = wrapper.get(Type.INT, 0); + wrapper.set(Type.INT, 0, protocol.getMappingData().getNewBlockStateId(blockState)); + } + }; + } + public void registerSpawnTracker(ClientboundPacketType packetType) { protocol.registerOutgoing(packetType, new PacketRemapper() { @Override diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java index e6e73103..ee9357b2 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java @@ -44,7 +44,37 @@ public class EntityPackets1_16 extends EntityRewriter { @Override protected void registerPackets() { - registerSpawnTrackerWithData(ClientboundPackets1_16.SPAWN_ENTITY, Entity1_16Types.EntityType.FALLING_BLOCK); + protocol.registerOutgoing(ClientboundPackets1_16.SPAWN_ENTITY, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.VAR_INT); // 0 - Entity id + map(Type.UUID); // 1 - Entity UUID + map(Type.VAR_INT); // 2 - Entity Type + map(Type.DOUBLE); // 3 - X + map(Type.DOUBLE); // 4 - Y + map(Type.DOUBLE); // 5 - Z + map(Type.BYTE); // 6 - Pitch + map(Type.BYTE); // 7 - Yaw + map(Type.INT); // 8 - Data + handler(wrapper -> { + EntityType entityType = getTypeFromId(wrapper.get(Type.VAR_INT, 1)); + if (entityType == Entity1_16Types.EntityType.LIGHTNING_BOLT) { + // Map to old weather entity packet + wrapper.cancel(); + + PacketWrapper spawnLightningPacket = wrapper.create(ClientboundPackets1_15.SPAWN_GLOBAL_ENTITY.ordinal()); + spawnLightningPacket.write(Type.VAR_INT, wrapper.get(Type.VAR_INT, 0)); // Entity id + spawnLightningPacket.write(Type.BYTE, (byte) 1); // Lightning type + spawnLightningPacket.write(Type.DOUBLE, wrapper.get(Type.DOUBLE, 0)); // X + spawnLightningPacket.write(Type.DOUBLE, wrapper.get(Type.DOUBLE, 1)); // Y + spawnLightningPacket.write(Type.DOUBLE, wrapper.get(Type.DOUBLE, 2)); // Z + spawnLightningPacket.send(Protocol1_15_2To1_16.class, true, true); + } + }); + handler(getSpawnTracketWithDataHandler(Entity1_16Types.EntityType.FALLING_BLOCK)); + } + }); + registerSpawnTracker(ClientboundPackets1_16.SPAWN_MOB); protocol.registerOutgoing(ClientboundPackets1_16.RESPAWN, new PacketRemapper() { diff --git a/sponge/pom.xml b/sponge/pom.xml index 610aae85..5d6c683d 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -76,7 +76,7 @@ org.spongepowered spongeapi - LATEST + 7.3.0 provided