From 91f31b578f6f2a49eb3b85dd51282c473cbd151e Mon Sep 17 00:00:00 2001 From: RK_01 <50594595+RaphiMC@users.noreply.github.com> Date: Thu, 16 May 2024 10:31:05 +0200 Subject: [PATCH] Clean up tags rewriting (#3856) --- .../viaversion/api/data/MappingDataBase.java | 3 +- .../viaversion/api/rewriter/TagRewriter.java | 6 +- .../v1_12_2to1_13/Protocol1_12_2To1_13.java | 8 +- .../v1_13_2to1_14/Protocol1_13_2To1_14.java | 71 ++++------------- .../v1_14_4to1_15/Protocol1_14_4To1_15.java | 12 ++- .../v1_15_2to1_16/Protocol1_15_2To1_16.java | 51 ++---------- .../Protocol1_16_1To1_16_2.java | 18 +---- .../v1_16_4to1_17/Protocol1_16_4To1_17.java | 32 +++----- .../v1_17_1to1_18/Protocol1_17_1To1_18.java | 14 ++-- .../v1_18_2to1_19/Protocol1_18_2To1_19.java | 15 +++- .../v1_18to1_18_2/Protocol1_18To1_18_2.java | 4 +- .../Protocol1_19_1To1_19_3.java | 15 ++-- .../v1_19_4to1_20/Protocol1_19_4To1_20.java | 5 ++ .../Protocol1_20_3To1_20_5.java | 6 +- .../viaversion/rewriter/TagRewriter.java | 74 ++++++++++++------ .../viaversion/data/mappings-1.12to1.13.nbt | Bin 23564 -> 23876 bytes .../viaversion/data/mappings-1.13.2to1.14.nbt | Bin 2231 -> 3170 bytes .../viaversion/data/mappings-1.14to1.15.nbt | Bin 528 -> 973 bytes .../viaversion/data/mappings-1.15to1.16.nbt | Bin 8833 -> 10135 bytes .../viaversion/data/mappings-1.16.2to1.17.nbt | Bin 4776 -> 5334 bytes .../viaversion/data/mappings-1.16to1.16.2.nbt | Bin 632 -> 817 bytes .../viaversion/data/mappings-1.17to1.18.nbt | Bin 351 -> 1549 bytes .../viaversion/data/mappings-1.18to1.19.nbt | Bin 2519 -> 3253 bytes .../data/mappings-1.19.3to1.19.4.nbt | Bin 1617 -> 2197 bytes .../viaversion/data/mappings-1.19.4to1.20.nbt | Bin 1136 -> 2962 bytes .../viaversion/data/mappings-1.19to1.19.3.nbt | Bin 1024 -> 1257 bytes .../data/mappings-1.20.2to1.20.3.nbt | Bin 897 -> 1161 bytes .../data/mappings-1.20.3to1.20.5.nbt | Bin 1021 -> 5406 bytes .../viaversion/data/mappings-1.20to1.20.2.nbt | Bin 451 -> 716 bytes 29 files changed, 140 insertions(+), 194 deletions(-) diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java index 03de76d00..e3061df7f 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java @@ -107,6 +107,7 @@ public class MappingDataBase implements MappingData { this.tags = new EnumMap<>(RegistryType.class); loadTags(RegistryType.ITEM, tagsTag); loadTags(RegistryType.BLOCK, tagsTag); + loadTags(RegistryType.ENTITY, tagsTag); } loadExtras(data); @@ -309,4 +310,4 @@ public class MappingDataBase implements MappingData { protected void loadExtras(final CompoundTag data) { } -} +} \ No newline at end of file diff --git a/api/src/main/java/com/viaversion/viaversion/api/rewriter/TagRewriter.java b/api/src/main/java/com/viaversion/viaversion/api/rewriter/TagRewriter.java index 9ea232f69..edba7249f 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/rewriter/TagRewriter.java +++ b/api/src/main/java/com/viaversion/viaversion/api/rewriter/TagRewriter.java @@ -32,7 +32,9 @@ public interface TagRewriter extends MappingDataListener { void removeTags(String registryKey); - void renameTag(RegistryType type, String registryKey, String renameTo); + void removeTag(RegistryType type, String tagId); + + void renameTag(RegistryType type, String tagId, String renameTo); /** * Adds an empty tag (since the client crashes if a checked tag is not registered). @@ -74,4 +76,4 @@ public interface TagRewriter extends MappingDataListener { List getNewTags(RegistryType tagType); List getOrComputeNewTags(RegistryType tagType); -} +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_12_2to1_13/Protocol1_12_2To1_13.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_12_2to1_13/Protocol1_12_2To1_13.java index 452fb8fc6..c22f5c5be 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_12_2to1_13/Protocol1_12_2To1_13.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_12_2to1_13/Protocol1_12_2To1_13.java @@ -151,19 +151,19 @@ public class Protocol1_12_2To1_13 extends AbstractProtocol tag : MAPPINGS.getBlockTags().entrySet()) { wrapper.write(Types.STRING, tag.getKey()); // Needs copy as other protocols may modify it - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue()); + wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue().clone()); } wrapper.write(Types.VAR_INT, MAPPINGS.getItemTags().size()); // item tags for (Map.Entry tag : MAPPINGS.getItemTags().entrySet()) { wrapper.write(Types.STRING, tag.getKey()); // Needs copy as other protocols may modify it - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue()); + wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue().clone()); } wrapper.write(Types.VAR_INT, MAPPINGS.getFluidTags().size()); // fluid tags for (Map.Entry tag : MAPPINGS.getFluidTags().entrySet()) { wrapper.write(Types.STRING, tag.getKey()); // Needs copy as other protocols may modify it - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue()); + wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.getValue().clone()); } }).scheduleSend(Protocol1_12_2To1_13.class); }; @@ -920,4 +920,4 @@ public class Protocol1_12_2To1_13 extends AbstractProtocol { @@ -47,6 +49,7 @@ public class Protocol1_13_2To1_14 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_13_2To1_14() { super(ClientboundPackets1_13.class, ClientboundPackets1_14.class, ServerboundPackets1_13.class, ServerboundPackets1_14.class); @@ -76,59 +79,12 @@ public class Protocol1_13_2To1_14 extends AbstractProtocol { - int blockTagsSize = wrapper.read(Types.VAR_INT); - wrapper.write(Types.VAR_INT, blockTagsSize + 6); // block tags - for (int i = 0; i < blockTagsSize; i++) { - wrapper.passthrough(Types.STRING); - int[] blockIds = wrapper.passthrough(Types.VAR_INT_ARRAY_PRIMITIVE); - for (int j = 0; j < blockIds.length; j++) { - blockIds[j] = MAPPINGS.getNewBlockId(blockIds[j]); - } + registerClientbound(ClientboundPackets1_13.UPDATE_TAGS, new PacketHandlers() { + @Override + protected void register() { + handler(tagRewriter.getHandler(RegistryType.FLUID)); + handler(wrapper -> tagRewriter.appendNewTags(wrapper, RegistryType.ENTITY)); } - // Minecraft crashes if we not send signs tags - wrapper.write(Types.STRING, "minecraft:signs"); - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{ - MAPPINGS.getNewBlockId(150), MAPPINGS.getNewBlockId(155) - }); - wrapper.write(Types.STRING, "minecraft:wall_signs"); - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{ - MAPPINGS.getNewBlockId(155) - }); - wrapper.write(Types.STRING, "minecraft:standing_signs"); - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{ - MAPPINGS.getNewBlockId(150) - }); - // Fences and walls tags - used for block connections - wrapper.write(Types.STRING, "minecraft:fences"); - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{189, 248, 472, 473, 474, 475}); - wrapper.write(Types.STRING, "minecraft:walls"); - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{271, 272}); - wrapper.write(Types.STRING, "minecraft:wooden_fences"); - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{189, 472, 473, 474, 475}); - int itemTagsSize = wrapper.read(Types.VAR_INT); - wrapper.write(Types.VAR_INT, itemTagsSize + 2); // item tags - for (int i = 0; i < itemTagsSize; i++) { - wrapper.passthrough(Types.STRING); - int[] itemIds = wrapper.passthrough(Types.VAR_INT_ARRAY_PRIMITIVE); - for (int j = 0; j < itemIds.length; j++) { - itemIds[j] = MAPPINGS.getNewItemId(itemIds[j]); - } - } - // Should fix fuel shift clicking - wrapper.write(Types.STRING, "minecraft:signs"); - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{ - MAPPINGS.getNewItemId(541) - }); - // Arrows tag (used by bow) - wrapper.write(Types.STRING, "minecraft:arrows"); - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, new int[]{526, 825, 826}); - int fluidTagsSize = wrapper.passthrough(Types.VAR_INT); // fluid tags - for (int i = 0; i < fluidTagsSize; i++) { - wrapper.passthrough(Types.STRING); - wrapper.passthrough(Types.VAR_INT_ARRAY_PRIMITIVE); - } - wrapper.write(Types.VAR_INT, 0); // new entity tags - do we need to send this? }); // Set Difficulty packet added in 19w11a @@ -157,6 +113,8 @@ public class Protocol1_13_2To1_14 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_14_4to1_15/Protocol1_14_4To1_15.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_14_4to1_15/Protocol1_14_4To1_15.java index 281e2918d..a852fca13 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_14_4to1_15/Protocol1_14_4To1_15.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_14_4to1_15/Protocol1_14_4To1_15.java @@ -67,12 +67,10 @@ public class Protocol1_14_4To1_15 extends AbstractProtocol getTagRewriter() { return tagRewriter; } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_15_2to1_16/Protocol1_15_2To1_16.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_15_2to1_16/Protocol1_15_2To1_16.java index 93ddbea78..2a17b3f49 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_15_2to1_16/Protocol1_15_2To1_16.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_15_2to1_16/Protocol1_15_2To1_16.java @@ -213,49 +213,6 @@ public class Protocol1_15_2To1_16 extends AbstractProtocol getTagRewriter() { return tagRewriter; } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_16_1to1_16_2/Protocol1_16_1To1_16_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_16_1to1_16_2/Protocol1_16_1To1_16_2.java index 20917c4d3..0e62e1cc6 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_16_1to1_16_2/Protocol1_16_1To1_16_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_16_1to1_16_2/Protocol1_16_1To1_16_2.java @@ -26,9 +26,9 @@ import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.protocols.v1_15_2to1_16.packet.ClientboundPackets1_16; import com.viaversion.viaversion.protocols.v1_15_2to1_16.packet.ServerboundPackets1_16; import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.data.MappingData1_16_2; -import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.rewriter.EntityPacketRewriter1_16_2; import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ClientboundPackets1_16_2; import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.packet.ServerboundPackets1_16_2; +import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.rewriter.EntityPacketRewriter1_16_2; import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.rewriter.ItemPacketRewriter1_16_2; import com.viaversion.viaversion.protocols.v1_16_1to1_16_2.rewriter.WorldPacketRewriter1_16_2; import com.viaversion.viaversion.rewriter.SoundRewriter; @@ -86,19 +86,7 @@ public class Protocol1_16_1To1_16_2 extends AbstractProtocol - tagRewriter.addEmptyTags(RegistryType.ITEM, "minecraft:soul_fire_base_blocks", "minecraft:furnace_materials", "minecraft:crimson_stems", - "minecraft:gold_ores", "minecraft:piglin_loved", "minecraft:piglin_repellents", "minecraft:creeper_drop_music_discs", - "minecraft:logs_that_burn", "minecraft:stone_tool_materials", "minecraft:warped_stems"); - tagRewriter.addEmptyTags(RegistryType.BLOCK, "minecraft:infiniburn_nether", "minecraft:crimson_stems", - "minecraft:wither_summon_base_blocks", "minecraft:infiniburn_overworld", "minecraft:piglin_repellents", - "minecraft:hoglin_repellents", "minecraft:prevent_mob_spawning_inside", "minecraft:wart_blocks", - "minecraft:stone_pressure_plates", "minecraft:nylium", "minecraft:gold_ores", "minecraft:pressure_plates", - "minecraft:logs_that_burn", "minecraft:strider_warm_blocks", "minecraft:warped_stems", "minecraft:infiniburn_end", - "minecraft:base_stone_nether", "minecraft:base_stone_overworld"); + tagRewriter.removeTag(RegistryType.ITEM, "minecraft:furnace_materials"); super.onMappingDataLoaded(); } @@ -127,4 +115,4 @@ public class Protocol1_16_1To1_16_2 extends AbstractProtocol getTagRewriter() { return tagRewriter; } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_16_4to1_17/Protocol1_16_4To1_17.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_16_4to1_17/Protocol1_16_4To1_17.java index 78b8d9cd0..4d976e120 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_16_4to1_17/Protocol1_16_4To1_17.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_16_4to1_17/Protocol1_16_4To1_17.java @@ -45,8 +45,6 @@ import com.viaversion.viaversion.rewriter.TagRewriter; public final class Protocol1_16_4To1_17 extends AbstractProtocol { public static final MappingData MAPPINGS = new MappingDataBase("1.16.2", "1.17"); - private static final String[] NEW_GAME_EVENT_TAGS = {"minecraft:ignore_vibrations_sneaking", "minecraft:vibrations"}; - private static final int[] EMPTY_ARRAY = new int[0]; private final EntityPacketRewriter1_17 entityRewriter = new EntityPacketRewriter1_17(this); private final ItemPacketRewriter1_17 itemRewriter = new ItemPacketRewriter1_17(this); private final TagRewriter tagRewriter = new TagRewriter<>(this); @@ -80,11 +78,7 @@ public final class Protocol1_16_4To1_17 extends AbstractProtocol(this).register(ClientboundPackets1_16_2.AWARD_STATS); @@ -174,19 +168,6 @@ public final class Protocol1_16_4To1_17 extends AbstractProtocol getTagRewriter() { return tagRewriter; } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_17_1to1_18/Protocol1_17_1To1_18.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_17_1to1_18/Protocol1_17_1To1_18.java index d401a7e73..9fa698ee4 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_17_1to1_18/Protocol1_17_1To1_18.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_17_1to1_18/Protocol1_17_1To1_18.java @@ -63,11 +63,6 @@ public final class Protocol1_17_1To1_18 extends AbstractProtocol(this).register(ClientboundPackets1_17_1.AWARD_STATS); @@ -97,6 +92,8 @@ public final class Protocol1_17_1To1_18 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_18_2to1_19/Protocol1_18_2To1_19.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_18_2to1_19/Protocol1_18_2To1_19.java index f1d010ccf..0ca01ebfe 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_18_2to1_19/Protocol1_18_2To1_19.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_18_2to1_19/Protocol1_18_2To1_19.java @@ -19,6 +19,7 @@ package com.viaversion.viaversion.protocols.v1_18_2to1_19; import com.google.gson.JsonElement; import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_19; import com.viaversion.viaversion.api.platform.providers.ViaProviders; import com.viaversion.viaversion.api.protocol.AbstractProtocol; @@ -302,6 +303,18 @@ public final class Protocol1_18_2To1_19 extends AbstractProtocol getTagRewriter() { return tagRewriter; } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_18to1_18_2/Protocol1_18To1_18_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_18to1_18_2/Protocol1_18To1_18_2.java index cb2cd952d..2ff2d377d 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_18to1_18_2/Protocol1_18To1_18_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_18to1_18_2/Protocol1_18To1_18_2.java @@ -39,7 +39,7 @@ public final class Protocol1_18To1_18_2 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); - tagRewriter.addEmptyTag(RegistryType.BLOCK, "minecraft:fall_damage_resetting"); + tagRewriter.addTagRaw(RegistryType.BLOCK, "minecraft:fall_damage_resetting", 169, 257, 680, 713, 714, 715, 716, 859, 860, 696, 100); tagRewriter.registerGeneric(ClientboundPackets1_18.UPDATE_TAGS); registerClientbound(ClientboundPackets1_18.UPDATE_MOB_EFFECT, new PacketHandlers() { @@ -89,4 +89,4 @@ public final class Protocol1_18To1_18_2 extends AbstractProtocol getTagRewriter() { return tagRewriter; } -} +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_19_4to1_20/Protocol1_19_4To1_20.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_19_4to1_20/Protocol1_19_4To1_20.java index 8494ae7e6..ef1dd980e 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_19_4to1_20/Protocol1_19_4To1_20.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_19_4to1_20/Protocol1_19_4To1_20.java @@ -20,6 +20,7 @@ package com.viaversion.viaversion.protocols.v1_19_4to1_20; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.data.MappingData; import com.viaversion.viaversion.api.data.MappingDataBase; +import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.api.minecraft.entities.EntityTypes1_19_4; import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.type.Types; @@ -80,6 +81,10 @@ public final class Protocol1_19_4To1_20 extends AbstractProtocol implements com.viavers private final Protocol protocol; private final Map> newTags = new EnumMap<>(RegistryType.class); private final Map> toRename = new EnumMap<>(RegistryType.class); - private final Set toRemove = new HashSet<>(); + private final Map> toRemove = new EnumMap<>(RegistryType.class); + private final Set toRemoveRegistries = new HashSet<>(); public TagRewriter(final Protocol protocol) { this.protocol = protocol; @@ -65,12 +66,17 @@ public class TagRewriter implements com.viavers @Override public void removeTags(final String registryKey) { - toRemove.add(registryKey); + toRemoveRegistries.add(Key.stripMinecraftNamespace(registryKey)); } @Override - public void renameTag(final RegistryType type, final String registryKey, final String renameTo) { - toRename.computeIfAbsent(type, t -> new HashMap<>()).put(registryKey, renameTo); + public void removeTag(final RegistryType type, final String tagId) { + toRemove.computeIfAbsent(type, t -> new HashSet<>()).add(Key.stripMinecraftNamespace(tagId)); + } + + @Override + public void renameTag(final RegistryType type, final String tagId, final String renameTo) { + toRename.computeIfAbsent(type, t -> new HashMap<>()).put(Key.stripMinecraftNamespace(tagId), renameTo); } @Override @@ -124,7 +130,7 @@ public class TagRewriter implements com.viavers public PacketHandler getHandler(@Nullable RegistryType readUntilType) { return wrapper -> { for (RegistryType type : RegistryType.getValues()) { - handle(wrapper, getRewriter(type), getNewTags(type), toRename.get(type)); + handle(wrapper, getRewriter(type), getNewTags(type), toRename.get(type), toRemove.get(type)); // Stop iterating if (type == readUntilType) { @@ -140,7 +146,7 @@ public class TagRewriter implements com.viavers int editedLength = length; for (int i = 0; i < length; i++) { String registryKey = wrapper.read(Types.STRING); - if (toRemove.contains(registryKey)) { + if (toRemoveRegistries.contains(Key.stripMinecraftNamespace(registryKey))) { wrapper.set(Types.VAR_INT, 0, --editedLength); int tagsSize = wrapper.read(Types.VAR_INT); for (int j = 0; j < tagsSize; j++) { @@ -155,31 +161,30 @@ public class TagRewriter implements com.viavers RegistryType type = RegistryType.getByKey(registryKey); if (type != null) { - handle(wrapper, getRewriter(type), getNewTags(type), toRename.get(type)); + handle(wrapper, getRewriter(type), getNewTags(type), toRename.get(type), toRemove.get(type)); } else { - handle(wrapper, null, null, null); + handle(wrapper, null, null, null, null); } } }; } public void handle(PacketWrapper wrapper, @Nullable IdRewriteFunction rewriteFunction, @Nullable List newTags) { - handle(wrapper, rewriteFunction, newTags, null); + handle(wrapper, rewriteFunction, newTags, null, null); } - public void handle(PacketWrapper wrapper, @Nullable IdRewriteFunction rewriteFunction, @Nullable List newTags, @Nullable Map tagsToRename) { + public void handle(PacketWrapper wrapper, @Nullable IdRewriteFunction rewriteFunction, @Nullable List newTags, @Nullable Map tagsToRename, @Nullable Set tagsToRemove) { int tagsSize = wrapper.read(Types.VAR_INT); - wrapper.write(Types.VAR_INT, newTags != null ? tagsSize + newTags.size() : tagsSize); // add new tags count + final List tags = new ArrayList<>(newTags != null ? tagsSize + newTags.size() : tagsSize); for (int i = 0; i < tagsSize; i++) { String key = wrapper.read(Types.STRING); if (tagsToRename != null) { - String renamedKey = tagsToRename.get(key); + String renamedKey = tagsToRename.get(Key.stripMinecraftNamespace(key)); if (renamedKey != null) { key = renamedKey; } } - wrapper.write(Types.STRING, key); int[] ids = wrapper.read(Types.VAR_INT_ARRAY_PRIMITIVE); if (rewriteFunction != null) { @@ -192,19 +197,39 @@ public class TagRewriter implements com.viavers } } - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, idList.toArray(EMPTY_ARRAY)); - } else { - // Write the original array - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, ids); + ids = idList.toArray(EMPTY_ARRAY); } + + tags.add(new TagData(key, ids)); } - // Send new tags if present + if (tagsToRemove != null) { + tags.removeIf(tag -> tagsToRemove.contains(Key.stripMinecraftNamespace(tag.identifier()))); + } + + // Add new tags if present if (newTags != null) { + tags.addAll(newTags); + } + + // Write the tags + wrapper.write(Types.VAR_INT, tags.size()); + for (TagData tag : tags) { + wrapper.write(Types.STRING, tag.identifier()); + wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.entries()); + } + } + + public void appendNewTags(PacketWrapper wrapper, RegistryType type) { + List newTags = getNewTags(type); + if (newTags != null) { + wrapper.write(Types.VAR_INT, newTags.size()); for (TagData tag : newTags) { wrapper.write(Types.STRING, tag.identifier()); - wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.entries()); + wrapper.write(Types.VAR_INT_ARRAY_PRIMITIVE, tag.entries().clone()); } + } else { + wrapper.write(Types.VAR_INT, 0); } } @@ -221,13 +246,10 @@ public class TagRewriter implements com.viavers public @Nullable IdRewriteFunction getRewriter(RegistryType tagType) { MappingData mappingData = protocol.getMappingData(); return switch (tagType) { - case BLOCK -> - mappingData != null && mappingData.getBlockMappings() != null ? mappingData::getNewBlockId : null; - case ITEM -> - mappingData != null && mappingData.getItemMappings() != null ? mappingData::getNewItemId : null; - case ENTITY -> - protocol.getEntityRewriter() != null ? id -> protocol.getEntityRewriter().newEntityId(id) : null; + case BLOCK -> mappingData != null && mappingData.getBlockMappings() != null ? mappingData::getNewBlockId : null; + case ITEM -> mappingData != null && mappingData.getItemMappings() != null ? mappingData::getNewItemId : null; + case ENTITY -> protocol.getEntityRewriter() != null ? id -> protocol.getEntityRewriter().newEntityId(id) : null; case FLUID, GAME_EVENT -> null; }; } -} +} \ No newline at end of file diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.12to1.13.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.12to1.13.nbt index 050e32146af8ad318f6939d3400f8058a547bbc9..3d0cf4feaa85e3ec9d257fca8f2e52547e3e2620 100644 GIT binary patch delta 1507 zcmZ|PTWl0n9LMo9v-h3dra-aV?xLkyw(a(!AXv0TipC%nY<%*TY-hW}vUHdsdud-x zNPX6L`D=_u;ZdV6L=#0!j6`D)6vY@XF;QPcSt+ckv$1;C-cxS-CIV zCBI~L${X3(YD+~5^;*sMF8u5{Ih#!-Eft>iE4Hgg<8or4bJZ@T%qiT4-Pj{1qr>uZ zyifiJc9n*hw+UM<6{^_f#_xiBzZ>`9Np3u0srCimFFIbnb+2JAUvjUON;LM6Kj_+C zP46VcPCE47T*sbw^hj79noP+Rv23rUto?PbDA_I(({HMmX|6Kj)K@?Sqj zv02VXMR@Ti=ROx+%?*6ecQTvsvvAfCcGe1jkGEB?aY z_=iUwM;;YVjEtU#4H=dHw$r(9pU3SOET=)c^;xis_ z!FJvJ#kz#3!gfqz2X4a6mg=Z`MW?c0*PKee;Cs#iXQ_S0pzR_3gRVLiMuFFh+1KYqtjZ3C0ey!YP~vfi?)VaYn^etXy*riTO;DVp@MHW5=dB0 zLS_C53T{$xlY$47j9cmP96N19ZABOCWc*e<&8|cL(*mJcCBu`1}H2gF{ptqE5O&It=b)P$+}uHfV0+Uf4Xc?ah~6<^`ZT;y3)xBke6$ z_bqiRr^REKJcgN^;LkSPi0yL1N@a9kHUn_67Z~cndV1ncdZKS#uqBDzTuHYkQT$9= z+R{C8F3@h=FK@>O4keneoC}Gfg3a_OL%$9`z*&4~sg l_qz3RaVeD>Xlr}kW(D0k`ecHv)acIUn4v#kdbZ8k{V#uAC`$kU delta 1588 zcmZwHNo*T+6vy%ZOgwh&ags(Qb(WHbwkD)b38f??C27T>g;F9_Tv#PDPMpN;;0d-9 zvxjm93Gt9n#d1baplMi&;fMqj5Eq1iLUUpfaG>H)cKAN4Sedqmk7hg`|L4v7zn|Z$ zS&yHvj*Zx|wC2`XKbR>SV>-}>9T>nUHsMNa!!@`ZS0jTFY{6CN$1u{^j;**Bn=yzh zFeHJ~8E08l%S|U^x%o;ZDAwzdUz$4f zIWNi+k?we-C-P~sy+70i*El7w;Omd{{v)^pce3)hoQb73CUS++A*bWNn}6{on> z#s*yKn&@Ou^6K>^xK96VcF^XHY_-PnaO*EAI-^PFkVU*gw?se3=iQ!)|jlHHMvY@(+pos`_II+MqWo&M>PW-&R*z<>n3XqbhCz`Bdw#ZgQro@k=AJFh||P+1a#{z!w&Re z8(VmAzBnTbPD^v>M!7k8U~%>ITOUyThd7Ck@G(BY`xnlBFH1K{WP{5UuTW1>8(%z) z=kX)H<@Xw0jlfTwYrUuOCB86>&Qn~ZgO&%KSSHuH>*9HMH_^yLsyWm&GSQiCwCKD% zJjbJ$DYK829rCbVjdY*jM)r=&79ez7zwATi4;YaTt$LMKuU~PHBX>#TXfE9wR0_ zQcI>bhoeI2^}l7xug7ML<4&nHcgg1o4aC+Vf{>W@=L=KklHgRmN?vQzKMchmNyPUS Q7>N2ujaSq1N^5@NKi%#9GXMYp diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.13.2to1.14.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.13.2to1.14.nbt index def3738b20cea9724bd41c5c80d4a63405e353ec..ebc33d4573c63a8068a903af6ebf5884c5d94232 100644 GIT binary patch delta 955 zcmZwGxpUJ%6vy#rW9RVV5E=$b{st=O=(s`%cZNbEOKWGbEHRRdVlMpw%y3`fD46^M zG$gHBzsM_9m9Ji`Or!A(5GZ9K*;+`v8DHBt`}Khm|TQc86j z<0KomZ5&vg9mO)<;1yot3tnT%i0Sn+7kHt|0)2Zc$D6`&oWMa$<1mil5Dwr7j$(%W zGuMgr+luZ#Wu%$){3!C;QBv4cA2iTG8x}2`M+k=ibLg^I!KeC76+iHk^@=13ZS4Jv zG{XGGNW(ZKTh&`p60p*m3d<}X%-|GG<19!dq!1Db$>a=3ETj@DAXGp|E+>tQhc3;% z$aVGbb&Np|Hx7dahYVA{Qzo(JdcA(EFE+7@AkP{9;Hy>$DZW9UUq_$c-x+^1u59RB zPF1*d6>eSGEL=Wk)72u-dJU|F(2yEh!)w@KQ8fID7HRV~|CfK5oh}<2 t=Pn<3`QU;zGMf4>u)f%+NJFpwG^e^k$$mYrLmhwlG{Wu5h{a?h(xSaVh>%Utk;N} zh|yu)!U}nUzAv+7m}S9VTj#fhIcBv+b;^7OS$ow3cRlkq(9RliKi VIwuiq delta 9 QcmX@hK7nNeKNBMZ01q+(D*ylh diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.15to1.16.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.15to1.16.nbt index ce1925932b4aa1cb2c7d6cadd45767147987d0e9..842fcf02cf163542a0cb340dea1f73d75513dbeb 100644 GIT binary patch delta 1321 zcmaKsM{m_Y6h_A(Ac0XJC?F6EMDM*LQ6)ek0u~6d0BL0VO&$g}+4FeH>cIv!^eWLi z0Rn{HLGU+dKZCO3+=LR8h{f@>$9HCYzweIstUk4|WA~Wa099|jazO~KiCxv?8!t!` zoq4UXNvxL9LMc_RRNZQ&`Ya)?g*C1k9^}SkCfB7r&2(HT!a$e8B9Qcfq@INRa1ai_ zAvg?2;3yn}+Ho$Y;DoChTPk_t1xCl7HF@YovXBD}uIgV-qmoW@^LuQxs~V!TTxh%9 zv)X4SiNj$stb~cM9Hzi3m;@_eJS>F?uuRpIn$68(m>b zZ{aq)gm!oZH{m%sRIM(;EuP7*IZwH{1FxZ(7pS2wfK0doA`_c9&j6L2Yw#FoNJl+l3*lNUga^M)Mebt-(8NRDck^T)5j84MSJN}Q|kh%T>sIR{$~Q$Z>+ zI^SG1q8dsE>Y@_I{H6XqTq5;*j-ZRQp>5T+H8UKMT!pn81cn=c$oSphHKi SLELNt=|-u4J#2t2;KNTd7Y!x= delta 9 QcmbR4-{`ubL5Yz8020ju00000 diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.16.2to1.17.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.16.2to1.17.nbt index 28de2297756e121cecc025300dbb36c1f91d7ffa..1fcc9b7dc9683f47daa4cf4a0e31561a3e9fc508 100644 GIT binary patch literal 5334 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 diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.16to1.16.2.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.16to1.16.2.nbt index 31a994e84d6852c59618cac91a8f4ae56eaff937..2df2db3d858d59a81224e164f06bf43c1e189688 100644 GIT binary patch delta 195 zcmYj~K?=e^3`M_f?VVKo(sc6m2ALunLiTvX!`PZ2Q`J7fD*z1po<<-jy>Hn3f$^JA--Y0@?AXr`V9F zkZK<4Kb1Fw<)6a`l7Xe$=qdx&$j9MZj)}p-??WTZ-qyl{{e2mYm_kgQztLj?xF(XgoOAfKuGLx z;>2<&rHBIu{w2O~5)|rkAkwGj_cEUO&GK9pab;*KOw!1Y%<&3csLnM z?PRM~@bY1?mlr)RL%jS1XFo+slQ0W+;U3)Yc~_%n82#!RJY;N)hpxeX1dK^4X!hBlC|Q-Qj+DetQ>AVLLX}P*cHj zGpN@-Mea>J-Qs)!y6Rlih+X5z;G7UXr>mqjftI7CJV7G1=tGsh!NhJjM-cvVt)s$>CNs#)a8D9jbh;e}=Rw!QpudZ77RG>XmPoHe_v8ZXfFp1TwBF}n8yteu zum$$R8Q2O3KrhBg*agS&^&P(PycbTvZa4wdTaLm`IEKv^_ynKfqc3A^8=EAkgeLhr z%OGk6^~BDGt-vxwI(%d;U&%T#l}c31+T(9kuX8yETJydc)CRXQ#!r@mj#(X-I$|NU z2j@M!hPUtrUcoz{7sb2ZH^=!m;2-nZyG8jof}7KSTUJloc&a!*`k~T1=0H328zk=p A8vpxzDsAj**c801$8jivR!s diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.18to1.19.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.18to1.19.nbt index 17c09d3067f1a0bedebbf7b47a8996509e502c87..1bf5ab69f5d62baa538d75b37c057d2f6303b7ef 100644 GIT binary patch delta 748 zcma*l$!-%t5P;!o4@lT^11VBaM6Rp{R*?jh1Q4s>6qVn! zoU=|ult?rg%TQR$thY{IP4h(i(pv3Xz9>_ZQMMQB2>B|W;R&wc9v)y08)#q+&+$~G zC$l8?IqD1X5oWN0$4GG(9W0}TCEUh5uHz=!=po$s20RvV2Mc(Jk~8|T#2r(5J(U&p z*-+i9{5@Lrr6ybdEdSqoFS2<*PT(@mBlKZZr1BHr$uHpmPT~qKU?0Z#eHZa;xb<$5 z<2Z*s7{L*o#vx2n{0l$GkKzmt;}niz90xH$4Lz)U!e@NMw^#-eYZ5)xax=PNy1JQ} zy46L_hMl~8g{~<&sBW=PBZe+kv5lM#DmtyYpzDfGDmos8d;m;Eg>J{hW#TZAjz?iS zJWss?lTq`rY)?uvUF7_8OzxVdw0Rg&B$CK0DqiyOI+j6~7ag6Mt}S)l)1vUt0);M4x>*0Pp3VuYuLmwDkvB!WV2rSZsWzkU9Q)#fg>2?ja0M5#xC<+>W6WV zY4s8=aBd`@P0~?!(PD>Bs%YR4Wq3wBm!|VE+E#Pv;%qfr)|vW|2Gu0GrtY9kG`J?y zwRINY6C?H4AddZRkOZOi kpQ0og4=n#^2mN_qS7B!%%l!U~^9nb(!#y7Gj2FD&2Qx!QiU0rr delta 9 QcmbO#c#&sA02?C%01%M^ivR!s diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.19.4to1.20.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.19.4to1.20.nbt index a44466b0a1f5b617ac01c3409f6ebd13f5d9346f..26434acbc10b8135565c7586df71143471061166 100644 GIT binary patch literal 2962 zcmchZS&S4_6oyZC)qqT~2+lAJh^#u0xPYRd?4sfuI4mk4HPziUJtf^;ovNCd04}_l zXd(|R?rWkL72+E&t{^)mZYanqvZ&~Tiui)!cdDm!(%`ETzTDe)Irp6ZoO_E}5kq=* zxIyUoB@s#0ij^t&*=1qmL~dwEZP6*0-P}BHg)6djc1qG-E@g-r#sf<>T9S4mHuiu{ zk#RF%rpWl5Nb^-9OI~9^c1U%YqJ(dGBCyy3|UK%8^y48E2|aGfpL^nHaoA zB)t$e5WWarqe7Od4WG#yfvn==>VGoyy_Dtz%4~ynscHoSXFn?orMz`%%dHVXPkxBS8CvXb_dbKBEEZ z0Z)x9UL;hJo;juTIQjginF2EgUe5BlN*XBoYr4^RsR6>9Xd#LBk0L9pB| z_<8k4FN?P8U==)0{B2Gt@0Id)=;cc~r@J2j2NuIp$bbz?par;W#v;gC(pd5%Hx|#1 z{Iczp!YF7bU2*hCZW4h>1ZEQufr%0(QJAAG=^d85)>b#LTYW#r(J6+TaVd=al51z$ zBU*JS%|BdDueGFa6nI6uh{S>C6m(J}r7?&teIEX#-ve~hU$pp;<_4r!CYwonxu93zieeW+*Uf1VH8{5b zs2`L1F`L4V;9};V|%o$x-+kzJsseTi6H3-~b$l zPvIc&ZptCp4=4WPN)fBf!7* zFqA&Zq)x#1@DpeK!8o$(8=X3C$zZpXCAdiM0Ixu&rY!I~yqp`bI0YMU?&3vJ;FQ9m z7g5=);qL2S8hO)5qRz>~@DOao3}q!N8Q($w9Q_frNTUwQBY;z~iM?6If2aQ_EyARc zQJt0HmJBF59+kw6wOgrX$|}bM*C|C!rl?Q-rlxe`6j%k5nP1EJLfXybAaE(htgFSy z$p7GSUAGhM%yK&l-1r)6MC#Ncm=E`MDRv+IM76~P&`mX2z;BdG{mL2wjg@QW_gVOj zF;#IM{a>J)f{A(qlea79<@51%jBgv8E(27QUX{MF72~_;PXwym*l9^avf0h+O^C8> z`hf`}R!|_u)=R&EMho-jc!k1FKgii`Ypa*_s4_+gCKg}_?Nb=(%AoN9zg3i{E7>%7 z=ZtOqR*@QEJ-ott%`*NP@4|bGA)p{?`W~3eoUVV7xly2{xCT^QEw?U#jSuNpiOhd4 zE4~fJMk4mh^m*A-bp7I|CIJ=p&;7caaS|a7@GQK*{8{F=(0?A*@p~2R1zN4hSK%4@ zB+b|k@AI3)#r1feaT2JX*f@!6E7fZ>F*b&=skHc}NliYrvYEZl!Aq9Zb$A&*=lX&K tZs_xv_(8~&Ch0M5Q0JvyR(;8iz)3g^M}apaenF4X>dSc$4gv3o{0*hs65#*< delta 353 zcmXZXH%dfN6b9g<55;G#jA5n{(+u0~B#+(!_O)MRKFuQss_&9(c4kDqWi7DbPVDU3Ak!uggn}`}7xW+AR41 diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.19to1.19.3.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.19to1.19.3.nbt index 838a529fec202fda2da7ce5c954aad14f17b462c..0dee2b6d05e7ca8b093c330dc242dc36d4bc86e2 100644 GIT binary patch delta 243 zcmWm8T}}cq6o%nXki?-k#;^dzh3HP2GL%WfP{?$mm$D>K1cLnOK3srH@Csfoo}81@ zucw{f{AIIK^R2Dx+7*csYCkf%%`5LGzOtc+OsXWQAvOOgzeZ-@WA1I?YJWM&m@cuv z1}l7Gjdy(DOKr7!kKQki(028SLE&u=k diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.20.2to1.20.3.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.20.2to1.20.3.nbt index 682b709a4c1d0af09fdf3ee211212b13198f688a..171a63dd0a1d99842040f997c1ba48ae278ff80a 100644 GIT binary patch delta 275 zcmaLQF$%&!5QX7IgTX8oR*EOE5eqM2C)jAW?3zWR7$sSWiAA*ZHXhM`g@~2KHv_}) z-XnZ=U-xz$iNNV?9tmkvm$*{7@@%CTY;>wjX0_W{bxC8JsX{xO2_Z&kAwVBP_}ds0 zOfkb83oNn18X5*M_Bhmx91aDpC{f`iMaNfb|J{RcYLc5opY|sptWHOhSpO0JBz&tR I$4?jg4FlIGmjD0& delta 9 QcmeC=Y-Hciz|6=101i$9PXGV_ diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.20.3to1.20.5.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.20.3to1.20.5.nbt index 95f929e4769bed6f2e2daff251a6dcf4f77a5bb3..38ed842b82b0e7a7a228c1794f07409da3ed08fa 100644 GIT binary patch literal 5406 zcmd^@TaX-88Gz5GdpFtX&0-*zB`ATQ5~;G(2;m||1d?ci@e+uLNT+A!%uJJ>KArBK zjOzuts1H8yN)->5R0tq~mr_6kydXD49#E>R0=X!tSY@mds?gFGzQ1?Qq^CDjZI&uu z+}f|sO!qne`Okkl=S)p0M=jm2(=0TxQfjQGyn19Bd$T;qb>^sAH%JoQ+!cO7E7du7 zOf3nUV~%pOxd$sfwIs-8AaAGnlAFPom8z!3!(4Z(LdG{%gp8kLg?Nm;1dUFBL-2}H z?g!yRa4Y;rsqrP?K+R4jgLc#TMEEECi;fq-R`@<0$6*@Y0y8Kzk(plHtZFr}t)kV0 zW3@Vt2{r**s2kxH_#P|X0M{#)3}1z>!Pnv6C~+1%1ixp}y>K_&2aj8=MJQUTo$y__ zA09>E7Ptc;H^A*6pLy?`0!?6ruB-?p#xc)0lTA#qswo{eIzgOwb(~k%rcSG@O`U4j zhTGITtWNS}1G1JOBh15j?pN1VXuxD3TJ3|2}Ua*mZLFL0Ndf@#=Hm&qhZ^RN-k zpP*ZvK-&qHF;@OW$Kzowtb=z$1DbY1>9`W)PdXAy>STB?Y=agGEDzFlPb`(sCi9ip zR8?Z5RYF#{9^PjslLvT4oq^C=kmqSw@6AsewYrdqVVwOzM0YWS{K;ZOgcwK+H3?!t zG1hXBe#Zczt5$&Il$!_bj7Cz+Q`14(4VqyT8NX!=0U|P;mp!$tuC;w6wt5zxgFnDs z^m-@lOYk&20{8Olx3qtTGvNhzk!MfQz6O7Sm*E+Bp69=#{TuC*w10&^!e2a9YXn^# z*@@9*>~wT#1i5|0a-Cb@Hcxqtj?QwQ6_}LK6FmJKXb2&I&j72OYIMTJUL9K@bak)e z70S5R(6R{kYT8R=F4MQ&nBLj#sinS_Dl*6UEQs7o8Puk|%u_1{$s@hqWA!0; z93Mod%i#);{-Pg-c3MDc7rJ(6uY?AO-g}@9rMaBT_)c+jx^?aEXn@9~MAggP45Ay6IP`1HG z`7UZ_`)Z@)iwh<+?uoFeyITt1kifCBMMgn z!`;QRvSBcadoj<%7-a)2B1l|zME8^Mab%&i`w93|B|KVTs{J5KbR)-=6Z8~UhJ z0BKi*KcT;>tV^WZ!*Qa&q#IT&!bQSC(kJ%RvE?z{FrHIia#dne;&B^n1&KY0Hydl> zHi<18R}w=KH#TO7mwB-=5*rnh&rR+}SP28pF#64EP>s~e>@(%1XPqET{Jsv7;@rlL zQA{shmxbHJI*-q?P>BE$FHs<3iG-1&m-S7Gmlhm3>~u}`PezOpjW<<%xj%@9ktOMP z5`6|`rw$V-N88L14ZWbDcTnB)MN)BoN~8KkSd53#=NoC1B2bBsouU^hv^@AF-2rEl?2M z?M%WxUk`^m$y?sY;m_TPTe6PUNm&|}naK9`q9~&mek!u_V%pMPWcQ(|tSAO)X}mhb zMq?k3+7@%DL+IIn-$X4d>!?hxxNsJCSGJ_X$Kosr`myZZeo-iE z`1USlqE*ZI`~$e1&u^!_2mS%yhC30`G&=KRd{apEJBFKZDi#r+%2u+)Q)|PxVbYX+ z7oAhT83tVwH~rigLPRO{jL{Bl6Ajup?-uepQhaar@%5~=%7Gn*iDyQ;WVwlluU8zFI%3Ns*wEU{&Mvl?vxBFOADyDlU5o3; zz{~%4ek6Om;x~d>UvAJ`v4VZQfGa%)n*v-}+`%~%skedLy*XN|T|lrZ4IPMq1LPz> z2Xs=C6!%vdOT{Vfyz6N>_sQjcCTzzhB_HRipHC(AQ{C1gVmX`uo8TfKC)DN8fMMv&MT=3&ruA4r)BO4xP zSQO)I)}{X<^_r2AlQn{LwkRn{uhr729Mus?K|C7Eu1R&1n?WNl3Sg3&EBPE2S79l) zn?1EI({aX+J^LkN{CYs?@M`UGP@*6>mwBK|; Nlp0ZT+@b`b!0UbtmwNyJ delta 14 VcmbQI^_P9a0p`h*_^g>27yvC^1h4=A diff --git a/common/src/main/resources/assets/viaversion/data/mappings-1.20to1.20.2.nbt b/common/src/main/resources/assets/viaversion/data/mappings-1.20to1.20.2.nbt index e5b33d7a3c632ba061be56169296a219d20a783c..1a2a590c22a6f579b49d543f0b648f0c10874467 100644 GIT binary patch delta 276 zcmbWwOA5j;5C-6}+D#)Uh&xy6IXs8EP}5L~F)2wzy6P=_zaM+gpj!{+kG+A54`%q8 z`QPREg%cd$1{*lS z4%V=OJ)Gf=+adH}fPD#DR#HnCEv)pC=Vp;ei@1&G&x-0TMZ~1`nJ>66a>=Nxjpiuw S)+m+fl-sPTY6j>V!5F@