From 044980c1a8b7b5b15350abf1479ae9ca1386e13f Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Thu, 28 Jul 2022 15:00:16 +0200 Subject: [PATCH] Simplify component building --- .../Protocol1_18_2To1_19_1.java | 87 ++++++++++--------- 1 file changed, 48 insertions(+), 39 deletions(-) diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19_1/Protocol1_18_2To1_19_1.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19_1/Protocol1_18_2To1_19_1.java index 63d68b23..4916722f 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19_1/Protocol1_18_2To1_19_1.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19_1/Protocol1_18_2To1_19_1.java @@ -41,8 +41,9 @@ import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.data.entity.EntityTrackerBase; import com.viaversion.viaversion.libs.gson.JsonElement; import com.viaversion.viaversion.libs.kyori.adventure.text.Component; -import com.viaversion.viaversion.libs.kyori.adventure.text.TextReplacementConfig; +import com.viaversion.viaversion.libs.kyori.adventure.text.TranslatableComponent; import com.viaversion.viaversion.libs.kyori.adventure.text.format.NamedTextColor; +import com.viaversion.viaversion.libs.kyori.adventure.text.format.Style; import com.viaversion.viaversion.libs.kyori.adventure.text.format.TextDecoration; import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import com.viaversion.viaversion.libs.opennbt.tag.builtin.ByteTag; @@ -62,6 +63,8 @@ import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; import java.time.Instant; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; public final class Protocol1_18_2To1_19_1 extends BackwardsProtocol { @@ -223,7 +226,7 @@ public final class Protocol1_18_2To1_19_1 extends BackwardsProtocolget(key).asByte() == 1) { - component = component.decorate(TextDecoration.NAMES.value(key)); + final Style.Builder styleBuilder = Style.style(); + final StringTag color = style.get("color"); + if (color != null) { + final NamedTextColor textColor = NamedTextColor.NAMES.value(color.getValue()); + if (textColor != null) { + styleBuilder.color(NamedTextColor.NAMES.value(color.getValue())); } } - } - ListTag parameters = chatType.get("parameters"); - if (parameters != null) for (Tag element : parameters) { - switch ((String) element.getValue()) { - case "sender": - component = component.replaceText(replace(senderName)); - break; - case "content": - component = component.replaceText(replace(message)); - break; - case "target": - Preconditions.checkNotNull(targetName, "Target name is null"); - component = component.replaceText(replace(targetName)); - break; - default: - ViaBackwards.getPlatform().getLogger().warning("Unknown parameter for chat decoration: " + element.getValue()); + for (final String key : TextDecoration.NAMES.keys()) { + if (style.contains(key)) { + styleBuilder.decoration(TextDecoration.NAMES.value(key), style.get(key).asByte() == 1); + } } + componentBuilder.style(styleBuilder.build()); } - return GsonComponentSerializer.gson().serializeToTree(component); + // Add the replacements + final ListTag parameters = chatType.get("parameters"); + if (parameters != null) { + final List arguments = new ArrayList<>(); + for (final Tag element : parameters) { + JsonElement argument = null; + switch ((String) element.getValue()) { + case "sender": + argument = senderName; + break; + case "content": + argument = message; + break; + case "target": + Preconditions.checkNotNull(targetName, "Target name is null"); + argument = targetName; + break; + default: + ViaBackwards.getPlatform().getLogger().warning("Unknown parameter for chat decoration: " + element.getValue()); + } + if (argument != null) { + arguments.add(GsonComponentSerializer.gson().deserializeFromTree(argument)); + } + } + componentBuilder.args(arguments); + } + + return GsonComponentSerializer.gson().serializeToTree(componentBuilder.build()); } }