From 1bb0f5f033eebd8760f9ffaf2b237d354922cf45 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Sun, 28 Jul 2024 23:30:32 -0400 Subject: Skyblock XP Messages --- .../java/de/hysky/skyblocker/SkyblockerMod.java | 2 ++ .../skyblocker/config/categories/ChatCategory.java | 8 +++++ .../skyblocker/config/configs/ChatConfig.java | 3 ++ .../skyblock/chat/SkyblockXpMessages.java | 37 ++++++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java index ad7d4350..3ae97e82 100644 --- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java +++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java @@ -9,6 +9,7 @@ import de.hysky.skyblocker.skyblock.*; import de.hysky.skyblocker.skyblock.calculators.CalculatorCommand; import de.hysky.skyblocker.skyblock.chat.ChatRuleAnnouncementScreen; import de.hysky.skyblocker.skyblock.chat.ChatRulesHandler; +import de.hysky.skyblocker.skyblock.chat.SkyblockXpMessages; import de.hysky.skyblocker.skyblock.chocolatefactory.EggFinder; import de.hysky.skyblocker.skyblock.chocolatefactory.TimeTowerReminder; import de.hysky.skyblocker.skyblock.crimson.dojo.DojoManager; @@ -138,6 +139,7 @@ public class SkyblockerMod implements ClientModInitializer { Shortcuts.init(); ChatRulesHandler.init(); ChatRuleAnnouncementScreen.init(); + SkyblockXpMessages.init(); CalculatorCommand.init(); DiscordRPCManager.init(); LividColor.init(); diff --git a/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java index 993b07e4..60c88f0e 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java @@ -14,6 +14,14 @@ public class ChatCategory { public static ConfigCategory create(SkyblockerConfig defaults, SkyblockerConfig config) { return ConfigCategory.createBuilder() .name(Text.translatable("skyblocker.config.chat")) + .option(Option.createBuilder() + .name(Text.translatable("skyblocker.config.chat.skyblockXpMessages")) + .description(OptionDescription.of(Text.translatable("skyblocker.config.chat.skyblockXpMessages.@Tooltip"))) + .binding(defaults.chat.skyblockXpMessages, + () -> config.chat.skyblockXpMessages, + newValue -> config.chat.skyblockXpMessages = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) //Uncategorized Options .group(OptionGroup.createBuilder() diff --git a/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java index f857ad61..a247454b 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java @@ -49,6 +49,9 @@ public class ChatConfig { @SerialEntry public ChatFilterResult hideDicer = ChatFilterResult.PASS; + @SerialEntry + public boolean skyblockXpMessages = true; + @SerialEntry public ChatRuleConfig chatRuleConfig = new ChatRuleConfig(); diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java new file mode 100644 index 00000000..a7f85d35 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java @@ -0,0 +1,37 @@ +package de.hysky.skyblocker.skyblock.chat; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.Constants; +import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.scheduler.Scheduler; +import it.unimi.dsi.fastutil.ints.IntOpenHashSet; +import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.Text; + +public class SkyblockXpMessages { + private static final MinecraftClient CLIENT = MinecraftClient.getInstance(); + private static final Pattern SKYBLOCK_XP_PATTERN = Pattern.compile("§b\\+\\d+ SkyBlock XP §7\\([^()]+§7\\)§b \\(\\d+\\/\\d+\\)"); + private static final IntOpenHashSet RECENT_MESSAGES = new IntOpenHashSet(); + + public static void init() { + ClientReceiveMessageEvents.GAME.register(SkyblockXpMessages::onMessage); + Scheduler.INSTANCE.scheduleCyclic(RECENT_MESSAGES::clear, 20 * 60); + } + + private static void onMessage(Text text, boolean overlay) { + if (Utils.isOnSkyblock() && overlay && SkyblockerConfigManager.get().chat.skyblockXpMessages) { + String message = text.getString(); + Matcher matcher = SKYBLOCK_XP_PATTERN.matcher(message); + int hash = message.hashCode(); + + if (matcher.find() && !RECENT_MESSAGES.contains(hash)) { + CLIENT.player.sendMessage(Constants.PREFIX.get().append(matcher.group())); + RECENT_MESSAGES.add(hash); + } + } + } +} -- cgit From 0732e4ec8c3222e592eeefeca1e611bd336b5380 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 2 Aug 2024 02:03:34 -0400 Subject: Better cache eviction --- src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java b/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java index a7f85d35..1450b001 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java @@ -19,7 +19,6 @@ public class SkyblockXpMessages { public static void init() { ClientReceiveMessageEvents.GAME.register(SkyblockXpMessages::onMessage); - Scheduler.INSTANCE.scheduleCyclic(RECENT_MESSAGES::clear, 20 * 60); } private static void onMessage(Text text, boolean overlay) { @@ -31,6 +30,7 @@ public class SkyblockXpMessages { if (matcher.find() && !RECENT_MESSAGES.contains(hash)) { CLIENT.player.sendMessage(Constants.PREFIX.get().append(matcher.group())); RECENT_MESSAGES.add(hash); + Scheduler.INSTANCE.schedule(() -> RECENT_MESSAGES.remove(hash), 20 * 10); } } } -- cgit From 71c4292c64ab6c92bf7d4d493ee8e211313c7d05 Mon Sep 17 00:00:00 2001 From: Aaron <51387595+AzureAaron@users.noreply.github.com> Date: Fri, 2 Aug 2024 14:11:37 -0400 Subject: Move boolean --- src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java index a247454b..b0bab6e7 100644 --- a/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java @@ -4,6 +4,9 @@ import de.hysky.skyblocker.utils.chat.ChatFilterResult; import dev.isxander.yacl3.config.v2.api.SerialEntry; public class ChatConfig { + @SerialEntry + public boolean skyblockXpMessages = true; + @SerialEntry public ChatFilterResult hideAbility = ChatFilterResult.PASS; @@ -49,9 +52,6 @@ public class ChatConfig { @SerialEntry public ChatFilterResult hideDicer = ChatFilterResult.PASS; - @SerialEntry - public boolean skyblockXpMessages = true; - @SerialEntry public ChatRuleConfig chatRuleConfig = new ChatRuleConfig(); -- cgit