From 666b204ebbd696c415b6fc703a44ae2c48563e82 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Tue, 12 Mar 2024 10:26:31 +0100 Subject: [PATCH] Prepare class for structured data->tag rewriting --- .../api/type/types/item/ItemType1_20_5.java | 4 +- .../BlockItemPacketRewriter1_20_5.java | 14 +++-- .../rewriter/StructuredDataConverter.java | 57 +++++++++++++++++++ 3 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/StructuredDataConverter.java diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_20_5.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_20_5.java index 434a5557c..f33d639e1 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_20_5.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_20_5.java @@ -66,14 +66,14 @@ public class ItemType1_20_5 extends Type { for (int i = 0; i < valuesSize; i++) { final StructuredData value = dataType.read(buffer); final StructuredDataKey key = dataType.key(value.id()); - Preconditions.checkNotNull(key, "No data component serializer found for $s", value); + Preconditions.checkNotNull(key, "No data component serializer found for %s", value); map.put(key, value); } for (int i = 0; i < markersSize; i++) { final int id = Type.VAR_INT.readPrimitive(buffer); final StructuredDataKey key = dataType.key(id); - Preconditions.checkNotNull(key, "No data component serializer found for empty id $s", id); + Preconditions.checkNotNull(key, "No data component serializer found for empty id %s", id); map.put(key, StructuredData.empty(key, id)); } return map; diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java index 426a67178..bbf523f6d 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java @@ -82,7 +82,6 @@ import com.viaversion.viaversion.util.Key; import com.viaversion.viaversion.util.UUIDUtil; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -250,7 +249,9 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter structuredData : data.data().values()) { + StructuredDataConverter.rewrite(structuredData, tag); + } return dataItem; } @@ -395,14 +396,15 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter. + */ +package com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter; + +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.viaversion.viaversion.api.minecraft.data.StructuredData; +import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey; +import com.viaversion.viaversion.util.ComponentUtil; +import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap; +import java.util.Map; + +final class StructuredDataConverter { + + private static final Map, Rewriter> REWRITERS = new Reference2ObjectOpenHashMap<>(); + + static { + // TODO + register(StructuredDataKey.CUSTOM_NAME, (data, tag) -> tag.putString("CustomName", ComponentUtil.tagToJsonString(data.value()))); + } + + public static void rewrite(final StructuredData data, final CompoundTag tag) { + if (data.isEmpty()) { + return; + } + + //noinspection unchecked + final Rewriter rewriter = (Rewriter) REWRITERS.get(data.key()); + if (rewriter != null) { + rewriter.rewrite(data, tag); + } + } + + private static void register(final StructuredDataKey key, final Rewriter rewriter) { + REWRITERS.put(key, rewriter); + } + + @FunctionalInterface + interface Rewriter { + + void rewrite(StructuredData data, CompoundTag tag); + } +}