diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_11to1_10/Protocol1_11To1_10.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_11to1_10/Protocol1_11To1_10.java index 40b69b212..7aef4ebe4 100644 --- a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_11to1_10/Protocol1_11To1_10.java +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_11to1_10/Protocol1_11To1_10.java @@ -3,6 +3,7 @@ package us.myles.ViaVersion.protocols.protocol1_11to1_10; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import us.myles.ViaVersion.api.PacketWrapper; +import us.myles.ViaVersion.api.Pair; import us.myles.ViaVersion.api.Via; import us.myles.ViaVersion.api.data.UserConnection; import us.myles.ViaVersion.api.entities.Entity1_11Types; @@ -15,6 +16,7 @@ import us.myles.ViaVersion.api.remapper.ValueTransformer; import us.myles.ViaVersion.api.rewriters.SoundRewriter; import us.myles.ViaVersion.api.type.Type; import us.myles.ViaVersion.api.type.types.version.Types1_9; +import us.myles.ViaVersion.protocols.protocol1_11to1_10.data.PotionColorMapping; import us.myles.ViaVersion.protocols.protocol1_11to1_10.metadata.MetadataRewriter1_11To1_10; import us.myles.ViaVersion.protocols.protocol1_11to1_10.packets.InventoryPackets; import us.myles.ViaVersion.protocols.protocol1_11to1_10.storage.EntityTracker1_11; @@ -260,6 +262,35 @@ public class Protocol1_11To1_10 extends Protocol { + int effectID = packetWrapper.get(Type.INT, 0); + if (effectID == 2002) { + int data = packetWrapper.get(Type.INT, 1); + boolean isInstant = false; + Pair newData = PotionColorMapping.getNewData(data); + if (newData == null) { + Via.getPlatform().getLogger().warning("Received unknown 1.11 -> 1.10.2 potion data (" + data + ")"); + data = 0; + } else { + data = newData.getKey(); + isInstant = newData.getValue(); + } + if (isInstant) { + packetWrapper.set(Type.INT, 0, 2007); + } + packetWrapper.set(Type.INT, 1, data); + } + }); + } + }); + /* INCOMING PACKETS */ diff --git a/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_11to1_10/data/PotionColorMapping.java b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_11to1_10/data/PotionColorMapping.java new file mode 100644 index 000000000..70b131e85 --- /dev/null +++ b/common/src/main/java/us/myles/ViaVersion/protocols/protocol1_11to1_10/data/PotionColorMapping.java @@ -0,0 +1,60 @@ +package us.myles.ViaVersion.protocols.protocol1_11to1_10.data; + +import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import us.myles.ViaVersion.api.Pair; + +public class PotionColorMapping { + + // to mapping + private static final Int2ObjectMap> POTIONS = new Int2ObjectOpenHashMap<>(37, 1.0F); + + static { + addRewrite(0, 3694022, false); + addRewrite(1, 3694022, false); + addRewrite(2, 3694022, false); + addRewrite(3, 3694022, false); + addRewrite(4, 3694022, false); + addRewrite(5, 2039713, false); + addRewrite(6, 2039713, false); + addRewrite(7, 8356754, false); + addRewrite(8, 8356754, false); + addRewrite(9, 2293580, false); + addRewrite(10, 2293580, false); + addRewrite(11, 2293580, false); + addRewrite(12, 14981690, false); + addRewrite(13, 14981690, false); + addRewrite(14, 8171462, false); + addRewrite(15, 8171462, false); + addRewrite(16, 8171462, false); + addRewrite(17, 5926017, false); + addRewrite(18, 5926017, false); + addRewrite(19, 3035801, false); + addRewrite(20, 3035801, false); + addRewrite(21, 16262179, true); + addRewrite(22, 16262179, true); + addRewrite(23, 4393481, true); + addRewrite(24, 4393481, true); + addRewrite(25, 5149489, false); + addRewrite(26, 5149489, false); + addRewrite(27, 5149489, false); + addRewrite(28, 13458603, false); + addRewrite(29, 13458603, false); + addRewrite(30, 13458603, false); + addRewrite(31, 9643043, false); + addRewrite(32, 9643043, false); + addRewrite(33, 9643043, false); + addRewrite(34, 4738376, false); + addRewrite(35, 4738376, false); + addRewrite(36, 3381504, false); + } + + public static Pair getNewData(int oldData) { + return POTIONS.get(oldData); + } + + private static void addRewrite(int oldData, int newData, boolean isInstant) { + POTIONS.put(oldData, new Pair<>(newData, isInstant)); + } + +}