diff options
Diffstat (limited to 'src')
53 files changed, 1010 insertions, 239 deletions
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 diff --git a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java index 5b9ce053..130b3064 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/me/xmrvizzy/skyblocker/config/SkyblockerConfig.java @@ -5,6 +5,7 @@ import me.shedaniel.autoconfig.ConfigData; import me.shedaniel.autoconfig.annotation.Config; import me.shedaniel.autoconfig.annotation.ConfigEntry; import me.shedaniel.autoconfig.serializer.GsonConfigSerializer; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; import java.util.ArrayList; import java.util.List; @@ -30,6 +31,9 @@ public class SkyblockerConfig implements ConfigData { public static class General { + @ConfigEntry.Gui.Excluded + public String apiKey; + @ConfigEntry.Category("bars") @ConfigEntry.Gui.CollapsibleObject(startExpanded = true) public Bars bars = new Bars(); @@ -121,23 +125,23 @@ public class SkyblockerConfig implements ConfigData { public boolean solvePuzzler = true; } - public enum MsgOptions { - ActionBar, - Hide, - Show - } - public static class Messages { - public boolean hideAbility = false; - public boolean hideHeal = false; - public boolean hideAOTE = false; - public boolean hideImplosion = false; - public boolean hideMoltenWave = false; - public boolean hideAds = false; - public boolean hideTeleportPad = false; - public boolean hideCombo = false; @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) - public MsgOptions autopet = MsgOptions.Show; + public ChatFilterResult hideAbility = ChatFilterResult.PASS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public ChatFilterResult hideHeal = ChatFilterResult.PASS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public ChatFilterResult hideAOTE = ChatFilterResult.PASS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public ChatFilterResult hideImplosion = ChatFilterResult.PASS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public ChatFilterResult hideMoltenWave = ChatFilterResult.PASS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public ChatFilterResult hideAds = ChatFilterResult.PASS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public ChatFilterResult hideTeleportPad = ChatFilterResult.PASS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + public ChatFilterResult hideCombo = ChatFilterResult.PASS; } public enum Info { diff --git a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java index 9170f1db..2a9984b3 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java +++ b/src/main/java/me/xmrvizzy/skyblocker/mixin/ChatHudListenerMixin.java @@ -1,11 +1,16 @@ package me.xmrvizzy.skyblocker.mixin; -import me.xmrvizzy.skyblocker.chat.ChatParser; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatMessageListener; import me.xmrvizzy.skyblocker.utils.Utils; +import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.hud.ChatHudListener; +import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.network.MessageType; import net.minecraft.text.Text; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -15,14 +20,25 @@ import java.util.UUID; @Mixin(ChatHudListener.class) public class ChatHudListenerMixin { - private final ChatParser parser = new ChatParser(); + @Shadow + @Final + private MinecraftClient client; @Inject(method = "onChatMessage", at = @At("HEAD"), cancellable = true) public void onMessage(MessageType messageType, Text message, UUID senderUuid, CallbackInfo ci) { if (!Utils.isOnSkyblock) return; - if (parser.shouldFilter(message.getString())) - ci.cancel(); + String asString = message.getString(); + ChatFilterResult result = ChatMessageListener.EVENT.invoker().onMessage(message, asString); + switch (result) { + case ACTION_BAR: + ClientPlayerEntity player = client.player; + // Couldn't have received original message if client was null + assert player != null; + player.sendMessage(message, true); + case FILTER: + ci.cancel(); + } } } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/ApiKeyListener.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/ApiKeyListener.java new file mode 100644 index 00000000..520229f6 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/ApiKeyListener.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.skyblock.api; + +import me.shedaniel.autoconfig.AutoConfig; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import me.xmrvizzy.skyblocker.config.SkyblockerConfig; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; +import net.minecraft.text.TranslatableText; + +import java.util.regex.Matcher; + +public class ApiKeyListener extends ChatPatternListener { + public ApiKeyListener() { + super("^Your new API key is (.*)$"); + } + + @Override + protected ChatFilterResult state() { + return null; + } + + @Override + protected boolean onMatch(Text message, Matcher matcher) { + SkyblockerConfig.get().general.apiKey = matcher.group(1); + AutoConfig.getConfigHolder(SkyblockerConfig.class).save(); + MinecraftClient.getInstance().player.sendMessage(new TranslatableText("skyblocker.api.got_key"), false); + return false; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/ProfileUtils.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/ProfileUtils.java new file mode 100644 index 00000000..6fbf740f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/ProfileUtils.java @@ -0,0 +1,110 @@ +package me.xmrvizzy.skyblocker.skyblock.api; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonObject; +import marcono1234.gson.recordadapter.RecordTypeAdapterFactory; +import me.xmrvizzy.skyblocker.skyblock.api.records.PlayerProfiles; +import me.xmrvizzy.skyblocker.skyblock.itemlist.ItemFixerUpper; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.nbt.*; +import net.minecraft.text.Text; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +public class ProfileUtils { + public static PlayerProfiles getProfiles(String name){ + try { + URL url = new URL("https://sky.shiiyu.moe/api/v2/profile/" + name); + InputStreamReader reader = new InputStreamReader(url.openStream()); + Gson gson = new GsonBuilder() + .registerTypeAdapterFactory(RecordTypeAdapterFactory.builder().allowMissingComponentValues().create()) + .serializeNulls() + .create(); + return gson.fromJson(reader, PlayerProfiles.class); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static List<ItemStack> itemsFromApiInventory(me.xmrvizzy.skyblocker.skyblock.api.records.Items.Item[] items){ + List<ItemStack> inventory = new ArrayList<>(); + for (me.xmrvizzy.skyblocker.skyblock.api.records.Items.Item item : items){ + try{ + if (item.tag() != null){ + JsonObject obj = new Gson().fromJson(Files.readString(Path.of("./config/skyblocker/items-repo/items/" + item.tag().extraAttributes().id() + ".json")), JsonObject.class); + + NbtCompound root = new NbtCompound(); + root.put("Count", NbtByte.of(item.count())); + root.put("id", NbtString.of(ItemFixerUpper.convertItemId(obj.get("itemid").getAsString(), obj.get("damage").getAsInt()))); + NbtCompound tag = new NbtCompound(); + root.put("tag", tag); + + if (item.tag().ench() != null){ + NbtList enchantments = new NbtList(); + enchantments.add(new NbtCompound()); + tag.put("Enchantments", enchantments); + } + + NbtCompound extraAttributes = new NbtCompound(); + tag.put("ExtraAttributes", extraAttributes); + extraAttributes.put("id", NbtString.of(item.tag().extraAttributes().id())); + if (item.tag().extraAttributes().enchantments() != null){ + NbtCompound enchantments = new NbtCompound(); + extraAttributes.put("enchantments", enchantments); + for (String enchant : item.tag().extraAttributes().enchantments().keySet()){ + enchantments.put(enchant, NbtInt.of(item.tag().extraAttributes().enchantments().get(enchant))); + } + } + + NbtCompound display = new NbtCompound(); + tag.put("display", display); + display.put("Name", NbtString.of(Text.Serializer.toJson(Text.of(item.tag().display().name())))); + if (item.tag().display().lore() != null){ + NbtList lore = new NbtList(); + display.put("Lore", lore); + for (int i = 0; i < item.tag().display().lore().length; i++) { + if (i < item.tag().display().lore().length - 1) + lore.add(i, NbtString.of(Text.Serializer.toJson(Text.of(Arrays.stream(item.tag().display().lore()).toArray()[i].toString())))); + } + } + if (item.tag().display().color() != null){ + display.put("color", NbtInt.of(item.tag().display().color())); + } + + if (item.tag().skullOwner() != null){ + NbtCompound skullOwner = new NbtCompound(); + tag.put("SkullOwner", skullOwner); + UUID uuid = UUID.fromString(item.tag().skullOwner().id()); + skullOwner.put("Id", NbtHelper.fromUuid(uuid)); + skullOwner.put("Name", NbtString.of(item.tag().extraAttributes().id())); + + NbtCompound properties = new NbtCompound(); + skullOwner.put("Properties", properties); + NbtList textures = new NbtList(); + properties.put("textures", textures); + NbtCompound texture = new NbtCompound(); + textures.add(texture); + texture.put("Value", NbtString.of(item.tag().skullOwner().properties().textures()[0].get("Value"))); + } + inventory.add(ItemStack.fromNbt(root)); + } else { + inventory.add(Items.AIR.getDefaultStack()); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return inventory; + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/StatsCommand.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/StatsCommand.java new file mode 100644 index 00000000..b401905f --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/StatsCommand.java @@ -0,0 +1,27 @@ +package me.xmrvizzy.skyblocker.skyblock.api; + +import com.google.gson.GsonBuilder; +import com.mojang.brigadier.arguments.StringArgumentType; +import me.xmrvizzy.skyblocker.skyblock.api.records.PlayerProfiles; +import net.fabricmc.fabric.api.client.command.v1.ClientCommandManager; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.ClickEvent; +import net.minecraft.text.LiteralText; + +public class StatsCommand { + public static void init(){ + ClientCommandManager.DISPATCHER.register(ClientCommandManager.literal("skyblocker") + .then(ClientCommandManager.literal("debug") + .then(ClientCommandManager.literal("stats").then(ClientCommandManager.argument("username", StringArgumentType.string()) + .executes(context -> { + new Thread(() -> { + PlayerProfiles playerProfiles = ProfileUtils.getProfiles(StringArgumentType.getString(context, "username")); + for (String profileId : playerProfiles.profiles().keySet()){ + MinecraftClient.getInstance().player.sendMessage(new LiteralText(playerProfiles.profiles().get(profileId).cuteName()) + .styled(style -> style.withClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, new GsonBuilder().serializeNulls().setPrettyPrinting().create().toJson(playerProfiles.profiles().get(profileId))))), false); + } + }).start(); + return 1; + }))))); + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Enchanting.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Enchanting.java new file mode 100644 index 00000000..42538e42 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Enchanting.java @@ -0,0 +1,27 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records; + +import com.google.gson.annotations.SerializedName; +import me.xmrvizzy.skyblocker.skyblock.api.records.PlayerProfiles; + +import java.util.HashMap; + +public record Enchanting(boolean experimented, HashMap<String, Experiment> experiments){ + public record Experiment( + String name, + Stats stats, + Tier[] tiers + + ){ + public record Stats( + @SerializedName("last_attempt") PlayerProfiles.PlayerProfile.Data.LastUpdated lastAttempt, + @SerializedName("bonus_clicks") int bonusClicks, + @SerializedName("last_claimed") PlayerProfiles.PlayerProfile.Data.LastUpdated lastClaimed + ){} + public record Tier( + String name, + int attempts, + int claims, + @SerializedName("best_score") int bestScore + ){} + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Farming.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Farming.java new file mode 100644 index 00000000..87325819 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Farming.java @@ -0,0 +1,30 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records; + +import com.google.gson.annotations.SerializedName; + +import java.util.HashMap; + +public record Farming( + boolean talked, + @SerializedName("current_badges") Badges currentBadges, + @SerializedName("total_badges") Badges totalBadges, + Perks perks, + @SerializedName("unique_golds") int unique_golds, + HashMap<String, Crop> crops, + Contests contests +){ + public record Badges(int bronze, int silver, int gold){} + public record Perks(@SerializedName("double_drops") int doubleDrops, @SerializedName("farming_level_cap") int farmingLevelCap){} + public record Crop( + String name, + boolean attended, + @SerializedName("unique_gold") boolean uniqueGold, + int contests, + @SerializedName("personal_best") int personalBest, + Badges badges + ){} + public record Contests(@SerializedName("attended_contests") int attendedContests, @SerializedName("all_contests") Contest[] allContests){} + public record Contest(String date, String crop, int collected, boolean claimed, String medal, Placing placing){ + public record Placing(int position, double percentage){} + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Items.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Items.java new file mode 100644 index 00000000..28a4e4af --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Items.java @@ -0,0 +1,52 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records; + +import com.google.gson.annotations.SerializedName; + +import java.util.HashMap; + +public record Items( + Item[] armor, + Item[][] wardrobe, + Item[] inventory, + Item[] enderchest, + @SerializedName("talisman_bag") Item[] talismanBag, + @SerializedName("fishing_bag") Item[] fishingBag, + Item[] quiver, + @SerializedName("potion_bag") Item[] potionBag, + @SerializedName("personal_vault") Item[] personalVault, + Item[] storage, + Item[] weapons, + Item[] hoes, + Item[] pickaxes, + Item[] rods, + @SerializedName("highest_rarity_sword") Item highestRaritySword, + @SerializedName("highest_rarity_bow") Item highestRarityBow, + @SerializedName("highest_rarity_rod") Item highestRarityRod, + @SerializedName("armor_set_rarity") String armorSetRarity +){ + public record Item( + @SerializedName("Count") byte count, + int damage, + Tag tag, + boolean isInactive, + boolean inBackpack, + Item[] containsItems + ){ + public record Tag( + @SerializedName("ExtraAttributes") ExtraAttributes extraAttributes, + Display display, + @SerializedName("SkullOwner") SkullOwner skullOwner, + Enchant[] ench + ){ + public record ExtraAttributes(String id, HashMap<String, Integer> enchantments){} + public record Display(@SerializedName("Name") String name, @SerializedName("Lore") String[] lore, Integer color){} + public record SkullOwner( + @SerializedName("Id") String id, + @SerializedName("Properties") Properties properties + ){ + public record Properties(HashMap<String, String>[] textures){} + } + public record Enchant(int lvl, int id){} + } + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/PlayerProfiles.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/PlayerProfiles.java new file mode 100644 index 00000000..c880f5de --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/PlayerProfiles.java @@ -0,0 +1,150 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records; + +import com.google.gson.annotations.JsonAdapter; +import com.google.gson.annotations.SerializedName; +import marcono1234.gson.recordadapter.RecordTypeAdapterFactory; +import me.xmrvizzy.skyblocker.skyblock.api.records.dungeons.Dungeons; +import me.xmrvizzy.skyblocker.skyblock.api.records.mining.Mining; +import me.xmrvizzy.skyblocker.skyblock.api.records.misc.Misc; + +import java.util.HashMap; + +@JsonAdapter(RecordTypeAdapterFactory.class) +public record PlayerProfiles(HashMap<String, PlayerProfile> profiles) { + public record PlayerProfile( + @SerializedName("profile_id") String profileId, + @SerializedName("cute_name") String cuteName, + boolean current, + @SerializedName("last_save") long lastSave, + Items items, + Data data + + ){ + public record Data( + Stats stats, + @SerializedName("fairy_bonus") Stats fairyBonus, + @SerializedName("fairy_souls") FairySouls fairySouls, + @SerializedName("levels") HashMap<String, Level> skills, + @SerializedName("average_level") double averageLevel, + @SerializedName("average_level_no_progress") double trueAverageLevel, + @SerializedName("total_skill_xp") double totalSkillXp, + @SerializedName("skill_bonus") HashMap<String, Stats> skillBonus, + @SerializedName("average_level_rank") double averageLevelRank, + @SerializedName("slayer_coins_spent") HashMap<String, Integer> slayerCoinsSpent, + @SerializedName("slayer_bonus") HashMap<String, Stats> slayerBonus, + HashMap<String, Slayer> slayers, + @SerializedName("slayer_xp") int slayerXp, + @SerializedName("display_name") String username, + String uuid, + double bank, + double purse, + @SerializedName("current_area") String currentArea, + Entity[] kills, + Entity[] deaths, + @SerializedName("wardrobe_equipped_slot") int wardrobeEquippedSlot, + @SerializedName("skin_data") SkinData skinData, + Profile profile, + Member[] members, + Minion[] minions, + @SerializedName("minion_slots") MinionSlots minionSlots, + HashMap<String, Collection> collections, + Social social, + Dungeons dungeons, + Fishing fishing, + Farming farming, + Enchanting Enchanting, + Mining mining, + Misc misc, + @SerializedName("auctions_bought") Auctions auctionsBought, + @SerializedName("auctions_sold") Auctions auctionsSold, + @SerializedName("last_updated") LastUpdated lastUpdated, + @SerializedName("first_join") LastUpdated firstJoin + + ){ + public record Stats( + int health, + int defense, + @SerializedName("effective_health") int effectiveHealth, + int strength, + int speed, + @SerializedName("crit_chance") double critChance, + @SerializedName("crit_damage") int critDamage, + @SerializedName("bonus_attack_speed") int bonusAttackSpeed, + int intelligence, + @SerializedName("sea_creature_chance") int seaCreatureChance, + @SerializedName("magic_find") int magicFind, + @SerializedName("pet_luck") int petLuck, + int ferocity, + @SerializedName("ability_damage") double abilityDamage, + @SerializedName("mining_speed") int miningSpeed, + @SerializedName("mining_fortune") int miningFortune, + @SerializedName("farming_fortune") int farmingFortune, + @SerializedName("foraging_fortune") int foragingFortune, + int pristine, + int damage, + @SerializedName("damage_increase") double damageIncrease + ){} + public record FairySouls(int collected, int total, double progress){} + public record Level( + Double xp, + Integer level, + Integer maxLevel, + Long xpCurrent, + Integer xpForNext, + Double progress, + Integer levelCap, + Integer uncappedLevel, + Integer rank, + Double levelWithProgress, + Double unlockableLevelWithProgress + ){} + public record Entity(String type, String entityId, int amount, String entityName){} + public record SkinData(@SerializedName("skinurl") String skinUrl, String model){} + public record Profile(String gamemode){} + public record Member( + String uuid, + @SerializedName("display_name") String displayName, + @SerializedName("last_updated") LastUpdated lastUpdated, + @SerializedName("skin_data") SkinData skinData + ){} + public record LastUpdated(long unix, String text){} + public record Minion( + String id, + String type, + int tiers, + String name, + Integer[] levels + + ){} + public record MinionSlots(int currentSlots, int toNext, int toNextSlot){} + public record Collection(int tier, long amount, long totalAmount, UserAmount[] amounts){ + public record UserAmount(String username, long amount){} + } + public record Social( + @SerializedName("DISCORD") String discord, + @SerializedName("HYPIXEL") String hypixel, + @SerializedName("TWITTER") String twitter, + @SerializedName("YOUTUBE") String youtube, + @SerializedName("INSTAGRAM") String instagram, + @SerializedName("TWITCH") String twitch + ){} + public record Fishing( + int total, + int treasure, + @SerializedName("treasure_large") int treasureLarge, + @SerializedName("shredder_fished") int shredderFished, + @SerializedName("shredder_bait") int shredderBait + ){} + public record Auctions( + int uncommon, + int rare, + int epic, + int common, + int legendary, + int special + ){} + } + + } +} + diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Slayer.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Slayer.java new file mode 100644 index 00000000..77c73b0c --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/Slayer.java @@ -0,0 +1,29 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records; + +import com.google.gson.annotations.SerializedName; +import org.jetbrains.annotations.Nullable; + +import java.util.HashMap; + +public record Slayer( + PlayerProfiles.PlayerProfile.Data.Level level, + Kills kills, + @SerializedName("claimed_levels") ClaimedLevels claimedLevels, + int xp, + @SerializedName("boss_kills_tier_0") int bossKillsTier0, + @SerializedName("boss_kills_tier_1") int bossKillsTier1, + @SerializedName("boss_kills_tier_2") int bossKillsTier2, + @SerializedName("boss_kills_tier_3") int bossKillsTier3 +){ + public record Kills(@Nullable HashMap<String, Integer> kills){} + public record ClaimedLevels( + @SerializedName("level_1") boolean level1, + @SerializedName("level_2") boolean level2, + @SerializedName("level_3") boolean level3, + @SerializedName("level_4") boolean level4, + @SerializedName("level_5") boolean level5, + @SerializedName("level_6") boolean level6, + @SerializedName("level_7_special") boolean level7 + ){} + +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/dungeons/Dungeons.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/dungeons/Dungeons.java new file mode 100644 index 00000000..64c4c99c --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/dungeons/Dungeons.java @@ -0,0 +1,40 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records.dungeons; + +import com.google.gson.annotations.SerializedName; +import me.xmrvizzy.skyblocker.skyblock.api.records.PlayerProfiles; + +import java.util.HashMap; + +public record Dungeons( + Dungeon catacombs, + @SerializedName("master_catacombs") Dungeon masterCatacombs, + HashMap<String, Class> classes, + @SerializedName("used_classes") boolean usedClasses, + @SerializedName("selected_class") String selectedClass, + @SerializedName("secrets_found") int secretsFound, + HashMap<String, Integer> essence, + @SerializedName("unlocked_collections") boolean unlockedCollections, + @SerializedName("boss_collections") HashMap<String, Collection> bossCollections, + Journals journals + +){ + public record Dungeon( + String id, + boolean visited, + PlayerProfiles.PlayerProfile.Data.Level level, + @SerializedName("highest_floor") String highestFloor, + HashMap<Integer, Floor> floors + + ){} + public record Collection( + String name, + String texture, + int tier, + boolean maxed, + int killed, + HashMap<String, Integer> floors, + int unclaimed, + String[] claimed + ){} + public record Class(PlayerProfiles.PlayerProfile.Data.Level experience, boolean current){} +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/dungeons/Floor.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/dungeons/Floor.java new file mode 100644 index 00000000..8f5a9790 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/dungeons/Floor.java @@ -0,0 +1,44 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records.dungeons; + +import com.google.gson.annotations.SerializedName; + +public record Floor( + String name, + Stats stats, + @SerializedName("most_damage") MostDamage mostDamage, + Bonuses bonuses + +){ + public record Stats( + @SerializedName("times_played") int timesPlayed, + @SerializedName("best_score") int bestScore, + @SerializedName("mobs_killed") int mobsKilled, + @SerializedName("most_mobs_killed") int mostMobsKilled, + @SerializedName("most_healing") double mostHealing, + @SerializedName("tier_completions") int tierCompletions, + @SerializedName("fastest_time") long fastestTime, + @SerializedName("watcher_kills") int watcherKills, + @SerializedName("best_runs") Run[] bestRuns + ){} + public record MostDamage( + @SerializedName("class") String classUsed, + @SerializedName("value") double damage + ){} + public record Run( + long timestamp, + @SerializedName("score_exploration") int scoreExploration, + @SerializedName("score_speed") int scoreSpeed, + @SerializedName("score_skill") int scoreSkill, + @SerializedName("score_bonus") int scoreBonus, + @SerializedName("dungeon_class") int dungeonClass, + String[] teammates, + @SerializedName("elapsed_time") long elapsedTime, + @SerializedName("damaged_dealt") int damageDealt, + int deaths, + @SerializedName("mobs_killed") int mobsKilled, + @SerializedName("secrets_found") int secretsFound, + @SerializedName("damage_mitigated") double damageMitigated, + @SerializedName("ally_healing") int allyHealing + ){} + public record Bonuses(@SerializedName("item_boost") int itemBoost){} +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/dungeons/Journals.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/dungeons/Journals.java new file mode 100644 index 00000000..a9553fd3 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/dungeons/Journals.java @@ -0,0 +1,18 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records.dungeons; + +import com.google.gson.annotations.SerializedName; + +public record Journals( + @SerializedName("pages_completed") int pagesCompleted, + @SerializedName("journals_completed") int journalsCompleted, + @SerializedName("total_pages") Integer totalPages, + boolean maxed, + @SerializedName("journal_entries") Entry[] journalEntries + +){ + public record Entry( + String name, + @SerializedName("pages_collected") int pagesCollected, + @SerializedName("total_pages") Integer totalPages + ){} +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/mining/Core.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/mining/Core.java new file mode 100644 index 00000000..305b9c35 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/mining/Core.java @@ -0,0 +1,41 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records.mining; + +import com.google.gson.annotations.SerializedName; +import me.xmrvizzy.skyblocker.skyblock.api.records.PlayerProfiles; + +import java.util.HashMap; + +public record Core( + PlayerProfiles.PlayerProfile.Data.Level tier, + Spent tokens, + @SerializedName("selected_pickaxe_ability") String selectedMiningAbility, + HashMap<String, Spent> powder, + @SerializedName("crystal_nucleus") Nucleus crystalNucleus, + @SerializedName("daily_ores") DailyOres dailyOres, + @SerializedName("hotm_last_reset") long hotmLastReset, + @SerializedName("crystal_hollows_last_access") long crystalHollowsLastAccess +){ + public record Spent(int total, int spent, int available){} + public record Nucleus( + @SerializedName("times_completed") int timesCompleted, + HashMap<String, Crystal> crystals, + Goblin goblin + ){ + public record Crystal( + String state, + @SerializedName("total_placed") int totalPlaced, + @SerializedName("total_found") int totalFound + ){} + public record Goblin( + @SerializedName("king_quest_active") boolean kingQuestActive, + @SerializedName("king_quest_completed") boolean kingQuestCompleted + ){} + } + public record DailyOres( + int mined, + int day, + @SerializedName("daily_ores") HashMap<String, Ore> dailyOres + ){ + public record Ore(int day, int count){} + } +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/mining/Mining.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/mining/Mining.java new file mode 100644 index 00000000..d974f5c6 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/mining/Mining.java @@ -0,0 +1,23 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records.mining; + +import com.google.gson.annotations.SerializedName; +import me.xmrvizzy.skyblocker.skyblock.api.records.PlayerProfiles; + +import java.util.HashMap; + +public record Mining( + Commissions commissions, + Forge forge, + Core core +){ + public record Forge(Process[] processes){ + public record Process( + String id, + int slot, + long timeFinished, + String timeFinishedText, + String name + ){} + } + public record Commissions(int milestone){} +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/misc/Burrows.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/misc/Burrows.java new file mode 100644 index 00000000..2e3d55d7 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/misc/Burrows.java @@ -0,0 +1,19 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records.misc; + +import com.google.gson.annotations.SerializedName; + +public record Burrows( + @SerializedName("dug_next") Rarities dugNext, + @SerializedName("dug_combat") Rarities dugCombat, + @SerializedName("dug_treasure") Rarities dugTreasure, + @SerializedName("chains_complete") Rarities chainsComplete +){ + public record Rarities( + int total, + @SerializedName("null") int common, + int uncommon, + int rare, + int epic, + int legendary + ){} +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/misc/Misc.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/misc/Misc.java new file mode 100644 index 00000000..f0bad737 --- /dev/null +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/api/records/misc/Misc.java @@ -0,0 +1,42 @@ +package me.xmrvizzy.skyblocker.skyblock.api.records.misc; + +import com.google.gson.annotations.SerializedName; + +public record Misc( + Milestones milestones, + Gifts gifts, + Winter winter, + Dragons dragons, + Protector protector, + Damage damage, + Burrows burrows, + ProfileUpgrades profileUpgrades +){ + public record Milestones( + @SerializedName("ores_mined") int oresMined, + @SerializedName("sea_creatures_killed") int seaCreaturesKilled + ){} + public record Gifts(@SerializedName("gifts_given") int giftsGiven){} + public record Winter( + @SerializedName("most_winter_snowballs_hit") int mostWinterSnowballsHit, + @SerializedName("most_winter_damage_dealt") int mostWinterDamageDealt, + @SerializedName("most_winter_magma_damage_dealt") int mostWinterMagmaDamageDealt + ){} + public record Dragons( + @SerializedName("ender_crystals_destroyed") int enderCrystalsDestroyed, + @SerializedName("last_hits") int lastHits, + @SerializedName("deaths") int deaths + ){} + public record Protector( + @SerializedName("last_hits") int lastHits, + int deaths + ){} + public record Damage(@SerializedName("highest_critical_damage") double highestCriticalDamage){} + public record ProfileUpgrades( + @SerializedName("island_size") int islandSize, + @SerializedName("minion_slots") int minionSlots, + @SerializedName("guest_count") int guestCount, + @SerializedName("coop_slots") int coopSlots, + @SerializedName("coins_allowance") int coinsAllowance + ){} +} diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java index 65b9648f..f5fd1151 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Reparty.java @@ -1,16 +1,18 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; import me.xmrvizzy.skyblocker.SkyblockerMod; -import me.xmrvizzy.skyblocker.chat.ChatListener; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; import me.xmrvizzy.skyblocker.utils.Utils; import net.fabricmc.fabric.api.client.command.v1.ClientCommandManager; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.text.Text; import java.util.regex.Matcher; import java.util.regex.Pattern; -public class Reparty extends ChatListener { +public class Reparty extends ChatPatternListener { private static final MinecraftClient client = MinecraftClient.getInstance(); private static final SkyblockerMod skyblocker = SkyblockerMod.getInstance(); public static final Pattern PLAYER = Pattern.compile(" ([a-zA-Z0-9_]{2,16}) ●"); @@ -36,17 +38,17 @@ public class Reparty extends ChatListener { } @Override - public boolean isEnabled() { - return repartying; + public ChatFilterResult state() { + return repartying ? ChatFilterResult.FILTER : ChatFilterResult.PASS; } @Override - public boolean onMessage(String[] groups) { - if (groups[1] != null) { + public boolean onMatch(Text message, Matcher matcher) { + if (matcher.group(1) != null) { playersSoFar = 0; - players = new String[Integer.parseInt(groups[1]) - 1]; - } else if (groups[2] != null) { - Matcher m = PLAYER.matcher(groups[2]); + players = new String[Integer.parseInt(matcher.group(1)) - 1]; + } else if (matcher.group(2) != null) { + Matcher m = PLAYER.matcher(matcher.group(2)); while (m.find()) { players[playersSoFar++] = m.group(1); } @@ -65,10 +67,10 @@ public class Reparty extends ChatListener { sendCommand(playerEntity, "/p disband", 1); StringBuilder sb = new StringBuilder(); int invites = (players.length - 1) / 5 + 1; - for(int i = 0; i < invites; i++) { + for (int i = 0; i < invites; i++) { sb.setLength(0); sb.append("/p invite"); - for(int j = 0; j < 5 && i * 5 + j < players.length; j++) { + for (int j = 0; j < 5 && i * 5 + j < players.length; j++) { sb.append(' '); sb.append(players[i * 5 + j]); } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java index ea63b35e..8f1f3711 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdos.java @@ -1,24 +1,27 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; -import me.xmrvizzy.skyblocker.chat.ChatListener; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.decoration.ArmorStandEntity; import net.minecraft.text.Text; import net.minecraft.util.Formatting; -public class ThreeWeirdos extends ChatListener { +import java.util.regex.Matcher; + +public class ThreeWeirdos extends ChatPatternListener { public ThreeWeirdos() { super("^§e\\[NPC] §c([A-Z][a-z]+)§f: (?:The reward is(?: not in my chest!|n't in any of our chests\\.)|My chest (?:doesn't have the reward\\. We are all telling the truth\\.|has the reward and I'm telling the truth!)|At least one of them is lying, and the reward is not in §c§c[A-Z][a-z]+'s §rchest\\!|Both of them are telling the truth\\. Also, §c§c[A-Z][a-z]+ §rhas the reward in their chest\\!)$"); } @Override - public boolean isEnabled() { - return SkyblockerConfig.get().locations.dungeons.solveThreeWeirdos; + public ChatFilterResult state() { + return SkyblockerConfig.get().locations.dungeons.solveThreeWeirdos ? null : ChatFilterResult.PASS; } @Override - public boolean onMessage(String[] groups) { + public boolean onMatch(Text message, Matcher matcher) { MinecraftClient client = MinecraftClient.getInstance(); assert client.world != null; assert client.player != null; @@ -27,13 +30,13 @@ public class ThreeWeirdos extends ChatListener { client.player.getBoundingBox().expand(3), entity -> { Text customName = entity.getCustomName(); - if (customName != null && customName.getString().equals(groups[1])) { + if (customName != null && customName.getString().equals(matcher.group(1))) { return true; } return false; } ).forEach( - entity -> entity.setCustomName(Text.of(Formatting.GREEN + groups[1])) + entity -> entity.setCustomName(Text.of(Formatting.GREEN + matcher.group(1))) ); return false; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java index bb3d10d2..51ff1c6a 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dungeon/Trivia.java @@ -1,15 +1,18 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; -import me.xmrvizzy.skyblocker.chat.ChatListener; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.minecraft.client.MinecraftClient; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.text.LiteralText; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; import java.util.*; +import java.util.regex.Matcher; -public class Trivia extends ChatListener { +public class Trivia extends ChatPatternListener { private static final Map<String, String[]> answers; private List<String> solutions = Collections.emptyList(); @@ -18,21 +21,22 @@ public class Trivia extends ChatListener { } @Override - public boolean isEnabled() { - return SkyblockerConfig.get().locations.dungeons.solveTrivia; + public ChatFilterResult state() { + return SkyblockerConfig.get().locations.dungeons.solveTrivia ? ChatFilterResult.FILTER : ChatFilterResult.PASS; } @Override - public boolean onMessage(String[] groups) { - if (groups[3] != null) { - if (!solutions.contains(groups[3])) { + public boolean onMatch(Text message, Matcher matcher) { + String riddle = matcher.group(3); + if (riddle != null) { + if (!solutions.contains(riddle)) { ClientPlayerEntity player = MinecraftClient.getInstance().player; assert player != null; - MinecraftClient.getInstance().player.sendMessage(new LiteralText(" " + Formatting.GOLD + groups[2] + Formatting.RED + " " + groups[3]), false); + MinecraftClient.getInstance().player.sendMessage(new LiteralText(" " + Formatting.GOLD + matcher.group(2) + Formatting.RED + " " + riddle), false); return true; } } else - updateSolutions(groups[1]); + updateSolutions(matcher.group(0)); return false; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java index 266006b4..ce1dde11 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Fetchur.java @@ -1,6 +1,7 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; -import me.xmrvizzy.skyblocker.chat.ChatListener; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; @@ -8,24 +9,26 @@ import net.minecraft.text.TranslatableText; import java.util.HashMap; import java.util.Map; +import java.util.regex.Matcher; -public class Fetchur extends ChatListener { - private static Map<String, String> answers; +public class Fetchur extends ChatPatternListener { + private static final Map<String, String> answers; public Fetchur() { super("^§e\\[NPC] Fetchur§f: (?:its|theyre) ([a-zA-Z, \\-]*)$"); } @Override - public boolean isEnabled() { - return SkyblockerConfig.get().locations.dwarvenMines.solveFetchur; + public ChatFilterResult state() { + return SkyblockerConfig.get().locations.dwarvenMines.solveFetchur ? ChatFilterResult.FILTER : ChatFilterResult.PASS; } @Override - public boolean onMessage(String[] groups) { + public boolean onMatch(Text message, Matcher matcher) { MinecraftClient client = MinecraftClient.getInstance(); assert client.player != null; - String answer = answers.getOrDefault(groups[1], groups[1]); + String riddle = matcher.group(1); + String answer = answers.getOrDefault(riddle, riddle); client.player.sendMessage(Text.of("§e[NPC] Fetchur§f: " + answer), false); return true; } diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java index 3e117955..f61e007e 100644 --- a/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java +++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/dwarven/Puzzler.java @@ -1,27 +1,31 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; -import me.xmrvizzy.skyblocker.chat.ChatListener; +import me.xmrvizzy.skyblocker.chat.ChatFilterResult; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; import me.xmrvizzy.skyblocker.config.SkyblockerConfig; import net.minecraft.block.Blocks; import net.minecraft.client.MinecraftClient; import net.minecraft.client.world.ClientWorld; +import net.minecraft.text.Text; import net.minecraft.util.math.BlockPos; -public class Puzzler extends ChatListener { +import java.util.regex.Matcher; + +public class Puzzler extends ChatPatternListener { public Puzzler() { super("^§e\\[NPC] §dPuzzler§f: ((?:§d▲|§5▶|§b◀|§a▼){10})$"); } @Override - public boolean isEnabled() { - return SkyblockerConfig.get().locations.dwarvenMines.solvePuzzler; + public ChatFilterResult state() { + return SkyblockerConfig.get().locations.dwarvenMines.solvePuzzler ? null : ChatFilterResult.PASS; } @Override - public boolean onMessage(String[] groups) { + public boolean onMatch(Text message, Matcher matcher) { int x = 181; int z = 135; - for (char c : groups[1].toCharArray()) { + for (char c : matcher.group(1).toCharArray()) { if (c == '▲') z++; else if (c == '▼') z--; else if (c == '◀') x++; diff --git a/src/main/resources/assets/skyblocker/lang/en_us.json b/src/main/resources/assets/skyblocker/lang/en_us.json index 4ffba936..022c5a6c 100644 --- a/src/main/resources/assets/skyblocker/lang/en_us.json +++ b/src/main/resources/assets/skyblocker/lang/en_us.json @@ -61,5 +61,7 @@ "skyblocker.update.update_link": " §2§nClick here§r", "skyblocker.update.update_message_end" : " §ato find out about latest features.", "skyblocker.update.hover_text": "Open Modrinth", - "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Update Notification" + "text.autoconfig.skyblocker.option.general.enableUpdateNotification": "Update Notification", + + "skyblocker.api.got_key": "§b[§6Skyblocker§b] §2Automatically set your API key!" }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/ChatListenerTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/ChatListenerTest.java deleted file mode 100644 index 803f72d8..00000000 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/ChatListenerTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package me.xmrvizzy.skyblocker.chat; - -import java.util.regex.Matcher; - -import static org.junit.jupiter.api.Assertions.*; - -public abstract class ChatListenerTest<T extends ChatListener> { - protected final T listener; - - public ChatListenerTest(T listener) { - this.listener = listener; - } - - protected boolean captures(String text) { - return listener.getPattern().matcher(text).matches(); - } - protected String[] getGroups(String text) { - Matcher matcher = listener.getPattern().matcher(text); - assertTrue(matcher.matches()); - String[] groups = new String[matcher.groupCount() + 1]; - for (int i = 0; i < groups.length; i++) - groups[i] = matcher.group(i); - return groups; - } - protected void assertCaptures(String text) { - assertTrue(captures(text)); - } - protected void assertNotCaptures(String text) { - assertTrue(captures(text)); - } - protected void assertGroup(String text, int group, String expect) { - assertEquals(expect, getGroups(text)[group]); - } -}
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/ChatPatternListenerTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/ChatPatternListenerTest.java new file mode 100644 index 00000000..a4d6010a --- /dev/null +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/ChatPatternListenerTest.java @@ -0,0 +1,27 @@ +package me.xmrvizzy.skyblocker.chat; + +import java.util.regex.Matcher; + +import static org.junit.jupiter.api.Assertions.*; + +public abstract class ChatPatternListenerTest<T extends ChatPatternListener> { + protected final T listener; + + public ChatPatternListenerTest(T listener) { + this.listener = listener; + } + + protected Matcher matcher(String message) { + return listener.pattern.matcher(message); + } + + protected void assertMatches(String message) { + assertTrue(matcher(message).matches()); + } + + protected void assertGroup(String message, int group, String expect) { + Matcher matcher = matcher(message); + assertTrue(matcher.matches()); + assertEquals(expect, matcher.group(group)); + } +}
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilterTest.java index 295d9c6a..65faef5b 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AbilityFilterTest.java @@ -9,11 +9,11 @@ class AbilityFilterTest extends ChatFilterTest<AbilityFilter> { @Test void charges() { - assertFilters("No more charges, next one in 13.2s!"); + assertMatches("No more charges, next one in 13.2s!"); } @Test void cooldown() { - assertFilters("This ability is on cooldown for 42s."); + assertMatches("This ability is on cooldown for 42s."); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java index f66071d8..73fb5dbd 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AdFilterTest.java @@ -1,30 +1,35 @@ package me.xmrvizzy.skyblocker.chat.filters; +import me.xmrvizzy.skyblocker.chat.ChatPatternListenerTest; import org.junit.jupiter.api.Test; -class AdFilterTest extends ChatFilterTest<AdFilter> { +import java.util.regex.Matcher; + +import static org.junit.jupiter.api.Assertions.*; + +class AdFilterTest extends ChatPatternListenerTest<AdFilter> { public AdFilterTest() { super(new AdFilter()); } @Test void noRank() { - assertCaptures("§7Advertiser§7: advertisement"); + assertMatches("§7Advertiser§7: advertisement"); } @Test void vip() { - assertCaptures("§a[VIP] Advertiser§f: advertisement"); + assertMatches("§a[VIP] Advertiser§f: advertisement"); } @Test void mvp() { - assertCaptures("§b[MVP§c+§b] Advertiser§f: advertisement"); + assertMatches("§b[MVP§c+§b] Advertiser§f: advertisement"); } @Test void plusPlus() { - assertCaptures("§6[MVP§c++§6] Advertiser§f: advertisement"); + assertMatches("§6[MVP§c++§6] Advertiser§f: advertisement"); } @Test @@ -49,6 +54,14 @@ class AdFilterTest extends ChatFilterTest<AdFilter> { @Test void notAd() { - assertNotFilters("§a[VIP] NotMatching§f: This message shouldn't match!"); + Matcher matcher = listener.pattern.matcher("§a[VIP] NotMatching§f: This message shouldn't match!"); + assertTrue(matcher.matches()); + assertFalse(listener.onMatch(null, matcher)); + } + + void assertFilters(String message) { + Matcher matcher = listener.pattern.matcher(message); + assertTrue(matcher.matches()); + assertTrue(listener.onMatch(null, matcher)); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilterTest.java index ab75351e..4f736bd3 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/AoteFilterTest.java @@ -9,6 +9,6 @@ class AoteFilterTest extends ChatFilterTest<AoteFilter> { @Test void testRegex() { - assertFilters("There are blocks in the way!"); + assertMatches("There are blocks in the way!"); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilterTest.java index ff3399a7..6b356e5c 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ChatFilterTest.java @@ -1,26 +1,13 @@ package me.xmrvizzy.skyblocker.chat.filters; -import me.xmrvizzy.skyblocker.chat.ChatListener; -import me.xmrvizzy.skyblocker.chat.ChatListenerTest; +import me.xmrvizzy.skyblocker.chat.ChatPatternListener; +import me.xmrvizzy.skyblocker.chat.ChatPatternListenerTest; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertFalse; -public class ChatFilterTest<T extends ChatListener> extends ChatListenerTest<T> { +public class ChatFilterTest<T extends ChatPatternListener> extends ChatPatternListenerTest<T> { public ChatFilterTest(T listener) { super(listener); } - - protected boolean filters(String text) { - if(!captures(text)) - return false; - String[] groups = getGroups(text); - return listener.onMessage(groups); - } - protected void assertFilters(String text) { - assertTrue(filters(text)); - } - protected void assertNotFilters(String text) { - assertFalse(filters(text)); - } } diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilterTest.java index 521668b0..8af25b5e 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ComboFilterTest.java @@ -9,16 +9,16 @@ public class ComboFilterTest extends ChatFilterTest<ComboFilter> { @Test void testComboMF() { - assertFilters("+5 Kill Combo +3% ✯ Magic Find"); + assertMatches("+5 Kill Combo +3% ✯ Magic Find"); } @Test void testComboCoins() { - assertFilters("+10 Kill Combo +10 coins per kill"); + assertMatches("+10 Kill Combo +10 coins per kill"); } @Test void testComboExpired() { - assertFilters("Your Kill Combo has expired! You reached a 11 Kill Combo!"); + assertMatches("Your Kill Combo has expired! You reached a 11 Kill Combo!"); } } diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/HealFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/HealFilterTest.java index 05477ce9..5d8c12cf 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/HealFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/HealFilterTest.java @@ -9,11 +9,11 @@ class HealFilterTest extends ChatFilterTest<HealFilter> { @Test void healSelf() { - assertFilters("You healed yourself for 18.3 health!"); + assertMatches("You healed yourself for 18.3 health!"); } @Test void healedYou() { - assertFilters("H3aler_ healed you for 56 health!"); + assertMatches("H3aler_ healed you for 56 health!"); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilterTest.java index fe2c00b1..59451167 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/ImplosionFilterTest.java @@ -9,11 +9,11 @@ class ImplosionFilterTest extends ChatFilterTest<ImplosionFilter> { @Test void oneEnemy() { - assertFilters("Your Implosion hit 1 enemy for 636,116.8 damage."); + assertMatches("Your Implosion hit 1 enemy for 636,116.8 damage."); } @Test void multipleEnemies() { - assertFilters("Your Implosion hit 7 enemies for 4,452,817.4 damage."); + assertMatches("Your Implosion hit 7 enemies for 4,452,817.4 damage."); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/TeleportPadFilterTest.java b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/TeleportPadFilterTest.java index 605d57bb..a3eadc7b 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/chat/filters/TeleportPadFilterTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/chat/filters/TeleportPadFilterTest.java @@ -9,11 +9,11 @@ public class TeleportPadFilterTest extends ChatFilterTest<TeleportPadFilter> { @Test void testTeleport() { - assertFilters("Warped from the Base Teleport Pad to the Minion Teleport Pad!"); + assertMatches("Warped from the Base Teleport Pad to the Minion Teleport Pad!"); } @Test void testNoDestination() { - assertFilters("This Teleport Pad does not have a destination set!"); + assertMatches("This Teleport Pad does not have a destination set!"); } }
\ No newline at end of file diff --git a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdosTest.java b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdosTest.java index 18c638c7..555753b6 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdosTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/ThreeWeirdosTest.java @@ -1,9 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; -import me.xmrvizzy.skyblocker.chat.ChatListenerTest; +import me.xmrvizzy.skyblocker.chat.ChatPatternListenerTest; import org.junit.jupiter.api.Test; -class ThreeWeirdosTest extends ChatListenerTest<ThreeWeirdos> { +class ThreeWeirdosTest extends ChatPatternListenerTest<ThreeWeirdos> { public ThreeWeirdosTest() { super(new ThreeWeirdos()); } diff --git a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/TriviaTest.java b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/TriviaTest.java index 6f7950e3..37f077fb 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/TriviaTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dungeon/TriviaTest.java @@ -1,9 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.dungeon; -import me.xmrvizzy.skyblocker.chat.ChatListenerTest; +import me.xmrvizzy.skyblocker.chat.ChatPatternListenerTest; import org.junit.jupiter.api.Test; -class TriviaTest extends ChatListenerTest<Trivia> { +class TriviaTest extends ChatPatternListenerTest<Trivia> { public TriviaTest() { super(new Trivia()); } diff --git a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dwarven/FetchurTest.java b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dwarven/FetchurTest.java index 35b8ab58..f8e0af18 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dwarven/FetchurTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dwarven/FetchurTest.java @@ -1,11 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; -import me.xmrvizzy.skyblocker.chat.ChatListenerTest; +import me.xmrvizzy.skyblocker.chat.ChatPatternListenerTest; import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; - -class FetchurTest extends ChatListenerTest<Fetchur> { +class FetchurTest extends ChatPatternListenerTest<Fetchur> { public FetchurTest() { super(new Fetchur()); } diff --git a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dwarven/PuzzlerTest.java b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dwarven/PuzzlerTest.java index ab2878ef..e26e306e 100644 --- a/src/test/java/me/xmrvizzy/skyblocker/skyblock/dwarven/PuzzlerTest.java +++ b/src/test/java/me/xmrvizzy/skyblocker/skyblock/dwarven/PuzzlerTest.java @@ -1,9 +1,9 @@ package me.xmrvizzy.skyblocker.skyblock.dwarven; -import me.xmrvizzy.skyblocker.chat.ChatListenerTest; +import me.xmrvizzy.skyblocker.chat.ChatPatternListenerTest; import org.junit.jupiter.api.Test; -class PuzzlerTest extends ChatListenerTest<Puzzler> { +class PuzzlerTest extends ChatPatternListenerTest<Puzzler> { public PuzzlerTest() { super(new Puzzler()); } |