aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/me')
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java1
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java24
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/ChatFilter.java53
3 files changed, 57 insertions, 21 deletions
diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
index 0bda79d6..48fefa24 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java
@@ -66,6 +66,7 @@ public class SkyblockerConfig implements ConfigData {
public boolean hideAOTE = false;
public boolean hideImplosion = false;
public boolean hideMoltenWave = false;
+ public boolean hideAds = false;
}
public static void init() {
diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java
index f9ed014a..c22364d6 100644
--- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java
+++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java
@@ -1,6 +1,7 @@
package me.xmrvizzy.skyblocker.mixin;
import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.skyblock.ChatFilter;
import me.xmrvizzy.skyblocker.skyblock.dungeon.DungeonPuzzles;
import me.xmrvizzy.skyblocker.skyblock.dwarven.Fetchur;
import me.xmrvizzy.skyblocker.skyblock.dwarven.Puzzler;
@@ -23,6 +24,7 @@ import java.util.UUID;
public class ChatHudListenerMixin {
@Shadow @Final private MinecraftClient client;
+ private final ChatFilter filter = new ChatFilter();
@Inject(method = "onChatMessage", at = @At("HEAD"), cancellable = true)
public void onMessage(MessageType messageType, Text message, UUID senderUuid, CallbackInfo ci) {
@@ -56,27 +58,7 @@ public class ChatHudListenerMixin {
Puzzler.solve(msg);
}
- if (SkyblockerConfig.get().messages.hideAbility && (
- msg.contains("This ability is currently on cooldown for ") ||
- msg.contains("No more charges, next one in ") ||
- msg.contains("This ability is on cooldown for ")))
- ci.cancel();
-
- if (SkyblockerConfig.get().messages.hideHeal && (
- msg.contains("You healed ") &&
- msg.contains(" health!") || msg.contains(" healed you for ")))
- ci.cancel();
-
- if (SkyblockerConfig.get().messages.hideAOTE &&
- msg.contains("There are blocks in the way!"))
- ci.cancel();
-
- if (SkyblockerConfig.get().messages.hideImplosion &&
- msg.contains("Your Implosion hit "))
- ci.cancel();
-
- if (SkyblockerConfig.get().messages.hideMoltenWave &&
- msg.contains("Your Molten Wave hit "))
+ if(filter.shouldFilter(msg))
ci.cancel();
}
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/ChatFilter.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/ChatFilter.java
new file mode 100644
index 00000000..47f3716c
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/ChatFilter.java
@@ -0,0 +1,53 @@
+package me.xmrvizzy.skyblocker.skyblock;
+
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+public class ChatFilter {
+ private static final Pattern ability;
+ private static final Pattern heal;
+ private static final Pattern aote;
+ private static final Pattern implosion;
+ private static final Pattern moltenWave;
+ private static final Pattern playerMessage;
+ private static final Pattern adverts;
+
+ public boolean shouldFilter(String message) {
+ SkyblockerConfig.Messages settings = SkyblockerConfig.get().messages;
+ if (settings.hideAbility && ability.matcher(message).matches())
+ return true;
+
+ if (settings.hideHeal && heal.matcher(message).matches())
+ return true;
+
+ if (settings.hideAOTE && aote.matcher(message).matches())
+ return true;
+
+ if (settings.hideImplosion && implosion.matcher(message).matches())
+ return true;
+
+ if (settings.hideMoltenWave && moltenWave.matcher(message).matches())
+ return true;
+
+ if (settings.hideAds) {
+ Matcher m = playerMessage.matcher(message);
+ if(m.matches() && adverts.matcher(m.group(2)).find())
+ return true;
+ }
+ return false;
+ }
+
+ static {
+ String number = "-?[0-9]{1,3}(?>,[0-9]{3})*(?:\\.[1-9])?";
+ ability = Pattern.compile("^(?:This ability is on cooldown for " + number + "s\\.|No more charges, next one in " + number + "s!)$");
+ heal = Pattern.compile("^(?:You healed yourself for " + number + " health!|[a-zA-Z0-9_]{2,16} healed you for " + number + " health!)$");
+ aote = Pattern.compile("^There are blocks in the way!$");
+ implosion = Pattern.compile("^Your Implosion hit " + number + " enem(?:y|ies) for " + number + " damage\\.$");
+ moltenWave = Pattern.compile("^Your Molten Wave hit " + number + " enemy(?:y|ies) for " + number + " damage\\.$");
+ playerMessage = Pattern.compile("^§[67ab](?:\\[(?:MVP|VIP)(?:§[0-9a-f]\\+{1,2}§[6ab])?] )?([a-zA-Z0-9_]{2,16})§[7f]: (.*)$");
+ adverts = Pattern.compile("(?i:^(?:i(?:m|'m| am)? |(?:is )?any(?: ?one|1) )?(?:buy|sell|lowball|trade?)(?:ing)?\\W|(?:\\W|^)(?:on|in|check|at) my ah(?:\\W|$)|(.)\\1{7,})");
+ }
+}