diff options
author | Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> | 2023-12-31 16:29:32 +0800 |
---|---|---|
committer | Kevinthegreat <92656833+kevinthegreat1@users.noreply.github.com> | 2024-01-01 15:45:15 +0800 |
commit | 2afac7b0a8b15c30852ad329ed63c70c7cde25ec (patch) | |
tree | 59ad8c7783c16a569976aa50ab3102ea775bd173 /src/main/java/de/hysky/skyblocker/skyblock/dungeon | |
parent | 37eb5bfad25b1e0c3326ed27744c38f81513b5e4 (diff) | |
download | Skyblocker-2afac7b0a8b15c30852ad329ed63c70c7cde25ec.tar.gz Skyblocker-2afac7b0a8b15c30852ad329ed63c70c7cde25ec.tar.bz2 Skyblocker-2afac7b0a8b15c30852ad329ed63c70c7cde25ec.zip |
Add Dungeon Score
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/dungeon')
3 files changed, 67 insertions, 2 deletions
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java new file mode 100644 index 00000000..cef5efa1 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java @@ -0,0 +1,55 @@ +package de.hysky.skyblocker.skyblock.dungeon; + +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonManager; +import de.hysky.skyblocker.utils.Constants; +import de.hysky.skyblocker.utils.Utils; +import de.hysky.skyblocker.utils.scheduler.MessageScheduler; +import de.hysky.skyblocker.utils.scheduler.Scheduler; +import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class DungeonScore { + private static final SkyblockerConfig.DungeonScore CONFIG = SkyblockerConfigManager.get().locations.dungeons.dungeonScore; + private static final Pattern DUNGEON_CLEARED_PATTERN = Pattern.compile("Cleared: (?<cleared>\\d+)% \\((?<score>\\d+)\\)"); + private static boolean sent270; + private static boolean sent300; + + public static void init() { + Scheduler.INSTANCE.scheduleCyclic(DungeonScore::tick, 20); + ClientPlayConnectionEvents.JOIN.register((handler, sender, client) -> reset()); + } + + public static void tick() { + if (!Utils.isInDungeons()) { + reset(); + return; + } + + for (String sidebarLine : Utils.STRING_SCOREBOARD) { + Matcher dungeonClearedMatcher = DUNGEON_CLEARED_PATTERN.matcher(sidebarLine); + if (!dungeonClearedMatcher.matches()) { + continue; + } + int score = Integer.parseInt(dungeonClearedMatcher.group("score")); + if (!DungeonManager.isInBoss()) score += 28; + if (CONFIG.enableDungeonScore270 && !sent270 && score >= 270 && score < 300) { + MessageScheduler.INSTANCE.sendMessageAfterCooldown(Constants.PREFIX.get().getString() + CONFIG.dungeonScore270Message.replaceAll("\\[score]", "270")); + sent270 = true; + } + if (CONFIG.enableDungeonScore300 && !sent300 && score >= 300) { + MessageScheduler.INSTANCE.sendMessageAfterCooldown(Constants.PREFIX.get().getString() + CONFIG.dungeonScore300Message.replaceAll("\\[score]", "300")); + sent300 = true; + } + break; + } + } + + private static void reset() { + sent270 = false; + sent300 = false; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java index f40b7859..472c9d95 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java @@ -2,6 +2,7 @@ package de.hysky.skyblocker.skyblock.dungeon; import de.hysky.skyblocker.config.SkyblockerConfig; import de.hysky.skyblocker.config.SkyblockerConfigManager; +import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.Utils; import de.hysky.skyblocker.utils.scheduler.MessageScheduler; import net.fabricmc.fabric.api.client.message.v1.ClientReceiveMessageEvents; @@ -74,7 +75,7 @@ public class LividColor { LividColor.color = WOOL_TO_FORMATTING.get(color); if (SkyblockerConfigManager.get().locations.dungeons.lividColor.enableLividColorText) { String colorString = Registries.BLOCK.getId(color).getPath(); - MessageScheduler.INSTANCE.sendMessageAfterCooldown(SkyblockerConfigManager.get().locations.dungeons.lividColor.lividColorText.replaceAll("\\[color]", colorString.substring(0, colorString.length() - 5))); + MessageScheduler.INSTANCE.sendMessageAfterCooldown(Constants.PREFIX.get().getString() + SkyblockerConfigManager.get().locations.dungeons.lividColor.lividColorText.replaceAll("\\[color]", colorString.substring(0, colorString.length() - 5))); } tenTicks = 0; } diff --git a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java index bd10767f..32f0b7e3 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java @@ -147,6 +147,7 @@ public class DungeonManager { @Nullable private static Vector2ic physicalEntrancePos; private static Room currentRoom; + private static boolean inBoss; public static boolean isRoomsLoaded() { return roomsLoaded != null && roomsLoaded.isDone(); @@ -203,6 +204,10 @@ public class DungeonManager { return currentRoom; } + public static boolean isInBoss() { + return inBoss; + } + /** * Loads the dungeon secrets asynchronously from {@code /assets/skyblocker/dungeons}. * Use {@link #isRoomsLoaded()} to check for completion of loading. @@ -644,7 +649,10 @@ public class DungeonManager { if (message.equals("[BOSS] Bonzo: Gratz for making it this far, but I'm basically unbeatable.") || message.equals("[BOSS] Scarf: This is where the journey ends for you, Adventurers.") || message.equals("[BOSS] The Professor: I was burdened with terrible news recently...") || message.equals("[BOSS] Thorn: Welcome Adventurers! I am Thorn, the Spirit! And host of the Vegan Trials!") || message.equals("[BOSS] Livid: Welcome, you've arrived right on time. I am Livid, the Master of Shadows.") || message.equals("[BOSS] Sadan: So you made it all the way here... Now you wish to defy me? Sadan?!") - || message.equals("[BOSS] Maxor: WELL! WELL! WELL! LOOK WHO'S HERE!")) reset(); + || message.equals("[BOSS] Maxor: WELL! WELL! WELL! LOOK WHO'S HERE!")) { + reset(); + inBoss = true; + } } /** @@ -763,5 +771,6 @@ public class DungeonManager { physicalEntrancePos = null; rooms.clear(); currentRoom = null; + inBoss = false; } } |