diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/EntityTypeNames.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/EntityTypeNames.java index 02b577e3..eb99046b 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/EntityTypeNames.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/EntityTypeNames.java @@ -110,8 +110,9 @@ public class EntityTypeNames { Tag idTag = tag.get("id"); if (idTag instanceof StringTag) { StringTag id = (StringTag) idTag; - if (NEW_TO_OLD_NAMES.containsKey(id.getValue())) { - id.setValue(NEW_TO_OLD_NAMES.get(id.getValue())); + String value = NEW_TO_OLD_NAMES.get(id.getValue()); + if (value != null) { + id.setValue(value); } } } @@ -120,7 +121,7 @@ public class EntityTypeNames { Tag spawnDataTag; if (tag != null && (spawnDataTag = tag.get("SpawnData")) != null) { CompoundTag spawnData = (CompoundTag) spawnDataTag; - if (spawnData != null && spawnData.contains("id")) { + if (spawnData != null) { toClient(spawnData); } } diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/PotionSplashHandler.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/PotionSplashHandler.java new file mode 100644 index 00000000..423937c1 --- /dev/null +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/PotionSplashHandler.java @@ -0,0 +1,30 @@ +package nl.matsv.viabackwards.protocol.protocol1_10to1_11; + +import java.util.HashMap; +import java.util.Map; + +public class PotionSplashHandler { + + private static final Map DATA = new HashMap<>(); + + static { + DATA.put(2039713, 5); // night vision + DATA.put(8356754, 7); // invisibility + DATA.put(2293580, 9); // jump boost + DATA.put(14981690, 12); // fire resistance + DATA.put(8171462, 14); // swiftness + DATA.put(5926017, 17); // slowness + DATA.put(3035801, 19); // water breathing + DATA.put(16262179, 21); // instant health + DATA.put(4393481, 23); // instant damage + DATA.put(5149489, 25); // poison + DATA.put(13458603, 28); // regeneration + DATA.put(9643043, 31); // strength + DATA.put(4738376, 34); // weakness + DATA.put(3381504, 36); // luck + } + + public static Integer getOldData(int data) { + return DATA.get(data); + } +} diff --git a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java index 54160423..7fd29cae 100644 --- a/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java +++ b/core/src/main/java/nl/matsv/viabackwards/protocol/protocol1_10to1_11/packets/EntityPackets1_11.java @@ -15,6 +15,7 @@ import nl.matsv.viabackwards.api.entities.storage.EntityData; import nl.matsv.viabackwards.api.entities.storage.MetaStorage; import nl.matsv.viabackwards.api.exceptions.RemovedValueException; import nl.matsv.viabackwards.api.rewriters.EntityRewriter; +import nl.matsv.viabackwards.protocol.protocol1_10to1_11.PotionSplashHandler; import nl.matsv.viabackwards.protocol.protocol1_10to1_11.Protocol1_10To1_11; import nl.matsv.viabackwards.protocol.protocol1_10to1_11.storage.ChestedHorseStorage; import nl.matsv.viabackwards.utils.Block; @@ -41,6 +42,29 @@ public class EntityPackets1_11 extends EntityRewriter { @Override protected void registerPackets() { + protocol.registerOutgoing(State.PLAY, 0x21, 0x21, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.INT); + map(Type.POSITION); + map(Type.INT); + handler(wrapper -> { + int type = wrapper.get(Type.INT, 0); + if (type == 2002 || type == 2007) { + // 2007 potion id doesn't exist in 1.10 + if (type == 2007) { + wrapper.set(Type.INT, 0, 2002); + } + + Integer mappedData = PotionSplashHandler.getOldData(wrapper.get(Type.INT, 1)); + if (mappedData != null) { + wrapper.set(Type.INT, 1, mappedData); + } + } + }); + } + }); + // Spawn Object protocol.registerOutgoing(State.PLAY, 0x00, 0x00, new PacketRemapper() { @Override