aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/config/features/combat/MobsConfig.java9
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/chat/ArachneChatMessageHider.kt4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/combat/mobs/ArachneKillTimer.kt88
3 files changed, 99 insertions, 2 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/combat/MobsConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/combat/MobsConfig.java
index f51076360..fc46880fc 100644
--- a/src/main/java/at/hannibal2/skyhanni/config/features/combat/MobsConfig.java
+++ b/src/main/java/at/hannibal2/skyhanni/config/features/combat/MobsConfig.java
@@ -90,6 +90,15 @@ public class MobsConfig {
public boolean showArachneSpawnTimer = true;
@Expose
+ @ConfigOption(
+ name = "Arachne Kill Timer", desc = "Shows how long it took to kill Arachne after the fight ends. " +
+ "§cDoes not show if you were not in the Sanctuary when it spawned."
+ )
+ @ConfigEditorBoolean
+ @FeatureToggle
+ public boolean arachneKillTimer = true;
+
+ @Expose
@ConfigOption(name = "Enderman TP Hider", desc = "Stops the Enderman Teleportation animation.")
@ConfigEditorBoolean
@FeatureToggle
diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/ArachneChatMessageHider.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/ArachneChatMessageHider.kt
index 5bf5b3448..846458456 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/chat/ArachneChatMessageHider.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/chat/ArachneChatMessageHider.kt
@@ -17,11 +17,11 @@ object ArachneChatMessageHider {
private var hideArachneDeadMessage = false
private val patternGroup = RepoPattern.group("chat.arachne")
- private val arachneCallingPattern by patternGroup.pattern(
+ val arachneCallingPattern by patternGroup.pattern(
"calling",
"§4☄ §r.* §r§eplaced an §r§9Arachne's Calling§r§e!.*"
)
- private val arachneCrystalPattern by patternGroup.pattern(
+ val arachneCrystalPattern by patternGroup.pattern(
"crystal",
"§4☄ §r.* §r§eplaced an Arachne Crystal! Something is awakening!"
)
diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/ArachneKillTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/ArachneKillTimer.kt
new file mode 100644
index 000000000..d4980ec50
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/ArachneKillTimer.kt
@@ -0,0 +1,88 @@
+package at.hannibal2.skyhanni.features.combat.mobs
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.data.IslandType
+import at.hannibal2.skyhanni.events.LorenzChatEvent
+import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
+import at.hannibal2.skyhanni.features.chat.ArachneChatMessageHider
+import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
+import at.hannibal2.skyhanni.utils.ChatUtils
+import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland
+import at.hannibal2.skyhanni.utils.RegexUtils.matches
+import at.hannibal2.skyhanni.utils.SimpleTimeMark
+import at.hannibal2.skyhanni.utils.TimeUtils.format
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import kotlin.time.Duration
+
+@SkyHanniModule
+object ArachneKillTimer {
+
+ private val config get() = SkyHanniMod.feature.combat.mobs
+
+ private val patternGroup = RepoPattern.group("chat.arachne")
+
+ /**
+ * REGEX-TEST: §c[BOSS] Arachne§r§f: A befitting welcome!
+ */
+ private val arachneCallingSpawnedPattern by patternGroup.pattern(
+ "calling.spawned",
+ "§c\\[BOSS] Arachne§r§f: A befitting welcome!"
+ )
+ /**
+ * REGEX-TEST: §c[BOSS] Arachne§r§f: With your sacrifice.
+ */
+ private val arachneCrystalSpawnedPattern by patternGroup.pattern(
+ "crystal.spawned",
+ "§c\\[BOSS] Arachne§r§f: With your sacrifice."
+ )
+ /**
+ * REGEX-TEST: §f §r§6§lARACHNE DOWN!
+ */
+ private val arachneDeathPattern by patternGroup.pattern(
+ "dead",
+ "§f.*§r§6§lARACHNE DOWN!"
+ )
+ /**
+ * REGEX-TEST: §f §r§eYour Damage: §r§a1,155,000 §r§7(Position #1)
+ */
+ private val arachneDamagePattern by patternGroup.pattern(
+ "damage",
+ "§f +§r§eYour Damage: §r§a[0-9,]+ §r§7\\(Position #[0-9,]+\\)"
+ )
+
+ private var arachneSpawnedTime = SimpleTimeMark.farPast()
+ private var arachneKillTime = Duration.ZERO
+
+ @SubscribeEvent
+ fun onChat(event: LorenzChatEvent) {
+ if (!isEnabled()) return
+ if (arachneCallingSpawnedPattern.matches(event.message) || arachneCrystalSpawnedPattern.matches(event.message)) {
+ arachneSpawnedTime = SimpleTimeMark.now()
+ }
+
+ if (arachneDeathPattern.matches(event.message) && arachneSpawnedTime != SimpleTimeMark.farPast()) {
+ arachneKillTime = arachneSpawnedTime.passedSince()
+ }
+
+ if (ArachneChatMessageHider.arachneCallingPattern.matches(event.message) ||
+ ArachneChatMessageHider.arachneCrystalPattern.matches(event.message)
+ ) {
+ arachneSpawnedTime = SimpleTimeMark.farPast()
+ }
+
+ if (arachneKillTime.isPositive() && arachneDamagePattern.matches(event.message)) {
+ val format = arachneKillTime.format(showMilliSeconds = true)
+ ChatUtils.chat(" §eArachne took §b$format§e seconds to kill.", prefix = false)
+ arachneKillTime = Duration.ZERO
+ arachneSpawnedTime = SimpleTimeMark.farPast()
+ }
+ }
+
+ @SubscribeEvent
+ fun onWorldChange(event: LorenzWorldChangeEvent) {
+ arachneSpawnedTime = SimpleTimeMark.farPast()
+ }
+
+ fun isEnabled() = IslandType.SPIDER_DEN.isInIsland() && config.arachneKillTimer
+}