diff --git a/protocol/src/main/java/mc/protocol/model/text/TextColor.java b/protocol/src/main/java/mc/protocol/model/text/TextColor.java index 8e914cc..c290fa5 100644 --- a/protocol/src/main/java/mc/protocol/model/text/TextColor.java +++ b/protocol/src/main/java/mc/protocol/model/text/TextColor.java @@ -25,6 +25,12 @@ public enum TextColor { WHITE ("white", 'f'); //@formatter:on + public static final char SPECIAL_CHAR = '\u00a7'; + private final String name; private final char code; + + public String toLegacy() { + return "" + SPECIAL_CHAR + code; + } } diff --git a/protocol/src/main/java/mc/protocol/model/text/TextStyleLegacy.java b/protocol/src/main/java/mc/protocol/model/text/TextStyleLegacy.java new file mode 100644 index 0000000..b66410e --- /dev/null +++ b/protocol/src/main/java/mc/protocol/model/text/TextStyleLegacy.java @@ -0,0 +1,20 @@ +package mc.protocol.model.text; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public enum TextStyleLegacy { + + OBFUSCATED('k'), + BOLD('l'), + STRIKETHOUGH('m'), + UNDERLINE('n'), + ITALIC('o'), + RESET('r'); + + private final char code; + + public String toLegacy() { + return "" + TextColor.SPECIAL_CHAR + code; + } +} diff --git a/protocol/src/main/java/mc/protocol/packets/server/SChatPacket.java b/protocol/src/main/java/mc/protocol/packets/server/SChatPacket.java index 3456535..aef3751 100644 --- a/protocol/src/main/java/mc/protocol/packets/server/SChatPacket.java +++ b/protocol/src/main/java/mc/protocol/packets/server/SChatPacket.java @@ -3,6 +3,8 @@ package mc.protocol.packets.server; import lombok.Data; import mc.protocol.io.NetByteBuf; import mc.protocol.model.text.Text; +import mc.protocol.model.text.TextColor; +import mc.protocol.model.text.TextStyle; import mc.protocol.packets.ServerSidePacket; import mc.protocol.serializer.TextSerializer; import mc.protocol.utils.ChatPosition; @@ -14,12 +16,17 @@ import mc.protocol.utils.ChatPosition; *
* | FIELD | TYPE | NOTES | * |-----------|------|-----------------------------------------------| - * | JSON Data | Text | Текст | + * | JSON Data | Text | Текст* | * | Position | Byte | 0 - сообщение чата | * | | | 1 - системное сообщение (отображается в чате) | * | | | 2 - над панелью быстрого доступа (hotbar) | ** + *
+ * * - стоит обратить внимание, что {@link TextColor} и {@link TextStyle} не работают: клиент не применяет + * стилистику в таком виде. Однако метод через символ "§" (\u00a7) работает. + *
+ * * @see Chat Message (clientbound) */ @Data diff --git a/server/src/main/java/mc/server/PacketHandler.java b/server/src/main/java/mc/server/PacketHandler.java index b4dd9ee..bff01e4 100644 --- a/server/src/main/java/mc/server/PacketHandler.java +++ b/server/src/main/java/mc/server/PacketHandler.java @@ -8,6 +8,7 @@ import mc.protocol.model.Location; import mc.protocol.model.Look; import mc.protocol.model.ServerInfo; import mc.protocol.model.text.Text; +import mc.protocol.model.text.TextColor; import mc.protocol.packets.PingPacket; import mc.protocol.packets.client.HandshakePacket; import mc.protocol.packets.client.LoginStartPacket; @@ -128,13 +129,13 @@ public class PacketHandler { // -- Эксперименты -- // var chatPacket = new SChatPacket(); - chatPacket.setMessage(Text.of("== Hello! ==")); + chatPacket.setMessage(Text.of(TextColor.RED.toLegacy() + "== Hello! ==")); chatPacket.setPosition(ChatPosition.CHAT); context.send(chatPacket); var systemChatPacket = new SChatPacket(); - systemChatPacket.setMessage(Text.of("[SYSTEM]")); + systemChatPacket.setMessage(Text.of(TextColor.RED.toLegacy() + "[SYSTEM]")); systemChatPacket.setPosition(ChatPosition.SYSTEM); context.send(systemChatPacket);