From cc1c88001f3bfe7d0e273f89448dcaf00ef54819 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Wed, 7 Aug 2024 17:36:42 +0200 Subject: [PATCH] Hotfix item id changes in item hover events --- .../rewriter/ComponentRewriter1_21.java | 24 +++--------- .../rewriter/ComponentRewriter.java | 38 +++++++++++++++++-- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_20_5to1_21/rewriter/ComponentRewriter1_21.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_20_5to1_21/rewriter/ComponentRewriter1_21.java index 0c5781b68..739e3d4d3 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_20_5to1_21/rewriter/ComponentRewriter1_21.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_20_5to1_21/rewriter/ComponentRewriter1_21.java @@ -48,26 +48,12 @@ public final class ComponentRewriter1_21 extends ComponentRewriter container = TagUtil.getNamespacedCompoundTagList(tag, "minecraft:container"); - if (container == null) { - return; - } - for (final CompoundTag entryTag : container) { - final CompoundTag itemTag = entryTag.getCompoundTag("item"); - - final CompoundTag componentsTag = itemTag.getCompoundTag("components"); - if (componentsTag != null) { - convertAttributeModifiersComponent(componentsTag); - handleContainerComponent(componentsTag); - } - } - } - @Override - protected void handleShowItem(final UserConnection connection, final CompoundTag componentsTag) { - convertAttributeModifiersComponent(componentsTag); - handleContainerComponent(componentsTag); + protected void handleShowItem(final UserConnection connection, final CompoundTag itemTag, final CompoundTag componentsTag) { + super.handleShowItem(connection, itemTag, componentsTag); + if (componentsTag != null) { + convertAttributeModifiersComponent(componentsTag); + } } @Override diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/ComponentRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/ComponentRewriter.java index 162c63e2f..9428917a4 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/ComponentRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/ComponentRewriter.java @@ -38,6 +38,7 @@ import com.viaversion.viaversion.api.type.Types; import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets; import com.viaversion.viaversion.util.ComponentUtil; import com.viaversion.viaversion.util.SerializerVersion; +import com.viaversion.viaversion.util.TagUtil; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -316,15 +317,46 @@ public class ComponentRewriter implements com.v return; } + // Until they're properly parsed final CompoundTag componentsTag = contentsTag.getCompoundTag("components"); + handleShowItem(connection, contentsTag, componentsTag); if (componentsTag != null) { - handleShowItem(connection, componentsTag); + handleContainerContents(connection, componentsTag); + handleItemArrayContents(connection, componentsTag, "bundle_contents"); + handleItemArrayContents(connection, componentsTag, "charged_projectiles"); } } } - protected void handleShowItem(final UserConnection connection, final CompoundTag componentsTag) { - // To override if needed + protected void handleShowItem(final UserConnection connection, final CompoundTag itemTag, @Nullable final CompoundTag componentsTag) { + final StringTag idTag = itemTag.getStringTag("id"); + final String mappedId = protocol.getMappingData().getFullItemMappings().mappedIdentifier(idTag.getValue()); + if (mappedId != null) { + idTag.setValue(mappedId); + } + } + + protected void handleContainerContents(final UserConnection connection, final CompoundTag tag) { + final ListTag container = TagUtil.getNamespacedCompoundTagList(tag, "minecraft:container"); + if (container == null) { + return; + } + + for (final CompoundTag entryTag : container) { + final CompoundTag itemTag = entryTag.getCompoundTag("item"); + handleShowItem(connection, itemTag, itemTag.getCompoundTag("components")); + } + } + + protected void handleItemArrayContents(final UserConnection connection, final CompoundTag tag, final String key) { + final ListTag container = TagUtil.getNamespacedCompoundTagList(tag, key); + if (container == null) { + return; + } + + for (final CompoundTag itemTag : container) { + handleShowItem(connection, itemTag, itemTag.getCompoundTag("components")); + } } protected SerializerVersion inputSerializerVersion() {