diff --git a/build-number.txt b/build-number.txt index 7c1c0cac..f6b31887 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -1142 \ No newline at end of file +1144 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/data/Team.java b/src/main/java/me/chayapak1/chomens_bot/data/Team.java index 1f671452..e24543b4 100644 --- a/src/main/java/me/chayapak1/chomens_bot/data/Team.java +++ b/src/main/java/me/chayapak1/chomens_bot/data/Team.java @@ -1,5 +1,8 @@ package me.chayapak1.chomens_bot.data; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.CollisionRule; import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.NameTagVisibility; import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.TeamColor; @@ -37,4 +40,31 @@ public class Team { this.prefix = prefix; this.suffix = suffix; } + + public Style colorToStyle () { + return switch (color) { + case BLACK -> Style.style(NamedTextColor.BLACK); + case DARK_BLUE -> Style.style(NamedTextColor.DARK_BLUE); + case DARK_GREEN -> Style.style(NamedTextColor.DARK_GREEN); + case DARK_AQUA -> Style.style(NamedTextColor.DARK_AQUA); + case DARK_RED -> Style.style(NamedTextColor.DARK_RED); + case DARK_PURPLE -> Style.style(NamedTextColor.DARK_PURPLE); + case GOLD -> Style.style(NamedTextColor.GOLD); + case GRAY -> Style.style(NamedTextColor.GRAY); + case DARK_GRAY -> Style.style(NamedTextColor.DARK_GRAY); + case BLUE -> Style.style(NamedTextColor.BLUE); + case GREEN -> Style.style(NamedTextColor.GREEN); + case AQUA -> Style.style(NamedTextColor.AQUA); + case RED -> Style.style(NamedTextColor.RED); + case LIGHT_PURPLE -> Style.style(NamedTextColor.LIGHT_PURPLE); + case YELLOW -> Style.style(NamedTextColor.YELLOW); + case WHITE -> Style.style(NamedTextColor.WHITE); + case OBFUSCATED -> Style.style(TextDecoration.OBFUSCATED); + case BOLD -> Style.style(TextDecoration.BOLD); + case STRIKETHROUGH -> Style.style(TextDecoration.STRIKETHROUGH); + case UNDERLINED -> Style.style(TextDecoration.UNDERLINED); + case ITALIC -> Style.style(TextDecoration.ITALIC); + case RESET -> Style.empty(); + }; + } } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java index 4b0d6f55..4dfc464e 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java @@ -1,5 +1,6 @@ package me.chayapak1.chomens_bot.plugins; +import me.chayapak1.chomens_bot.data.Team; import org.geysermc.mcprotocollib.network.Session; import org.geysermc.mcprotocollib.network.packet.Packet; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundDisguisedChatPacket; @@ -109,22 +110,28 @@ public class ChatPlugin extends Bot.Listener { } } - private String getTranslationByChatType (int chatType) { - String translation = null; - + private Component getComponentByChatType (int chatType, Component name, Component message) { // maybe use the registry in the login packet? too lazy.,.,,. - switch (chatType) { - case 0 -> translation = "chat.type.text"; // normal vanilla chat message - case 1 -> translation = "chat.type.emote"; // /me - case 2 -> translation = "commands.message.display.incoming"; // player that received /w message - case 3 -> translation = "commands.message.display.outgoing"; // player that sent /w message - case 4 -> translation = "%s"; // idk what this is but when the kaboom chat it uses this chat type - case 5 -> translation = "chat.type.announcement"; // /say - case 6 -> translation = "chat.type.team.text"; // player that received /teammsg message - case 7 -> translation = "chat.type.team.sent"; // player that sent /teammsg message - } + return switch (chatType) { + case 0 -> Component.translatable("chat.type.text", name, message); // normal vanilla chat message + case 1 -> Component.translatable("chat.type.emote", name, message); // /me + case 2 -> Component.translatable("commands.message.display.incoming"); // player that received /w message + case 3 -> Component.translatable("commands.message.display.outgoing", name, message); // player that sent /w message + case 4 -> Component.translatable("%s", name, message); // paper chat type thingy + case 5 -> Component.translatable("chat.type.announcement", name, message); // /say + case 6, 7 -> { + final Team botTeam = bot.team.teamsByPlayer.get(bot.profile.getName()); + final Component botTeamDisplayName = Component + .translatable("chat.square_brackets") + .arguments(botTeam.displayName) + .style(botTeam.colorToStyle()); - return translation; + yield chatType == 6 ? + Component.translatable("chat.type.team.text", botTeamDisplayName, name, message) : // player that received /teammsg message (type 6) + Component.translatable("chat.type.team.sent", botTeamDisplayName, name, message); // player that sent /teammsg message (type 7) + } + default -> null; + }; } public void packetReceived (ClientboundPlayerChatPacket packet) { @@ -142,30 +149,18 @@ public class ChatPlugin extends Bot.Listener { final Component unsignedContent = packet.getUnsignedContent(); - final String translation = getTranslationByChatType(packet.getChatType().id()); - for (Listener listener : listeners) { final boolean bool = listener.playerMessageReceived(playerMessage); if (!bool) break; - if (translation != null && unsignedContent == null) { - TranslatableComponent component = Component.translatable(translation); + final Component chatTypeComponent = getComponentByChatType(packet.getChatType().id(), playerMessage.displayName, playerMessage.contents); - if (translation.equals("chat.type.team.text") || translation.equals("chat.type.team.sent")) { // ohio - component = component.arguments( - Component.translatable("chat.square_brackets").arguments(bot.team.teamsByPlayer.get(bot.profile.getName()).displayName), - playerMessage.displayName, - playerMessage.contents - ); - } else { - component = component.arguments(playerMessage.displayName, playerMessage.contents); - } + if (chatTypeComponent != null && unsignedContent == null) { + final String string = ComponentUtilities.stringify(chatTypeComponent); + final String ansi = ComponentUtilities.stringifyAnsi(chatTypeComponent); - final String string = ComponentUtilities.stringify(component); - final String ansi = ComponentUtilities.stringifyAnsi(component); - - final boolean _bool = listener.systemMessageReceived(component, string, ansi); + final boolean _bool = listener.systemMessageReceived(chatTypeComponent, string, ansi); if (!_bool) break; } else { @@ -181,8 +176,6 @@ public class ChatPlugin extends Bot.Listener { public void packetReceived (ClientboundDisguisedChatPacket packet) { try { - final String translation = getTranslationByChatType(packet.getChatType().id()); - final Component component = packet.getMessage(); PlayerMessage parsedFromMessage = null; @@ -192,33 +185,20 @@ public class ChatPlugin extends Bot.Listener { if (parsedFromMessage != null) break; } - if (translation != null && parsedFromMessage == null) { - final Component name = packet.getName(); - final Component content = packet.getMessage(); + final Component chatTypeComponent = getComponentByChatType(packet.getChatType().id(), packet.getName(), packet.getMessage()); - TranslatableComponent translatableComponent = Component.translatable(translation); - - if (translation.equals("chat.type.team.text") || translation.equals("chat.type.team.sent")) { // ohio - translatableComponent = translatableComponent.arguments( - Component.translatable("chat.square_brackets").arguments(bot.team.teamsByPlayer.get(bot.profile.getName()).displayName), - name, - content - ); - } else { - translatableComponent = translatableComponent.arguments(name, content); - } - - final String string = ComponentUtilities.stringify(translatableComponent); - final String ansi = ComponentUtilities.stringifyAnsi(translatableComponent); + if (chatTypeComponent != null && parsedFromMessage == null) { + final String string = ComponentUtilities.stringify(chatTypeComponent); + final String ansi = ComponentUtilities.stringifyAnsi(chatTypeComponent); for (Listener listener : listeners) { - final boolean bool = listener.systemMessageReceived(translatableComponent, string, ansi); + final boolean bool = listener.systemMessageReceived(chatTypeComponent, string, ansi); if (!bool) break; } for (ChatParser parser : chatParsers) { - final PlayerMessage parsed = parser.parse(translatableComponent); + final PlayerMessage parsed = parser.parse(chatTypeComponent); if (parsed == null) continue;