aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de')
-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 d5b8204f..6982ad21 100644
--- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
+++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
@@ -10,6 +10,7 @@ import de.hysky.skyblocker.skyblock.bazaar.BazaarHelper;
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;
@@ -140,6 +141,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..b0bab6e7 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/ChatConfig.java
@@ -5,6 +5,9 @@ import dev.isxander.yacl3.config.v2.api.SerialEntry;
public class ChatConfig {
@SerialEntry
+ public boolean skyblockXpMessages = true;
+
+ @SerialEntry
public ChatFilterResult hideAbility = ChatFilterResult.PASS;
@SerialEntry
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..1450b001
--- /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);
+ }
+
+ 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);
+ Scheduler.INSTANCE.schedule(() -> RECENT_MESSAGES.remove(hash), 20 * 10);
+ }
+ }
+ }
+}