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 00000000..dfe33b28 Binary files /dev/null and b/common/src/main/resources/assets/viabackwards/data/chat-types-1.19.1.nbt differ diff --git a/common/src/main/resources/assets/viabackwards/data/chat-types-1.19.nbt b/common/src/main/resources/assets/viabackwards/data/chat-types-1.19.nbt deleted file mode 100644 index 5c5fe279..00000000 Binary files a/common/src/main/resources/assets/viabackwards/data/chat-types-1.19.nbt and /dev/null differ