From daa63bd914a2f6c5e9b668abb8474884685ee818 Mon Sep 17 00:00:00 2001 From: Linnea Gräf Date: Mon, 7 Oct 2024 15:08:18 +0200 Subject: Fix drill ability cooldown resetting on world swap --- src/main/kotlin/features/mining/PickaxeAbility.kt | 24 +++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src/main/kotlin/features') diff --git a/src/main/kotlin/features/mining/PickaxeAbility.kt b/src/main/kotlin/features/mining/PickaxeAbility.kt index 318a868..192419f 100644 --- a/src/main/kotlin/features/mining/PickaxeAbility.kt +++ b/src/main/kotlin/features/mining/PickaxeAbility.kt @@ -11,13 +11,16 @@ import net.minecraft.util.Identifier import moe.nea.firmament.annotations.Subscribe import moe.nea.firmament.events.HudRenderEvent import moe.nea.firmament.events.ProcessChatEvent +import moe.nea.firmament.events.ProfileSwitchEvent import moe.nea.firmament.events.SlotClickEvent import moe.nea.firmament.events.WorldReadyEvent import moe.nea.firmament.features.FirmamentFeature import moe.nea.firmament.gui.config.ManagedConfig import moe.nea.firmament.util.DurabilityBarEvent import moe.nea.firmament.util.MC +import moe.nea.firmament.util.SBData import moe.nea.firmament.util.SHORT_NUMBER_FORMAT +import moe.nea.firmament.util.SkyBlockIsland import moe.nea.firmament.util.TIME_PATTERN import moe.nea.firmament.util.TimeMark import moe.nea.firmament.util.extraAttributes @@ -58,14 +61,15 @@ object PickaxeAbility : FirmamentFeature { get() = TConfig fun getCooldownPercentage(name: String, cooldown: Duration): Double { - val sinceLastUsage = lastUsage[name]?.passedTime() ?: Duration.INFINITE + val sinceLastUsage = lastUsage[name]?.passedTime() ?: Duration.INFINITE + val sinceLobbyJoin = lobbyJoinTime.passedTime() + if (SBData.skyblockLocation == SkyBlockIsland.MINESHAFT) { + if (sinceLobbyJoin < sinceLastUsage) { + return 1.0 + } + } if (sinceLastUsage < cooldown) return sinceLastUsage / cooldown - val sinceLobbyJoin = lobbyJoinTime.passedTime() - val halfCooldown = cooldown / 2 - if (sinceLobbyJoin < halfCooldown) { - return (sinceLobbyJoin / halfCooldown) - } return 1.0 } @@ -117,11 +121,15 @@ object PickaxeAbility : FirmamentFeature { @Subscribe fun onWorldReady(event: WorldReadyEvent) { - lastUsage.clear() lobbyJoinTime = TimeMark.now() abilityOverride = null } + @Subscribe + fun onProfileSwitch(event: ProfileSwitchEvent) { + lastUsage.clear() + } + val abilityUsePattern = Pattern.compile("You used your (?.*) Pickaxe Ability!") val fuelPattern = Pattern.compile("Fuel: .*/(?$SHORT_NUMBER_FORMAT)") @@ -132,7 +140,7 @@ object PickaxeAbility : FirmamentFeature { fun getCooldownFromLore(itemStack: ItemStack): PickaxeAbilityData? { val lore = itemStack.loreAccordingToNbt - if (!lore.any { it.unformattedString.contains("Breaking Power") == true }) + if (!lore.any { it.unformattedString.contains("Breaking Power") }) return null val cooldown = lore.firstNotNullOfOrNull { cooldownPattern.useMatch(it.unformattedString) { -- cgit