From dc2986600cbd73f59956e835a0b7e9880d74273c Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Wed, 27 Dec 2023 11:40:45 +0100 Subject: [PATCH] Use 1.12 serializer for json to legacy conversion --- .../Protocol1_19_1To1_19.java | 19 ++++-- .../Protocol1_19_3To1_19_1.java | 2 +- .../Protocol1_20_3To1_20_2.java | 6 +- .../rewriter/EntityPacketRewriter1_20_3.java | 6 +- .../util/ComponentConverter.java | 49 ---------------- .../viaversion/util/ComponentUtil.java | 58 +++++++++++++++++-- .../util/NBTConverter.java | 6 +- 7 files changed, 79 insertions(+), 67 deletions(-) delete mode 100644 common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/util/ComponentConverter.java rename common/src/main/java/com/viaversion/viaversion/{protocols/protocol1_20_3to1_20_2 => }/util/NBTConverter.java (96%) diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_1to1_19/Protocol1_19_1To1_19.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_1to1_19/Protocol1_19_1To1_19.java index 4c52b5e4e..f33d72048 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_1to1_19/Protocol1_19_1To1_19.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_1to1_19/Protocol1_19_1To1_19.java @@ -330,7 +330,13 @@ public final class Protocol1_19_1To1_19 extends AbstractProtocol { @@ -103,9 +103,9 @@ public final class EntityPacketRewriter1_20_3 extends EntityRewriter { final MetaType type = meta.metaType(); if (type == Types1_20_2.META_TYPES.componentType) { - meta.setTypeAndValue(Types1_20_3.META_TYPES.componentType, ComponentConverter.jsonComponentToTag(meta.value())); + meta.setTypeAndValue(Types1_20_3.META_TYPES.componentType, ComponentUtil.jsonToTag(meta.value())); } else if (type == Types1_20_2.META_TYPES.optionalComponentType) { - meta.setTypeAndValue(Types1_20_3.META_TYPES.optionalComponentType, ComponentConverter.jsonComponentToTag(meta.value())); + meta.setTypeAndValue(Types1_20_3.META_TYPES.optionalComponentType, ComponentUtil.jsonToTag(meta.value())); } else if (type == Types1_20_2.META_TYPES.particleType) { final Particle particle = (Particle) meta.getValue(); final ParticleMappings particleMappings = protocol.getMappingData().getParticleMappings(); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/util/ComponentConverter.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/util/ComponentConverter.java deleted file mode 100644 index dbcbf18e8..000000000 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/util/ComponentConverter.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion - * Copyright (C) 2023 ViaVersion and contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.util; - -import com.github.steveice10.opennbt.tag.builtin.Tag; -import com.google.gson.JsonElement; -import com.viaversion.viaversion.api.Via; -import net.lenni0451.mcstructs.text.ATextComponent; -import net.lenni0451.mcstructs.text.serializer.TextComponentCodec; -import net.lenni0451.mcstructs.text.serializer.TextComponentSerializer; -import org.checkerframework.checker.nullness.qual.Nullable; - -public final class ComponentConverter { - - private static final boolean DEBUG = Boolean.getBoolean("viaversion.debug.components"); - - public static @Nullable JsonElement tagComponentToJson(@Nullable final Tag tag) { - if (DEBUG) { - Via.getPlatform().getLogger().info("Converting tag to json: " + tag); - } - - final ATextComponent component = TextComponentCodec.V1_20_3.deserializeNbtTree(NBTConverter.viaToMcStructs(tag)); - return component != null ? TextComponentSerializer.V1_19_4.serializeJson(component) : null; - } - - public static @Nullable Tag jsonComponentToTag(@Nullable final JsonElement element) { - if (DEBUG) { - Via.getPlatform().getLogger().info("Converting json to tag: " + element); - } - - final ATextComponent component = TextComponentSerializer.V1_19_4.deserialize(element); - return component != null ? NBTConverter.mcStructsToVia(TextComponentCodec.V1_20_3.serializeNbt(component)) : null; - } -} diff --git a/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java b/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java index 9b02c98b3..5789ea016 100644 --- a/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java +++ b/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java @@ -17,29 +17,45 @@ */ package com.viaversion.viaversion.util; +import com.github.steveice10.opennbt.tag.builtin.Tag; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import net.lenni0451.mcstructs.text.ATextComponent; import net.lenni0451.mcstructs.text.Style; import net.lenni0451.mcstructs.text.serializer.LegacyStringDeserializer; +import net.lenni0451.mcstructs.text.serializer.TextComponentCodec; import net.lenni0451.mcstructs.text.serializer.TextComponentSerializer; +import org.checkerframework.checker.nullness.qual.Nullable; +/** + * Component conversion utility, trying to divert most calls to the component library to this class instead for easy replacement. + */ public final class ComponentUtil { public static JsonObject emptyJsonComponent() { - return plainTextToJson(""); + return plainToJson(""); } public static String emptyJsonComponentString() { return "{\"text\":\"\"}"; } - public static JsonObject plainTextToJson(final String message) { + public static JsonObject plainToJson(final String message) { final JsonObject object = new JsonObject(); object.addProperty("text", message); return object; } + public static @Nullable JsonElement tagToJson(@Nullable final Tag tag) { + final ATextComponent component = TextComponentCodec.V1_20_3.deserializeNbtTree(NBTConverter.viaToMcStructs(tag)); + return component != null ? TextComponentSerializer.V1_19_4.serializeJson(component) : null; + } + + public static @Nullable Tag jsonToTag(@Nullable final JsonElement element) { + final ATextComponent component = TextComponentSerializer.V1_19_4.deserialize(element); + return component != null ? NBTConverter.mcStructsToVia(TextComponentCodec.V1_20_3.serializeNbt(component)) : null; + } + public static JsonElement legacyToJson(final String message) { return TextComponentSerializer.V1_12.serializeJson(LegacyStringDeserializer.parse(message, true)); } @@ -57,10 +73,44 @@ public final class ComponentUtil { } public static String jsonToLegacy(final String value) { - return TextComponentSerializer.LATEST.deserialize(value).asLegacyFormatString(); + return TextComponentSerializer.V1_12.deserialize(value).asLegacyFormatString(); } public static String jsonToLegacy(final JsonElement value) { - return TextComponentSerializer.LATEST.deserialize(value).asLegacyFormatString(); + return TextComponentSerializer.V1_12.deserialize(value).asLegacyFormatString(); + } + + public enum SerializerVersion { + V1_8(TextComponentSerializer.V1_8), + V1_9(TextComponentSerializer.V1_9), + V1_12(TextComponentSerializer.V1_12), + V1_14(TextComponentSerializer.V1_14), + V1_15(TextComponentSerializer.V1_15), + V1_16(TextComponentSerializer.V1_16), + V1_17(TextComponentSerializer.V1_17), + V1_18(TextComponentSerializer.V1_18), + V1_19_4(TextComponentSerializer.V1_19_4), + V1_20_3(TextComponentCodec.V1_20_3); + + private final TextComponentSerializer serializer; + private final TextComponentCodec codec; + + SerializerVersion(final TextComponentSerializer serializer) { + this.serializer = serializer; + this.codec = null; + } + + SerializerVersion(final TextComponentCodec codec) { + this.serializer = codec.asSerializer(); + this.codec = codec; + } + + public TextComponentSerializer serializer() { + return serializer; + } + + public @Nullable TextComponentCodec codec() { + return codec; + } } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/util/NBTConverter.java b/common/src/main/java/com/viaversion/viaversion/util/NBTConverter.java similarity index 96% rename from common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/util/NBTConverter.java rename to common/src/main/java/com/viaversion/viaversion/util/NBTConverter.java index e84e15dd9..0b8c8f6c2 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/util/NBTConverter.java +++ b/common/src/main/java/com/viaversion/viaversion/util/NBTConverter.java @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -package com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.util; +package com.viaversion.viaversion.util; import com.github.steveice10.opennbt.tag.builtin.ByteArrayTag; import com.github.steveice10.opennbt.tag.builtin.ByteTag; @@ -37,7 +37,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; final class NBTConverter { - public static @Nullable Tag mcStructsToVia(@Nullable final INbtTag nbtTag) { + static @Nullable Tag mcStructsToVia(@Nullable final INbtTag nbtTag) { if (nbtTag == null) { return null; } else if (nbtTag.isByteTag()) { @@ -78,7 +78,7 @@ final class NBTConverter { } } - public static @Nullable INbtTag viaToMcStructs(@Nullable final Tag tag) { + static @Nullable INbtTag viaToMcStructs(@Nullable final Tag tag) { if (tag == null) { return null; } else if (tag instanceof ByteTag) {