aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/dungeon
diff options
context:
space:
mode:
authorKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2023-12-31 16:29:32 +0800
committerKevinthegreat <92656833+kevinthegreat1@users.noreply.github.com>2024-01-01 15:45:15 +0800
commit2afac7b0a8b15c30852ad329ed63c70c7cde25ec (patch)
tree59ad8c7783c16a569976aa50ab3102ea775bd173 /src/main/java/de/hysky/skyblocker/skyblock/dungeon
parent37eb5bfad25b1e0c3326ed27744c38f81513b5e4 (diff)
downloadSkyblocker-2afac7b0a8b15c30852ad329ed63c70c7cde25ec.tar.gz
Skyblocker-2afac7b0a8b15c30852ad329ed63c70c7cde25ec.tar.bz2
Skyblocker-2afac7b0a8b15c30852ad329ed63c70c7cde25ec.zip
Add Dungeon Score
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/skyblock/dungeon')
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/DungeonScore.java55
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/LividColor.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/dungeon/secrets/DungeonManager.java11
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;
}
}