From 7825a1e460faf440ca506faeaec34edb502ebb1d Mon Sep 17 00:00:00 2001 From: RaphiMC <50594595+RaphiMC@users.noreply.github.com> Date: Thu, 18 Apr 2024 23:11:19 +0200 Subject: [PATCH] Handle show_entity type field --- .../rewriter/ComponentRewriter1_20_5.java | 139 ++++++++++-------- 1 file changed, 79 insertions(+), 60 deletions(-) diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/ComponentRewriter1_20_5.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/ComponentRewriter1_20_5.java index 349d42bb6..731e2f68e 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/ComponentRewriter1_20_5.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/ComponentRewriter1_20_5.java @@ -160,80 +160,99 @@ public class ComponentRewriter1_20_5 extends ComponentRewriter, StructuredData> data = newItem.structuredData().data(); - if (!data.isEmpty()) { - CompoundTag components; + CompoundTag tagTag; try { - components = toTag(data, false); + tagTag = (CompoundTag) SerializerVersion.V1_20_3.toTag(tag.getValue()); } catch (Exception e) { if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) { - Via.getPlatform().getLogger().log(Level.WARNING, "Error writing 1.20.5 components in show_item!", e); + Via.getPlatform().getLogger().log(Level.WARNING, "Error reading 1.20.3 NBT in show_item: " + contentsTag, e); } return; } - contentsTag.put("components", components); + + final Item oldItem = new DataItem(); + oldItem.setIdentifier(itemId); + if (tagTag != null) { // We don't need to remap data if there is none + oldItem.setTag(tagTag); + } + + final Item newItem = protocol.getItemRewriter().handleItemToClient(oldItem); + if (newItem == null) { + return; + } + + final String itemName = Protocol1_20_5To1_20_3.MAPPINGS.itemName(newItem.identifier()); + if (itemName != null) { + contentsTag.putString("id", itemName); + } + + final Map, StructuredData> data = newItem.structuredData().data(); + if (!data.isEmpty()) { + CompoundTag components; + try { + components = toTag(data, false); + } catch (Exception e) { + if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) { + Via.getPlatform().getLogger().log(Level.WARNING, "Error writing 1.20.5 components in show_item!", e); + } + return; + } + contentsTag.put("components", components); + } + } else if (actionTag.getValue().equals("show_entity")) { + final Tag valueTag = hoverEventTag.remove("value"); + if (valueTag != null) { // Convert legacy hover event to new format for rewriting (Doesn't handle all cases, but good enough) + final CompoundTag tag = ComponentUtil.deserializeShowItem(valueTag, SerializerVersion.V1_20_3); + final CompoundTag contentsTag = new CompoundTag(); + contentsTag.put("type", tag.getStringTag("type")); + contentsTag.put("id", tag.getStringTag("id")); + contentsTag.put("name", SerializerVersion.V1_20_3.toTag(SerializerVersion.V1_20_3.toComponent(tag.getString("name")))); + hoverEventTag.put("contents", contentsTag); + } + + final CompoundTag contentsTag = hoverEventTag.getCompoundTag("contents"); + if (contentsTag == null) { + return; + } + + if (this.protocol.getMappingData().getEntityMappings().mappedId(contentsTag.getString("type")) == -1) { + contentsTag.put("type", new StringTag("pig")); + } } }