diff options
54 files changed, 1017 insertions, 244 deletions
diff --git a/build.gradle b/build.gradle index e7fadae4..9b03c3fe 100644 --- a/build.gradle +++ b/build.gradle @@ -26,16 +26,16 @@ repositories { maven { url "https://maven.terraformersmc.com/releases" } maven { url "https://maven.shedaniel.me/" } maven { - url 'https://repo.maven.apache.org/maven2' - name 'Maven Central' - } - maven {url "https://jitpack.io"} + url 'https://repo.maven.apache.org/maven2' + name 'Maven Central' + } maven {url "https://maven.jaackson.me/repo"} + maven {url "https://jitpack.io"} } dependencies { - implementation 'com.google.code.gson:gson:2.8.9' + implementation 'com.google.code.gson:gson:2.9.0' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' // To change the versions see the gradle.properties file @@ -73,6 +73,8 @@ dependencies { //https://github.com/kohlschutter/junixsocket include(modImplementation("com.kohlschutter.junixsocket:junixsocket-common:2.0.4")) include(modImplementation("com.kohlschutter.junixsocket:junixsocket-native-common:2.0.4")) + + include(modImplementation("com.github.Marcono1234:gson-record-type-adapter-factory:0.2.0")) } processResources { diff --git a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java index 46cd0bb2..be0bb0dd 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java +++ b/src/main/java/me/xmrvizzy/skyblocker/SkyblockerInitializer.java @@ -1,7 +1,9 @@ package me.xmrvizzy.skyblocker; +import me.xmrvizzy.skyblocker.chat.ChatMessageListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import me.xmrvizzy.skyblocker.skyblock.HotbarSlotLock; +import me.xmrvizzy.skyblocker.skyblock.api.StatsCommand; import me.xmrvizzy.skyblocker.skyblock.item.PriceInfoTooltip; import me.xmrvizzy.skyblocker.skyblock.item.WikiLookup; import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemRegistry; @@ -15,5 +17,7 @@ public class SkyblockerInitializer implements ClientModInitializer { PriceInfoTooltip.init(); WikiLookup.init(); ItemRegistry.init(); + StatsCommand.init(); + ChatMessageListener.init(); } } 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 45a1053e..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/ChatParser.java +++ /dev/null @@ -1,44 +0,0 @@ -package me.xmrvizzy.skyblocker.chat; - -import me.xmrvizzy.skyblocker.chat.filters.*; -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 AutopetFilter(), - new Fetchur(), - new Puzzler(), - new Trivia(), - }; - - 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/AbilityFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilter.java index d0178dd6..3a357a00 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilter.java @@ -1,15 +1,15 @@ package me.xmrvizzy.skyblocker.chat.filters; -import me.xmrvizzy.skyblocker.chat.ChatListener; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -public class AbilityFilter extends ChatFilter { +public class AbilityFilter extends SimpleChatFilter { public AbilityFilter() { super("^(?:This ability is on cooldown for " + NUMBER + "s\\.|No more charges, next one in " + NUMBER + "s!)$"); } @Override - public boolean isEnabled() { + protected ChatFilterResult state() { return SkyblockerConfig.get().messages.hideAbility; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java index cf13e26e..5f9f463d 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AdFilter.java @@ -1,29 +1,38 @@ package me.xmrvizzy.skyblocker.chat.filters; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import net.minecraft.text.Text; +import java.util.regex.Matcher; import java.util.regex.Pattern; -public class AdFilter extends ChatFilter { +public class AdFilter extends ChatPatternListener { private static final Pattern[] AD_FILTERS = new Pattern[]{ Pattern.compile("^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?(?:\\W|$)", Pattern.CASE_INSENSITIVE), Pattern.compile("(.)\\1{7,}"), Pattern.compile("\\W(?:on|in|check|at) my (?:ah|bin)(?:\\W|$)", Pattern.CASE_INSENSITIVE), }; + public AdFilter() { + // Groups: + // 1. Player name + // 2. Message super("^§[67ab](?:\\[(?:MVP|VIP)(?:§[0-9a-f]\\+{1,2}§[6ab])?] )?([a-zA-Z0-9_]{2,16})§[7f]: (.*)$"); } @Override - public boolean isEnabled() { - return SkyblockerConfig.get().messages.hideAds; + public boolean onMatch(Text _message, Matcher matcher) { + String message = matcher.group(2); + for (Pattern adFilter : AD_FILTERS) + if (adFilter.matcher(message).find()) + return true; + return false; } @Override - public boolean onMessage(String[] groups) { - for(Pattern adFilter : AD_FILTERS) - if(adFilter.matcher(groups[2]).find()) - return true; - return false; + protected ChatFilterResult state() { + return SkyblockerConfig.get().messages.hideAds; } }
\ No newline at end of file diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilter.java index e3a270a3..029cf433 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilter.java @@ -1,14 +1,15 @@ package me.xmrvizzy.skyblocker.chat.filters; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -public class AoteFilter extends ChatFilter { +public class AoteFilter extends SimpleChatFilter { public AoteFilter() { super("^There are blocks in the way!$"); } @Override - public boolean isEnabled() { + public ChatFilterResult state() { return SkyblockerConfig.get().messages.hideAOTE; } -}
\ No newline at end of file +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilter.java deleted file mode 100644 index fac9a3a3..00000000 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilter.java +++ /dev/null @@ -1,12 +0,0 @@ -package me.xmrvizzy.skyblocker.chat.filters; - -import me.xmrvizzy.skyblocker.chat.ChatListener; - -public abstract class ChatFilter extends ChatListener { - public ChatFilter(String pattern) { - super(pattern); - } - public boolean onMessage(String[] groups) { - return true; - } -} diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilter.java index c09cb69c..c05afdbf 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilter.java @@ -1,15 +1,16 @@ package me.xmrvizzy.skyblocker.chat.filters; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -public class ComboFilter extends ChatFilter { +public class ComboFilter extends SimpleChatFilter { public ComboFilter() { super("^(\\+\\d+ Kill Combo \\+\\d+(% ✯ Magic Find| coins per kill)" + "|Your Kill Combo has expired! You reached a \\d+ Kill Combo!)$"); } @Override - public boolean isEnabled() { + public ChatFilterResult state() { return SkyblockerConfig.get().messages.hideCombo; } -}
\ No newline at end of file +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/HealFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/HealFilter.java index f31fb070..62b41749 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/HealFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/HealFilter.java @@ -1,14 +1,15 @@ package me.xmrvizzy.skyblocker.chat.filters; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -public class HealFilter extends ChatFilter { +public class HealFilter extends SimpleChatFilter { public HealFilter() { super("^(?:You healed yourself for " + NUMBER + " health!|[a-zA-Z0-9_]{2,16} healed you for " + NUMBER + " health!)$"); } @Override - public boolean isEnabled() { + public ChatFilterResult state() { return SkyblockerConfig.get().messages.hideHeal; } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilter.java index 9a98cb8a..9cc684ed 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilter.java @@ -1,14 +1,15 @@ package me.xmrvizzy.skyblocker.chat.filters; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -public class ImplosionFilter extends ChatFilter { +public class ImplosionFilter extends SimpleChatFilter { public ImplosionFilter() { super("^Your Implosion hit " + NUMBER + " enem(?:y|ies) for " + NUMBER + " damage\\.$"); } @Override - public boolean isEnabled() { + public ChatFilterResult state() { return SkyblockerConfig.get().messages.hideImplosion; } -}
\ No newline at end of file +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/MoltenWaveFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/MoltenWaveFilter.java index 71a5f868..19789dba 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/MoltenWaveFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/MoltenWaveFilter.java @@ -1,14 +1,15 @@ package me.xmrvizzy.skyblocker.chat.filters; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -public class MoltenWaveFilter extends ChatFilter { +public class MoltenWaveFilter extends SimpleChatFilter { public MoltenWaveFilter() { super("^Your Molten Wave hit " + NUMBER + " enemy(?:y|ies) for " + NUMBER + " damage\\.$"); } @Override - public boolean isEnabled() { + public ChatFilterResult state() { return SkyblockerConfig.get().messages.hideMoltenWave; } -}
\ No newline at end of file +} 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; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/TeleportPadFilter.java b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/TeleportPadFilter.java index 2913d2bb..f7fab6d5 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/chat/filters/TeleportPadFilter.java +++ b/src/main/java/me/xmrvizzy/skyblocker/chat/filters/TeleportPadFilter.java @@ -1,15 +1,16 @@ package me.xmrvizzy.skyblocker.chat.filters; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; -public class TeleportPadFilter extends ChatFilter { +public class TeleportPadFilter extends SimpleChatFilter { public TeleportPadFilter() { super("^(Warped from the .* Teleport Pad to the .* Teleport Pad!" + "|This Teleport Pad does not have a destination set!)$"); } @Override - public boolean isEnabled() { + public ChatFilterResult state() { return SkyblockerConfig.get().messages.hideTeleportPad; } }
\ No newline at end of file |
