diff --git a/api/src/main/java/com/alttd/chat/objects/ChatFilter.java b/api/src/main/java/com/alttd/chat/objects/ChatFilter.java index f8f41f3..14dfc91 100755 --- a/api/src/main/java/com/alttd/chat/objects/ChatFilter.java +++ b/api/src/main/java/com/alttd/chat/objects/ChatFilter.java @@ -1,5 +1,10 @@ package com.alttd.chat.objects; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextReplacementConfig; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.Style; + import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -47,7 +52,13 @@ public class ChatFilter { Matcher matcher = pattern.matcher(input); while (matcher.find()) if (!isException(input, matcher.start())) { - filterableString.string(filterableString.string().replaceFirst(matcher.group(), "" + matcher.group() + "")); +// filterableString.string(filterableString.string().replaceFirst(matcher.group(), "" + matcher.group() + "")); + filterableString.string(filterableString.component() + .replaceText( + TextReplacementConfig.builder() + .match(matcher.pattern()) + .replacement(Component.text(matcher.group()).style(Style.style(NamedTextColor.GOLD))) + .build())); return true; } return matcher.matches(); diff --git a/api/src/main/java/com/alttd/chat/objects/ModifiableString.java b/api/src/main/java/com/alttd/chat/objects/ModifiableString.java index ce9519f..70789a2 100644 --- a/api/src/main/java/com/alttd/chat/objects/ModifiableString.java +++ b/api/src/main/java/com/alttd/chat/objects/ModifiableString.java @@ -1,22 +1,34 @@ package com.alttd.chat.objects; -public class ModifiableString { - private String string; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.TextReplacementConfig; +import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; - public ModifiableString(String string) { - this.string = string; +public class ModifiableString { + private Component text; + + public ModifiableString(Component text) { + this.text = text; } - public void string(String string) { - this.string = string; + public void string(Component text) { + this.text = text; } public void replace(String match, String replace) { - while (string.contains(match)) - string = string.replace(match, replace); + text = text + .replaceText( + TextReplacementConfig.builder() + .matchLiteral(match) + .replacement(replace) + .build()); } public String string() { - return string; + return PlainTextComponentSerializer.plainText().serialize(text); + } + + public Component component() { + return text; } } diff --git a/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java b/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java index 3882019..c0dfe2e 100755 --- a/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java +++ b/galaxy/src/main/java/com/alttd/chat/handler/ChatHandler.java @@ -41,7 +41,16 @@ public class ChatHandler { public void continuePrivateMessage(Player player, String target, String message) { // ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); // user.setReplyTarget(target); - ModifiableString modifiableString = new ModifiableString(message); + + TagResolver placeholders = TagResolver.resolver( + Placeholder.component("message", parseMessageContent(player, message)), + Placeholder.component("sendername", player.name()), + Placeholder.parsed("receivername", target) + ); + + Component component = Utility.parseMiniMessage("", placeholders); + + ModifiableString modifiableString = new ModifiableString(component); // todo a better way for this if(!RegexManager.filterText(player.getName(), player.getUniqueId(), modifiableString, "privatemessage")) { GalaxyUtility.sendBlockedNotification("DM Language", @@ -51,13 +60,7 @@ public class ChatHandler { return; // the message was blocked } - TagResolver placeholders = TagResolver.resolver( - Placeholder.component("message", parseMessageContent(player, message)), - Placeholder.component("sendername", player.name()), - Placeholder.parsed("receivername", target) - ); - - Component component = Utility.parseMiniMessage("", placeholders); + component = modifiableString.component(); sendPrivateMessage(player, target, "privatemessage", component); Component spymessage = Utility.parseMiniMessage(Config.MESSAGESPY, placeholders); @@ -71,7 +74,15 @@ public class ChatHandler { public void privateMessage(Player player, String target, String message) { // ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); // user.setReplyTarget(target); - ModifiableString modifiableString = new ModifiableString(message); + + Component messageComponent = parseMessageContent(player, message); + TagResolver placeholders = TagResolver.resolver( + Placeholder.component("message", messageComponent), + Placeholder.component("sendername", player.name()), + Placeholder.parsed("receivername", target) + ); + + ModifiableString modifiableString = new ModifiableString(messageComponent); // todo a better way for this if(!RegexManager.filterText(player.getName(), player.getUniqueId(), modifiableString, "privatemessage")) { GalaxyUtility.sendBlockedNotification("DM Language", @@ -81,12 +92,7 @@ public class ChatHandler { return; // the message was blocked } - Component messageComponent = parseMessageContent(player, message); - TagResolver placeholders = TagResolver.resolver( - Placeholder.component("message", messageComponent), - Placeholder.component("sendername", player.name()), - Placeholder.parsed("receivername", target) - ); + messageComponent = modifiableString.component(); // Component component = Utility.parseMiniMessage("", placeholders) // .replaceText(TextReplacementConfig.builder().once().matchLiteral("[i]").replacement(ChatHandler.itemComponent(player.getInventory().getItemInMainHand())).build()); @@ -120,16 +126,6 @@ public class ChatHandler { Component senderName = user.getDisplayName(); Component prefix = user.getPrefix(); - ModifiableString modifiableString = new ModifiableString(message); - // todo a better way for this - if (!RegexManager.filterText(player.getName(), player.getUniqueId(), modifiableString, "globalchat")) { - GalaxyUtility.sendBlockedNotification("GC Language", - player, - Utility.parseMiniMessage(Utility.parseColors(modifiableString.string())), - ""); - return; // the message was blocked - } - TagResolver placeholders = TagResolver.resolver( Placeholder.component("sender", senderName), Placeholder.component("prefix", prefix), @@ -138,6 +134,18 @@ public class ChatHandler { ); Component component = Utility.parseMiniMessage(Config.GCFORMAT, placeholders); + + ModifiableString modifiableString = new ModifiableString(component); + // todo a better way for this + if (!RegexManager.filterText(player.getName(), player.getUniqueId(), modifiableString, "globalchat")) { + GalaxyUtility.sendBlockedNotification("GC Language", + player, + Utility.parseMiniMessage(Utility.parseColors(modifiableString.string())), + ""); + return; // the message was blocked + } + component = modifiableString.component(); + user.setGcCooldown(System.currentTimeMillis()); sendPluginMessage(player, "globalchat", component); } @@ -153,7 +161,15 @@ public class ChatHandler { ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); Component senderName = user.getDisplayName(); - ModifiableString modifiableString = new ModifiableString(message); + TagResolver placeholders = TagResolver.resolver( + Placeholder.component("sender", senderName), + Placeholder.component("message", parseMessageContent(player, message)), + Placeholder.parsed("server", Bukkit.getServerName()), + Placeholder.parsed("channel", channel.getChannelName()) + ); + Component component = Utility.parseMiniMessage(channel.getFormat(), placeholders); + + ModifiableString modifiableString = new ModifiableString(component); if(!RegexManager.filterText(player.getName(), player.getUniqueId(), modifiableString, channel.getChannelName())) { GalaxyUtility.sendBlockedNotification(channel.getChannelName() + " Language", player, @@ -162,13 +178,7 @@ public class ChatHandler { return; // the message was blocked } - TagResolver placeholders = TagResolver.resolver( - Placeholder.component("sender", senderName), - Placeholder.component("message", parseMessageContent(player, message)), - Placeholder.parsed("server", Bukkit.getServerName()), - Placeholder.parsed("channel", channel.getChannelName()) - ); - Component component = Utility.parseMiniMessage(channel.getFormat(), placeholders); + component = modifiableString.component(); if (channel.isProxy()) { sendChatChannelMessage(player, channel.getChannelName(), "chatchannel", component); diff --git a/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java b/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java index ca70031..f75e09a 100755 --- a/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java +++ b/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java @@ -77,8 +77,8 @@ public class ChatListener implements Listener { .collect(Collectors.toSet()); Component input = event.message(); - String message = PlainTextComponentSerializer.plainText().serialize(input); - ModifiableString modifiableString = new ModifiableString(message); + + ModifiableString modifiableString = new ModifiableString(input); // todo a better way for this if(!RegexManager.filterText(player.getName(), player.getUniqueId(), modifiableString, "chat")) { event.setCancelled(true); @@ -88,7 +88,7 @@ public class ChatListener implements Listener { return; // the message was blocked } - input = render(player, input); + input = render(player, modifiableString.component()); for (Player receiver : receivers) { receiver.sendMessage(input); } diff --git a/galaxy/src/main/java/com/alttd/chat/listeners/PlayerListener.java b/galaxy/src/main/java/com/alttd/chat/listeners/PlayerListener.java index 456d676..8fb749e 100755 --- a/galaxy/src/main/java/com/alttd/chat/listeners/PlayerListener.java +++ b/galaxy/src/main/java/com/alttd/chat/listeners/PlayerListener.java @@ -51,8 +51,7 @@ public class PlayerListener implements Listener { for (int i = 0; i < 4; i++) { Component component = event.line(i); if (component != null) { - String message = PlainTextComponentSerializer.plainText().serialize(component); - ModifiableString modifiableString = new ModifiableString(message); + ModifiableString modifiableString = new ModifiableString(component); Player player = event.getPlayer(); @@ -63,9 +62,8 @@ public class PlayerListener implements Listener { Utility.parseMiniMessage(Utility.parseColors(modifiableString.string())), ""); } - message = modifiableString.string(); - component = message == null ? Component.empty() : Component.text(message); + component = modifiableString.component() == null ? Component.empty() : modifiableString.component(); event.line(i, component); } diff --git a/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java b/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java index f3cefd0..3ac56da 100755 --- a/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java +++ b/velocity/src/main/java/com/alttd/velocitychat/handlers/ChatHandler.java @@ -122,11 +122,6 @@ public class ChatHandler { return; } Component senderName = user.getDisplayName(); - ModifiableString modifiableString = new ModifiableString(message); - if (!RegexManager.filterText(player.getUsername(), uuid, modifiableString, "party")) { - sendBlockedNotification("Party Language", player, message, "", serverConnection); - return; // the message was blocked - } TagResolver Placeholders = TagResolver.resolver( Placeholder.component("sender", senderName), @@ -137,7 +132,16 @@ public class ChatHandler { ); Component partyMessage = Utility.parseMiniMessage(Config.PARTY_FORMAT, Placeholders) - .replaceText(TextReplacementConfig.builder().once().matchLiteral("[i]").replacement(item).build());; + .replaceText(TextReplacementConfig.builder().once().matchLiteral("[i]").replacement(item).build()); + + ModifiableString modifiableString = new ModifiableString(partyMessage); + if (!RegexManager.filterText(player.getUsername(), uuid, modifiableString, "party")) { + sendBlockedNotification("Party Language", player, message, "", serverConnection); + return; // the message was blocked + } + + partyMessage = modifiableString.component(); + sendPartyMessage(party, partyMessage, user.getIgnoredBy()); Component spyMessage = Utility.parseMiniMessage(Config.PARTY_SPY, Placeholders);