diff options
Diffstat (limited to 'src/main/java')
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); + } + } + } +} |
