fix,refactor: /teammsg color fix and some refactoring to the get chat type function

This commit is contained in:
ChomeNS
2024-12-01 15:37:56 +07:00
parent 1ebb798077
commit 89dc2e2781
3 changed files with 63 additions and 53 deletions

View File

@@ -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();
};
}
}

View File

@@ -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;