diff options
Diffstat (limited to 'src/main/java/me/xmrvizzy/skyblocker/chat')
6 files changed, 115 insertions, 63 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatFilterResult.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatFilterResult.java new file mode 100644 index 00000000..0a31409a --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatFilterResult.java @@ -0,0 +1,20 @@ +package me.xmrvizzy.skyblocker.chat; + +public enum ChatFilterResult { + // Skip this one / no action + PASS, + // Filter + FILTER, + // Move to action bar + ACTION_BAR; + // Skip remaining checks, don't filter + // null + + public String toString() { + return switch (this) { + case PASS -> "Disabled"; + case FILTER -> "Filter"; + case ACTION_BAR -> "Move to action bar"; + }; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatListener.java deleted file mode 100644 index 84034f41..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatListener.java +++ /dev/null @@ -1,18 +0,0 @@ -package me.xmrvizzy.skyblocker.chat; - -import java.util.regex.Pattern; - -public abstract class ChatListener { - protected static final String NUMBER = "-?[0-9]{1,3}(?>,[0-9]{3})*(?:\\.[1-9])?"; - private Pattern pattern; - public ChatListener(String pattern) { - this.pattern = Pattern.compile(pattern); - } - public Pattern getPattern() { - return pattern; - } - - public abstract boolean isEnabled(); - //Returns whether message should get filtered - public abstract boolean onMessage(String[] groups); -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java new file mode 100644 index 00000000..9fa72398 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatMessageListener.java @@ -0,0 +1,48 @@ +package me.xmrvizzy.skyblocker.chat; + +import me.xmrvizzy.skyblocker.chat.filters.*; +import me.xmrvizzy.skyblocker.skyblock.api.ApiKeyListener; +import me.xmrvizzy.skyblocker.skyblock.dungeon.Reparty; +import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos; +import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia; +import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur; +import me.xmrvizzy.skyblocker.skyblock.dwarven.Puzzler; +import net.fabricmc.fabric.api.event.Event; +import net.fabricmc.fabric.api.event.EventFactory; +import net.minecraft.text.Text; + +public interface ChatMessageListener { + Event<ChatMessageListener> EVENT = EventFactory.createArrayBacked(ChatMessageListener.class, + (listeners) -> (message, asString) -> { + for (ChatMessageListener listener : listeners) { + ChatFilterResult result = listener.onMessage(message, asString); + if (result != ChatFilterResult.PASS) return result; + } + return ChatFilterResult.PASS; + }); + + static void init() { + ChatMessageListener[] listeners = new ChatMessageListener[]{ + // Features + new ApiKeyListener(), + new Fetchur(), + new Puzzler(), + new Reparty(), + new ThreeWeirdos(), + new Trivia(), + // Filters + new AbilityFilter(), + new AdFilter(), + new AoteFilter(), + new ComboFilter(), + new HealFilter(), + new ImplosionFilter(), + new MoltenWaveFilter(), + new TeleportPadFilter(), + }; + for (ChatMessageListener listener : listeners) + EVENT.register(listener); + } + + ChatFilterResult onMessage(Text message, String asString); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatParser.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatParser.java deleted file mode 100644 index 92618305..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatParser.java +++ /dev/null @@ -1,45 +0,0 @@ -package me.xmrvizzy.skyblocker.chat; - -import me.xmrvizzy.skyblocker.chat.filters.*; -import me.xmrvizzy.skyblocker.skyblock.api.ApiKeyListener; -import me.xmrvizzy.skyblocker.skyblock.dungeon.Reparty; -import me.xmrvizzy.skyblocker.skyblock.dungeon.ThreeWeirdos; -import me.xmrvizzy.skyblocker.skyblock.dungeon.Trivia; -import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur; -import me.xmrvizzy.skyblocker.skyblock.dwarven.Puzzler; - -import java.util.regex.Matcher; - -public class ChatParser { - private final static ChatListener[] listeners = new ChatListener[]{ - new Reparty(), - new ThreeWeirdos(), - new AoteFilter(), - new ImplosionFilter(), - new MoltenWaveFilter(), - new HealFilter(), - new AbilityFilter(), - new AdFilter(), - new TeleportPadFilter(), - new ComboFilter(), - new Fetchur(), - new Puzzler(), - new Trivia(), - new ApiKeyListener() - }; - - public boolean shouldFilter(String message) { - for (ChatListener listener : listeners) { - if (listener.isEnabled()) { - Matcher m = listener.getPattern().matcher(message); - if (m.matches()) { - String[] groups = new String[m.groupCount() + 1]; - for (int i = 0; i < groups.length; i++) - groups[i] = m.group(i); - return listener.onMessage(groups); - } - } - } - return false; - } -}
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatPatternListener.java b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatPatternListener.java new file mode 100644 index 00000000..19237de4 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/ChatPatternListener.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.chat; + +import net.minecraft.text.Text; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public abstract class ChatPatternListener implements ChatMessageListener { + protected static String NUMBER = "-?[0-9]{1,3}(?>,[0-9]{3})*(?:\\.[1-9])?"; + public final Pattern pattern; + + public ChatPatternListener(String pattern) { + this.pattern = Pattern.compile(pattern); + } + + @Override + public final ChatFilterResult onMessage(Text message, String asString) { + ChatFilterResult state = state(); + if (state == ChatFilterResult.PASS) return ChatFilterResult.PASS; + Matcher m = pattern.matcher(asString); + if (m.matches() && onMatch(message, m)) { + return state; + } + return ChatFilterResult.PASS; + } + + protected abstract ChatFilterResult state(); + + protected abstract boolean onMatch(Text message, Matcher matcher); +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/SimpleChatFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/SimpleChatFilter.java new file mode 100644 index 00000000..e23dbf33 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/SimpleChatFilter.java @@ -0,0 +1,17 @@ +package me.xmrvizzy.skyblocker.chat.filters; + +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import net.minecraft.text.Text; + +import java.util.regex.Matcher; + +public abstract class SimpleChatFilter extends ChatPatternListener { + public SimpleChatFilter(String pattern) { + super(pattern); + } + + @Override + protected final boolean onMatch(Text message, Matcher matcher) { + return true; + } +} |