aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorAaron <51387595+AzureAaron@users.noreply.github.com>2024-07-28 23:30:32 -0400
committerAaron <51387595+AzureAaron@users.noreply.github.com>2024-07-28 23:30:32 -0400
commit1bb0f5f033eebd8760f9ffaf2b237d354922cf45 (patch)
tree013d7dcda331835b92ab9f2d520ace6b873033dd /src/main/java
parente742325b254dbaee90032737334494bece43fe02 (diff)
downloadSkyblocker-1bb0f5f033eebd8760f9ffaf2b237d354922cf45.tar.gz
Skyblocker-1bb0f5f033eebd8760f9ffaf2b237d354922cf45.tar.bz2
Skyblocker-1bb0f5f033eebd8760f9ffaf2b237d354922cf45.zip
Skyblock XP Messages
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerMod.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/ChatCategory.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/chat/SkyblockXpMessages.java37
4 files changed, 50 insertions, 0 deletions
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.<Boolean>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
@@ -50,6 +50,9 @@ public class ChatConfig {
public ChatFilterResult hideDicer = ChatFilterResult.PASS;
@SerialEntry
+ public boolean skyblockXpMessages = true;
+
+ @SerialEntry
public ChatRuleConfig chatRuleConfig = new ChatRuleConfig();
public static class 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);
+ }
+ }
+ }
+}