From a856658399b076ef90ea4d0e7438e4323c143992 Mon Sep 17 00:00:00 2001 From: Gero Date: Fri, 1 Jul 2022 10:17:51 +0200 Subject: [PATCH] Handle 1.19.1 chat types --- .../Protocol1_18_2To1_19.java | 127 +++++++++--------- .../data/BackwardsMappings.java | 2 +- .../viabackwards/data/chat-types-1.19.1.nbt | Bin 0 -> 293 bytes .../viabackwards/data/chat-types-1.19.nbt | Bin 371 -> 0 bytes 4 files changed, 63 insertions(+), 66 deletions(-) create mode 100644 common/src/main/resources/assets/viabackwards/data/chat-types-1.19.1.nbt delete mode 100644 common/src/main/resources/assets/viabackwards/data/chat-types-1.19.nbt diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java index 162ea0c0..2ea92a5c 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java @@ -40,9 +40,13 @@ 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.format.NamedTextColor; +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; import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.StringTag; import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets; import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets; @@ -56,7 +60,6 @@ import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; import java.time.Instant; -import java.util.Map; import java.util.UUID; public final class Protocol1_18_2To1_19 extends BackwardsProtocol { @@ -201,13 +204,19 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol { + final int chatTypeId = wrapper.read(Type.VAR_INT); + wrapper.write(Type.BYTE, (byte) 1); + wrapper.passthrough(Type.UUID); final JsonElement senderName = wrapper.read(Type.COMPONENT); final JsonElement teamName = wrapper.read(Type.OPTIONAL_COMPONENT); final JsonElement element = wrapper.get(Type.COMPONENT, 0); - handleChatType(wrapper, senderName, teamName, element); + final JsonElement decoratedMessage = decorateChatMessage(wrapper, chatTypeId, senderName, teamName, element); + if (decoratedMessage == null) { + wrapper.cancel(); + } else { + wrapper.set(Type.COMPONENT, 0, decoratedMessage); + } }); read(Type.LONG); // Timestamp read(Type.LONG); // Salt @@ -219,9 +228,9 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol handleChatType(wrapper, null, null, wrapper.get(Type.COMPONENT, 0))); } }); @@ -312,72 +321,60 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol handler : handlers) { - byte oldId; - switch (handler.getKey()) { - case "chat": - oldId = 1; - break; - case "overlay": - oldId = 2; - break; - default: - continue; + chatType = chatType. get("element").get("chat"); + if (chatType == null) { + return null; + } + + String translationKey = (String) chatType.get("translation_key").getValue(); + String rawTranslation = ViaBackwards.getConfig().chatTypeFormat(translationKey); + if (rawTranslation == null) { + ViaBackwards.getPlatform().getLogger().warning("Missing chat type translation for key " + translationKey); + return null; + } + + Component component = Component.text(rawTranslation); + + CompoundTag style = chatType.get("style"); + if (style != null) { + StringTag color = style.get("color"); + if (color != null && NamedTextColor.NAMES.value(color.getValue()) != null) { + component.color(NamedTextColor.NAMES.value(color.getValue())); } - - CompoundTag decoration = ((CompoundTag) handler.getValue()).get("decoration"); - - JsonElement formattedMessage; - if (decoration != null) { - String translationKey = (String) decoration.get("translation_key").getValue(); - String rawTranslation = ViaBackwards.getConfig().chatTypeFormat(translationKey); - if (rawTranslation == null) { - ViaBackwards.getPlatform().getLogger().warning("Missing chat type translation for key " + translationKey); - continue; + for (String key : TextDecoration.NAMES.keys()) { + if (style.contains(key) && style. get(key).asByte() == 1) { + component.decorate(TextDecoration.NAMES.value(key)); } - Component component = Component.text(rawTranslation); - ListTag parameters = decoration.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 "team_name": - Preconditions.checkNotNull(teamName, "Team name is null"); - component = component.replaceText(replace(teamName)); - break; - default: - ViaBackwards.getPlatform().getLogger().warning("Unknown parameter for chat decoration: " + element.getValue()); - } - } - formattedMessage = GsonComponentSerializer.gson().serializeToTree(component); - } else { - formattedMessage = message; - } - - if (!handled) { - handled = true; - wrapper.set(Type.BYTE, 0, oldId); - wrapper.set(Type.COMPONENT, 0, formattedMessage); - } else { - PacketWrapper extra = wrapper.create(ClientboundPackets1_18.CHAT_MESSAGE); - extra.write(Type.COMPONENT, formattedMessage); - extra.write(Type.BYTE, oldId); - extra.write(Type.UUID, wrapper.get(Type.UUID, 0)); } } - if (!handled) wrapper.cancel(); + 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 "team_name": + Preconditions.checkNotNull(teamName, "Team name is null"); + component = component.replaceText(replace(teamName)); + break; + default: + ViaBackwards.getPlatform().getLogger().warning("Unknown parameter for chat decoration: " + element.getValue()); + } + } + + return GsonComponentSerializer.gson().serializeToTree(component); } } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/data/BackwardsMappings.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/data/BackwardsMappings.java index 6016a266..ccec19fd 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/data/BackwardsMappings.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/data/BackwardsMappings.java @@ -53,7 +53,7 @@ public final class BackwardsMappings extends com.viaversion.viabackwards.api.dat } try { - ListTag chatTypes = BinaryTagIO.readCompressedInputStream(VBMappingDataLoader.getResource("chat-types-1.19.nbt")).get("values"); + ListTag chatTypes = BinaryTagIO.readCompressedInputStream(VBMappingDataLoader.getResource("chat-types-1.19.1.nbt")).get("values"); for (final Tag chatType : chatTypes) { final CompoundTag chatTypeCompound = (CompoundTag) chatType; final NumberTag idTag = chatTypeCompound.get("id"); diff --git a/common/src/main/resources/assets/viabackwards/data/chat-types-1.19.1.nbt b/common/src/main/resources/assets/viabackwards/data/chat-types-1.19.1.nbt new file mode 100644 index 0000000000000000000000000000000000000000..dfe33b286e38cbb7dbf6aa1796b42352c947f543 GIT binary patch literal 293 zcmV+=0owi_iwFSE!MOUn^!6GSsBV=JK;2gViR z-FIU1d6uV;fs@khsFbMRnczK1dor6%F*}=sM8ZML(C`lped;a^=Ti(HznW6xIVI}2 zX>Hm&>KiM$WTmUIOximxu{6Pjh@y+s&#9Yca)jJ5Dk{e&H>Dg3Rj!|2s#9ngjpYX*7_nyA7T>vZ~-J#f$EdU_TAyFs^mXa%C1~=}Ry`Y=Hl-HpS1!N>h zl5zzk`$_>tO-vhfT&o;b&Y-fQ+f}dRVYxq4I^R<1=sg^tTjvD@+oDAitQ;Ae2jwZG zmQ+m!GNzRa4tuwSLep#Kt>M~m=g)J#`|MmElxSRnfaFNzW*}m{btHQxlP^qu%$*)O zBh~ew+Jt?@)kgQi(^xpuJ2C=&)O#BxLSHd0C91mbo{b(=1PqnZTg8su*E+HYkhIMy zpky?lr=x-`C0UCNl{L3*7)r@iC~?*FNpqMpEwq88G3Y0da)*Mm$@MXO92h!6S$zX? zJ{sgY&WQ4tpJ4`z&brIN4=s8&P3PVs`T@o&}xl!y2V31RT<6iasg R7ka3M^#T6l>9D&7000`nu4@1Q