diff --git a/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java index 8cd5e8b..9a17115 100644 --- a/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Me.java @@ -32,7 +32,7 @@ public class Me extends UniversalCommand { if (args[x].length() > 0) msg += " " + args[x]; if (sender instanceof Player && playerApiService.getOnlineMineverseChatPlayer((Player) sender).isFilter()) { - msg = formatService.FilterChat(msg); + msg = formatService.filterChat(msg); } if (sender.hasPermission("venturechat.color.legacy")) { msg = FormatUtils.FormatStringLegacyColor(msg); diff --git a/src/main/java/venture/Aust1n46/chat/controllers/commands/Message.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Message.java index e81dc98..5a483fc 100644 --- a/src/main/java/venture/Aust1n46/chat/controllers/commands/Message.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Message.java @@ -83,7 +83,7 @@ public class Message extends PlayerCommand { msg += " " + args[r]; } if (mcp.isFilter()) { - msg = formatService.FilterChat(msg); + msg = formatService.filterChat(msg); } if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) { msg = FormatUtils.FormatStringLegacyColor(msg); @@ -182,7 +182,7 @@ public class Message extends PlayerCommand { } String msg = msgBuilder.toString(); if (mcp.isFilter()) { - msg = formatService.FilterChat(msg); + msg = formatService.filterChat(msg); } if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) { msg = FormatUtils.FormatStringLegacyColor(msg); diff --git a/src/main/java/venture/Aust1n46/chat/controllers/commands/Party.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Party.java index 1d442d3..48d7a21 100644 --- a/src/main/java/venture/Aust1n46/chat/controllers/commands/Party.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Party.java @@ -249,7 +249,7 @@ public class Party extends PlayerCommand { msg += " " + args[x]; } if (mcp.isFilter()) { - msg = formatService.FilterChat(msg); + msg = formatService.filterChat(msg); } if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) { msg = FormatUtils.FormatStringLegacyColor(msg); diff --git a/src/main/java/venture/Aust1n46/chat/controllers/commands/Reply.java b/src/main/java/venture/Aust1n46/chat/controllers/commands/Reply.java index 4546a67..c71ab12 100644 --- a/src/main/java/venture/Aust1n46/chat/controllers/commands/Reply.java +++ b/src/main/java/venture/Aust1n46/chat/controllers/commands/Reply.java @@ -71,7 +71,7 @@ public class Reply extends PlayerCommand { for (int r = 0; r < args.length; r++) msg += " " + args[r]; if (mcp.isFilter()) { - msg = formatService.FilterChat(msg); + msg = formatService.filterChat(msg); } if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) { msg = FormatUtils.FormatStringLegacyColor(msg); @@ -128,7 +128,7 @@ public class Reply extends PlayerCommand { } String msg = msgBuilder.toString(); if (mcp.isFilter()) { - msg = formatService.FilterChat(msg); + msg = formatService.filterChat(msg); } if (mcp.getPlayer().hasPermission("venturechat.color.legacy")) { msg = FormatUtils.FormatStringLegacyColor(msg); diff --git a/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java b/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java index fa1f49d..e4899b3 100644 --- a/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java +++ b/src/main/java/venture/Aust1n46/chat/initiators/listeners/ChatListener.java @@ -100,7 +100,7 @@ public class ChatListener implements Listener { String send = ""; String spy = ""; if (ventureChatPlayer.isFilter()) { - filtered = formatService.FilterChat(filtered); + filtered = formatService.filterChat(filtered); } if (ventureChatPlayer.getPlayer().hasPermission("venturechat.color.legacy")) { filtered = FormatUtils.FormatStringLegacyColor(filtered); @@ -155,7 +155,7 @@ public class ChatListener implements Listener { if ((p.hasParty() && p.getParty().toString().equals(ventureChatPlayer.getParty().toString()) || p.isSpy())) { String filtered = chat; if (ventureChatPlayer.isFilter()) { - filtered = formatService.FilterChat(filtered); + filtered = formatService.filterChat(filtered); } if (ventureChatPlayer.getPlayer().hasPermission("venturechat.color.legacy")) { filtered = FormatUtils.FormatStringLegacyColor(filtered); @@ -332,7 +332,7 @@ public class ChatListener implements Listener { format = FormatUtils.FormatStringAll(eventChannel.getFormat()); if (eventChannel.isFiltered() && mcp.isFilter()) { - chat = formatService.FilterChat(chat); + chat = formatService.filterChat(chat); } PluginManager pluginManager = plugin.getServer().getPluginManager(); Set recipients = event.getRecipients(); diff --git a/src/main/java/venture/Aust1n46/chat/model/Filter.java b/src/main/java/venture/Aust1n46/chat/model/Filter.java new file mode 100644 index 0000000..09e1ed7 --- /dev/null +++ b/src/main/java/venture/Aust1n46/chat/model/Filter.java @@ -0,0 +1,17 @@ +package venture.Aust1n46.chat.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@AllArgsConstructor +public class Filter { + private String matcher; + private String replacer; +} diff --git a/src/main/java/venture/Aust1n46/chat/model/VentureChatPlayer.java b/src/main/java/venture/Aust1n46/chat/model/VentureChatPlayer.java index 01c9069..2c50923 100644 --- a/src/main/java/venture/Aust1n46/chat/model/VentureChatPlayer.java +++ b/src/main/java/venture/Aust1n46/chat/model/VentureChatPlayer.java @@ -12,6 +12,7 @@ import org.bukkit.entity.Player; import lombok.AccessLevel; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -27,6 +28,7 @@ import lombok.ToString; @ToString @NoArgsConstructor @AllArgsConstructor +@Builder public class VentureChatPlayer { @Setter(value = AccessLevel.NONE) private UUID uuid; diff --git a/src/main/java/venture/Aust1n46/chat/service/ConfigService.java b/src/main/java/venture/Aust1n46/chat/service/ConfigService.java index d5d27fd..52ff90e 100644 --- a/src/main/java/venture/Aust1n46/chat/service/ConfigService.java +++ b/src/main/java/venture/Aust1n46/chat/service/ConfigService.java @@ -11,10 +11,12 @@ import org.bukkit.configuration.ConfigurationSection; import com.google.inject.Inject; import com.google.inject.Singleton; +import lombok.Getter; import venture.Aust1n46.chat.initiators.application.VentureChat; import venture.Aust1n46.chat.model.Alias; import venture.Aust1n46.chat.model.ChatChannel; import venture.Aust1n46.chat.model.ClickAction; +import venture.Aust1n46.chat.model.Filter; import venture.Aust1n46.chat.model.GuiSlot; import venture.Aust1n46.chat.model.JsonAttribute; import venture.Aust1n46.chat.model.JsonFormat; @@ -33,6 +35,9 @@ public class ConfigService { private boolean aliasesRegisteredAsCommands; private ChatChannel defaultChatChannel; private String defaultColor; + + @Getter + private List filters; @Inject public void postConstruct() { @@ -113,6 +118,12 @@ public class ConfigService { int slot = cs.getInt(key + ".slot"); guiSlots.add(new GuiSlot(name, icon, durability, text, permission, command, slot)); } + + filters = plugin.getConfig().getStringList("filters") + .stream() + .map(x -> x.split(",")) + .map(x -> new Filter(x[0], x[1])) + .toList(); } public boolean areAliasesRegisteredAsCommands() { diff --git a/src/main/java/venture/Aust1n46/chat/service/FormatService.java b/src/main/java/venture/Aust1n46/chat/service/FormatService.java index ec49c25..295d6df 100644 --- a/src/main/java/venture/Aust1n46/chat/service/FormatService.java +++ b/src/main/java/venture/Aust1n46/chat/service/FormatService.java @@ -9,7 +9,6 @@ import static venture.Aust1n46.chat.utilities.FormatUtils.HEX_COLOR_CODE_PREFIX; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -30,6 +29,7 @@ import com.google.inject.Singleton; import me.clip.placeholderapi.PlaceholderAPI; import venture.Aust1n46.chat.initiators.application.VentureChat; import venture.Aust1n46.chat.model.ClickAction; +import venture.Aust1n46.chat.model.Filter; import venture.Aust1n46.chat.model.JsonAttribute; import venture.Aust1n46.chat.model.JsonFormat; import venture.Aust1n46.chat.model.VentureChatPlayer; @@ -631,24 +631,13 @@ public class FormatService { } } - public String FilterChat(String msg) { - int t = 0; - List filters = plugin.getConfig().getStringList("filters"); - for (String s : filters) { - t = 0; - String[] pparse = new String[2]; - pparse[0] = " "; - pparse[1] = " "; - StringTokenizer st = new StringTokenizer(s, ","); - while (st.hasMoreTokens()) { - if (t < 2) { - pparse[t++] = st.nextToken(); - } - } - // (?i) = case insensitive - msg = msg.replaceAll("(?i)" + pparse[0], pparse[1]); + public String filterChat(final String message) { + String filteredMessage = message; + final List filters = configService.getFilters(); + for (final Filter filter : filters) { + filteredMessage = filteredMessage.replaceAll("(?i)" + filter.getMatcher(), filter.getReplacer()); // (?i) = case insensitive } - return msg; + return filteredMessage; } public String underlineURLs() { diff --git a/src/main/java/venture/Aust1n46/chat/xcut/VersionService.java b/src/main/java/venture/Aust1n46/chat/xcut/VersionService.java index ca91ad4..b948980 100644 --- a/src/main/java/venture/Aust1n46/chat/xcut/VersionService.java +++ b/src/main/java/venture/Aust1n46/chat/xcut/VersionService.java @@ -1,80 +1,87 @@ package venture.Aust1n46.chat.xcut; import com.comphenix.protocol.utility.MinecraftVersion; +import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton public class VersionService { - public static final MinecraftVersion SERVER_VERSION = MinecraftVersion.getCurrentVersion(); private static final MinecraftVersion MC1_19 = new MinecraftVersion(1, 19, 0); private static final MinecraftVersion MC1_19_1 = new MinecraftVersion(1, 19, 1); private static final MinecraftVersion MC1_20_4 = new MinecraftVersion(1, 20, 4); + + private MinecraftVersion serverVersion; + + @Inject + public void postConstruct() { + serverVersion = MinecraftVersion.getCurrentVersion(); + } public boolean is1_7() { - return SERVER_VERSION.getMinor() == 7 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 7 && serverVersion.getMajor() == 1; } public boolean is1_8() { - return SERVER_VERSION.getMinor() == 8 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 8 && serverVersion.getMajor() == 1; } public boolean is1_9() { - return SERVER_VERSION.getMinor() == 9 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 9 && serverVersion.getMajor() == 1; } public boolean is1_10() { - return SERVER_VERSION.getMinor() == 10 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 10 && serverVersion.getMajor() == 1; } public boolean is1_11() { - return SERVER_VERSION.getMinor() == 11 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 11 && serverVersion.getMajor() == 1; } public boolean is1_12() { - return SERVER_VERSION.getMinor() == 12 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 12 && serverVersion.getMajor() == 1; } public boolean is1_13() { - return SERVER_VERSION.getMinor() == 13 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 13 && serverVersion.getMajor() == 1; } public boolean is1_14() { - return SERVER_VERSION.getBuild() != 4 && SERVER_VERSION.getMinor() == 14 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getBuild() != 4 && serverVersion.getMinor() == 14 && serverVersion.getMajor() == 1; } public boolean is1_14_4() { - return SERVER_VERSION.getBuild() == 4 && SERVER_VERSION.getMinor() == 14 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getBuild() == 4 && serverVersion.getMinor() == 14 && serverVersion.getMajor() == 1; } public boolean is1_15() { - return SERVER_VERSION.getMinor() == 15 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 15 && serverVersion.getMajor() == 1; } public boolean is1_16() { - return SERVER_VERSION.getMinor() == 16 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 16 && serverVersion.getMajor() == 1; } public boolean is1_17() { - return SERVER_VERSION.getMinor() == 17 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 17 && serverVersion.getMajor() == 1; } public boolean is1_18() { - return SERVER_VERSION.getMinor() == 18 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getMinor() == 18 && serverVersion.getMajor() == 1; } public boolean is1_19() { - return SERVER_VERSION.getBuild() == 0 && SERVER_VERSION.getMinor() == 19 && SERVER_VERSION.getMajor() == 1; + return serverVersion.getBuild() == 0 && serverVersion.getMinor() == 19 && serverVersion.getMajor() == 1; } public boolean isUnder_1_19() { - return !SERVER_VERSION.isAtLeast(MC1_19); + return !serverVersion.isAtLeast(MC1_19); } public boolean isAbove_1_19() { - return SERVER_VERSION.isAtLeast(MC1_19_1); + return serverVersion.isAtLeast(MC1_19_1); } public boolean isAtLeast_1_20_4() { - return SERVER_VERSION.isAtLeast(MC1_20_4); + return serverVersion.isAtLeast(MC1_20_4); } } diff --git a/src/test/java/venture/Aust1n46/chat/service/FormatServiceTest.java b/src/test/java/venture/Aust1n46/chat/service/FormatServiceTest.java new file mode 100644 index 0000000..c1a46e0 --- /dev/null +++ b/src/test/java/venture/Aust1n46/chat/service/FormatServiceTest.java @@ -0,0 +1,41 @@ +package venture.Aust1n46.chat.service; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.when; + +import java.util.List; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import venture.Aust1n46.chat.initiators.application.VentureChat; +import venture.Aust1n46.chat.model.Filter; +import venture.Aust1n46.chat.xcut.VersionService; + +@ExtendWith(MockitoExtension.class) +public class FormatServiceTest { + @Mock + private VentureChat plugin; + @Mock + private PlayerApiService playerApiService; + @Mock + private ConfigService configService; + @Mock + private VersionService versionService; + @InjectMocks + private FormatService formatService; + + private static final List FILTERS = List.of(new Filter("(b[i1]a?tch(es)?)", "puppy")); + + @Test + public void testFilter() { + when(configService.getFilters()).thenReturn(FILTERS); + final String input = "You are a bitch!"; + final String expected = "You are a puppy!"; + final String actual = formatService.filterChat(input); + assertEquals(expected, actual); + } +}