Skip to content

Commit

Permalink
Feature: Arachne kill timer (#1993)
Browse files Browse the repository at this point in the history
Co-authored-by: Cal <cwolfson58@gmail.com>
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
  • Loading branch information
3 people authored Sep 7, 2024
1 parent b0b2d42 commit 9888071
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,15 @@ public class MobsConfig {
@FeatureToggle
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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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!"
)
Expand Down
Original file line number Diff line number Diff line change
@@ -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
}

0 comments on commit 9888071

Please sign in to comment.