aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-10-07 15:08:18 +0200
committerLinnea Gräf <nea@nea.moe>2024-10-07 15:08:18 +0200
commitdaa63bd914a2f6c5e9b668abb8474884685ee818 (patch)
treeaf0d6394023d602c92acec109b5cb405c99d38f8 /src/main/kotlin
parenta8d5fed7d2994f86affb46774a463bb063a36c2b (diff)
downloadFirmament-daa63bd914a2f6c5e9b668abb8474884685ee818.tar.gz
Firmament-daa63bd914a2f6c5e9b668abb8474884685ee818.tar.bz2
Firmament-daa63bd914a2f6c5e9b668abb8474884685ee818.zip
Fix drill ability cooldown resetting on world swap
Diffstat (limited to 'src/main/kotlin')
-rw-r--r--src/main/kotlin/events/ProfileSwitchEvent.kt7
-rw-r--r--src/main/kotlin/features/mining/PickaxeAbility.kt24
-rw-r--r--src/main/kotlin/util/SBData.kt5
-rw-r--r--src/main/kotlin/util/SkyBlockIsland.kt1
4 files changed, 29 insertions, 8 deletions
diff --git a/src/main/kotlin/events/ProfileSwitchEvent.kt b/src/main/kotlin/events/ProfileSwitchEvent.kt
new file mode 100644
index 0000000..683b7dd
--- /dev/null
+++ b/src/main/kotlin/events/ProfileSwitchEvent.kt
@@ -0,0 +1,7 @@
+package moe.nea.firmament.events
+
+import java.util.UUID
+
+data class ProfileSwitchEvent(val oldProfile: UUID?, val newProfile: UUID?) : FirmamentEvent() {
+ companion object : FirmamentEventBus<ProfileSwitchEvent>()
+}
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 (?<name>.*) Pickaxe Ability!")
val fuelPattern = Pattern.compile("Fuel: .*/(?<maxFuel>$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) {
diff --git a/src/main/kotlin/util/SBData.kt b/src/main/kotlin/util/SBData.kt
index 353bb06..0b2c404 100644
--- a/src/main/kotlin/util/SBData.kt
+++ b/src/main/kotlin/util/SBData.kt
@@ -7,6 +7,7 @@ import kotlin.jvm.optionals.getOrNull
import kotlin.time.Duration.Companion.seconds
import moe.nea.firmament.events.AllowChatEvent
import moe.nea.firmament.events.ProcessChatEvent
+import moe.nea.firmament.events.ProfileSwitchEvent
import moe.nea.firmament.events.ServerConnectedEvent
import moe.nea.firmament.events.SkyblockServerUpdateEvent
import moe.nea.firmament.events.WorldReadyEvent
@@ -54,6 +55,7 @@ object SBData {
ProcessChatEvent.subscribe(receivesCancelled = true, "SBData:loadProfile") { event ->
val profileMatch = profileRegex.matchEntire(event.unformattedString)
if (profileMatch != null) {
+ val oldProfile = profileId
try {
profileId = UUID.fromString(profileMatch.groupValues[1])
hasReceivedProfile = true
@@ -61,6 +63,9 @@ object SBData {
profileId = null
e.printStackTrace()
}
+ if (oldProfile != profileId) {
+ ProfileSwitchEvent.publish(ProfileSwitchEvent(oldProfile, profileId))
+ }
}
}
}
diff --git a/src/main/kotlin/util/SkyBlockIsland.kt b/src/main/kotlin/util/SkyBlockIsland.kt
index bd0567d..c42a55c 100644
--- a/src/main/kotlin/util/SkyBlockIsland.kt
+++ b/src/main/kotlin/util/SkyBlockIsland.kt
@@ -34,6 +34,7 @@ private constructor(
val HUB = forMode("hub")
val PRIVATE_ISLAND = forMode("dynamic")
val RIFT = forMode("rift")
+ val MINESHAFT = forMode("mineshaft")
}
val userFriendlyName