From 50084c112db07979653af91464e51de44df476d2 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Fri, 11 Oct 2024 16:30:39 +0200 Subject: [PATCH] Fix tag related issues to prepare for 1.21.2 - Inline tag values in 1.21 enchantments - Fix TagRewriter addTags if the server doesn't send values for a registry - Send the tags packet in 1.12->1.13 before the play login packet to fix tracking in 1.20->1.20.2 --- .../v1_12_2to1_13/Protocol1_12_2To1_13.java | 11 ++++-- .../Protocol1_20_3To1_20_5.java | 1 + .../v1_20_5to1_21/Protocol1_20_5To1_21.java | 5 +++ .../viaversion/rewriter/TagRewriter.java | 34 +++++++++++++++--- .../viaversion/data/enchantments-1.21.nbt | Bin 29334 -> 45633 bytes 5 files changed, 45 insertions(+), 6 deletions(-) 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 d679f1849..7df19e7cb 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 @@ -34,6 +34,7 @@ import com.viaversion.viaversion.api.protocol.packet.State; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; import com.viaversion.viaversion.api.protocol.remapper.ValueTransformer; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.api.type.types.misc.ParticleType; import com.viaversion.viaversion.api.type.types.version.Types1_13; @@ -145,7 +146,7 @@ public class Protocol1_12_2To1_13 extends AbstractProtocol { + final PacketWrapper tagsPacket = w.create(ClientboundPackets1_13.UPDATE_TAGS, wrapper -> { wrapper.write(Types.VAR_INT, MAPPINGS.getBlockTags().size()); // block tags for (Map.Entry tag : MAPPINGS.getBlockTags().entrySet()) { wrapper.write(Types.STRING, tag.getKey()); @@ -164,7 +165,13 @@ public class Protocol1_12_2To1_13 extends AbstractProtocol implements com.viavers public void handleGeneric(final PacketWrapper wrapper) { final int length = wrapper.passthrough(Types.VAR_INT); - int editedLength = length; + int finalLength = length; + final Set readTypes = EnumSet.noneOf(RegistryType.class); for (int i = 0; i < length; i++) { final String registryKey = wrapper.read(Types.STRING); - if (toRemoveRegistries.contains(Key.stripMinecraftNamespace(registryKey))) { - wrapper.set(Types.VAR_INT, 0, --editedLength); + final String strippedKey = Key.stripMinecraftNamespace(registryKey); + if (toRemoveRegistries.contains(strippedKey)) { + finalLength--; + final int tagsSize = wrapper.read(Types.VAR_INT); for (int j = 0; j < tagsSize; j++) { wrapper.read(Types.STRING); @@ -157,7 +161,29 @@ public class TagRewriter implements com.viavers } wrapper.write(Types.STRING, registryKey); - handle(wrapper, Key.stripMinecraftNamespace(registryKey)); + + final RegistryType type = RegistryType.getByKey(registryKey); + if (type != null) { + handle(wrapper, type); + readTypes.add(type); + } else { + handle(wrapper, null, null, null, null); + } + } + + for (final Map.Entry> entry : toAdd.entrySet()) { + if (readTypes.contains(entry.getKey())) { + continue; + } + + // Registry wasn't present in the packet, add them here + wrapper.write(Types.STRING, entry.getKey().resourceLocation()); + appendNewTags(wrapper, entry.getKey()); + finalLength++; + } + + if (length != finalLength) { + wrapper.set(Types.VAR_INT, 0, finalLength); } } diff --git a/common/src/main/resources/assets/viaversion/data/enchantments-1.21.nbt b/common/src/main/resources/assets/viaversion/data/enchantments-1.21.nbt index 91baa7abd9a92e78490a2e66f97aade7b5e11fcd..5989737d8b5c0919d55b7e69fd8ce12456568707 100644 GIT binary patch literal 45633 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 delta 4827 zcmcgwU2GIp6rQQwrnHpxhjvTbrEIPJ+q8&FtCUJ@3k0y(HLXqYhhe&VyPYzBotfRG z^aoH-QJP{8h}41-jHHP%HkUVz3C5WCAl2~ZZ#3{A(J1Px#yh)Pcb4vw-g)q8)199A z&iT%FzjN+hxt{g<4fX@fKA6im^{}ccnt_6xU?53n%I=p083idWu_8m80)t3j?9++!O>i=& z0Nl+UT;ut~266rlFT8usg>OFaDpds*v6!#eUDH9seLsOLVUc!xciRz`9Fiq|y)MHs5mD&B1A4S}$?3{u^T6$>h4Wh%Hl%@aXMl<#UR7i$ z@AksnDHr^*y@o{JHY3Wdu_-em$V+?(!TfYFRhI2lxlFb(q9VqcmX2gyFwDVZD4Z^l zkp{QMHp1bi9MZ6_Y!=lw;ex%LmH$Ukp2ec-EPSOD1$_5?@W+@hQPU7qbOq?5aD)Fc zYl{lq76p~Cqvs}ZrzO(Oq(MEZXhATo&6HDF?_xo>sud!* zaZ#^LJ|-(x+(tQ7Q&glG0@CxCyyPE=T(b==Oj30)IlQEVWux`5nG<;(Y};G{-4!Kp z`L!DOt|A|v=xc0B(~nFO*Fu!pm1(yNkMH@6YS_kGYEDY^gbUX{n?*1MuM`$K}sx<*2_x25{>n{Z=x7l$42jfgl~-%v0jQ- z|MQ_V<)z%&td}4` zA2d&k+1}E87anGg3fL|5Q9|r(Ym&9vluPz{O;8OXXzods z*g09?peYl#POr}LrBOl3R%TH_KvQ(xRFEm$xl^qq_O?V*F3~B%Ta3k3r=QG9mt`hU zJac9;EtQ!9VAt7UJDJ7Kg?r|objg)wa1_|`rbw@j7}CDkzt*SWJ`<9}2N3z4#k`ib z*hF+r#`Yh$dj7*^(m6qr!ZJ!+#h4mPh4I@N7Zv27xqoOOvYi}IMMWnojE+BjYc_2^ jGGz{(k?j{hzhHM5nOZYX{~L2xX)ZbuUQT${!o2n`OS0AS