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 c9fe062..cd89858 100755 --- a/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java +++ b/galaxy/src/main/java/com/alttd/chat/listeners/ChatListener.java @@ -16,7 +16,6 @@ import io.papermc.paper.event.player.AsyncChatCommandDecorateEvent; import io.papermc.paper.event.player.AsyncChatDecorateEvent; import io.papermc.paper.event.player.AsyncChatEvent; import net.kyori.adventure.text.Component; -import net.kyori.adventure.text.PatternReplacementResult; import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -31,7 +30,8 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.jetbrains.annotations.NotNull; -import java.util.*; +import java.util.HashSet; +import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -85,6 +85,7 @@ public class ChatListener implements Listener { Component input = event.message().colorIfAbsent(NamedTextColor.WHITE); ModifiableString modifiableString = new ModifiableString(input); + // todo a better way for this if(!RegexManager.filterText(player.getName(), player.getUniqueId(), modifiableString, "chat")) { event.setCancelled(true); @@ -94,41 +95,57 @@ public class ChatListener implements Listener { return; // the message was blocked } - Set playerToPing = new HashSet<>(); - for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { - String name = onlinePlayer.getName(); - String nickName = PlainTextComponentSerializer.plainText().serialize(onlinePlayer.displayName()); - String message = modifiableString.string().toLowerCase(); - - if (message.contains(name.toLowerCase())) { - modifiableString.replace(TextReplacementConfig.builder() - .once() - .match(Pattern.compile("\\b" + name + "\\b", Pattern.CASE_INSENSITIVE)) - .replacement(mention.append(onlinePlayer.displayName())) - .build()); - if (!ChatUserManager.getChatUser(onlinePlayer.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())) - playerToPing.add(onlinePlayer); - } else if (message.contains(nickName.toLowerCase())) { - modifiableString.replace(TextReplacementConfig.builder() - .once() - .match(Pattern.compile("\\b" + nickName + "\\b", Pattern.CASE_INSENSITIVE)) - .replacement(mention.append(onlinePlayer.displayName())) - .build()); - if (!ChatUserManager.getChatUser(onlinePlayer.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())) - playerToPing.add(onlinePlayer); - } - } + Set playersToPing = new HashSet<>(); + pingPlayers(playersToPing, modifiableString, player); input = render(player, modifiableString.component()); for (Player receiver : receivers) { receiver.sendMessage(input); } - for (Player receiver : playerToPing) { - receiver.playSound(receiver.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 1); + for (Player pingPlayer : playersToPing) { + pingPlayer.playSound(pingPlayer.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 1); } ALogger.info(PlainTextComponentSerializer.plainText().serialize(input)); } + private void pingPlayers(Set playersToPing, ModifiableString modifiableString, Player player) { + for (Player onlinePlayer : Bukkit.getOnlinePlayers()) { + String name = onlinePlayer.getName(); + String nickName = PlainTextComponentSerializer.plainText().serialize(onlinePlayer.displayName()); + + Pattern namePattern = Pattern.compile("\\b(? { +// String substring = a.group().substring(1); +// return ; +// }); + if (!ChatUserManager.getChatUser(onlinePlayer.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())) + playersToPing.add(onlinePlayer); + } else if (nickPattern.matcher(modifiableString.string()).find()) { + modifiableString.replace(TextReplacementConfig.builder() + .once() + .match(nickPattern) + .replacement(mention.append(onlinePlayer.displayName())) + .build()); + if (!ChatUserManager.getChatUser(onlinePlayer.getUniqueId()).getIgnoredPlayers().contains(player.getUniqueId())) + playersToPing.add(onlinePlayer); + } + } + } + public @NotNull Component render(@NotNull Player player, @NotNull Component message) { ChatUser user = ChatUserManager.getChatUser(player.getUniqueId()); TagResolver placeholders = TagResolver.resolver(