aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/features/mining/PickaxeAbility.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-09-06 01:30:45 +0200
committerLinnea Gräf <nea@nea.moe>2025-09-06 01:30:45 +0200
commit005ef14949aacfc7a7af7a08bb67282f663b38ec (patch)
treee7365cefb36d7defa7cc9381adcef2f62503a5bb /src/main/kotlin/features/mining/PickaxeAbility.kt
parentff358c56d926396d7dbab7a83e29a9f150a23a07 (diff)
downloadFirmament-005ef14949aacfc7a7af7a08bb67282f663b38ec.tar.gz
Firmament-005ef14949aacfc7a7af7a08bb67282f663b38ec.tar.bz2
Firmament-005ef14949aacfc7a7af7a08bb67282f663b38ec.zip
feat: Allow showing pickaxe ability timer on shovels
Fixes https://github.com/nea89o/Firmament/issues/248
Diffstat (limited to 'src/main/kotlin/features/mining/PickaxeAbility.kt')
-rw-r--r--src/main/kotlin/features/mining/PickaxeAbility.kt43
1 files changed, 35 insertions, 8 deletions
diff --git a/src/main/kotlin/features/mining/PickaxeAbility.kt b/src/main/kotlin/features/mining/PickaxeAbility.kt
index df683de..de50217 100644
--- a/src/main/kotlin/features/mining/PickaxeAbility.kt
+++ b/src/main/kotlin/features/mining/PickaxeAbility.kt
@@ -47,10 +47,25 @@ object PickaxeAbility : FirmamentFeature {
override val identifier: String
get() = "pickaxe-info"
+ enum class ShowOnTools(val label: String, val items: Set<ItemType>) : StringIdentifiable {
+ ALL("all", ItemType.DRILL, ItemType.PICKAXE, ItemType.SHOVEL, ItemType.AXE),
+ PICKAXES_AND_DRILLS("pick-and-drill", ItemType.PICKAXE, ItemType.DRILL),
+ DRILLS("drills", ItemType.DRILL),
+ ;
+
+ override fun asString(): String? {
+ return label
+ }
+
+ constructor(label: String, vararg items: ItemType) : this(label, items.toSet())
+
+ fun matches(type: ItemType) = items.contains(type)
+ }
object TConfig : ManagedConfig(identifier, Category.MINING) {
val cooldownEnabled by toggle("ability-cooldown") { false }
val disableInDungeons by toggle("disable-in-dungeons") { true }
+ val showOnTools by choice("show-on-tools") { ShowOnTools.PICKAXES_AND_DRILLS }
val cooldownScale by integer("ability-scale", 16, 64) { 16 }
val cooldownReadyToast by toggle("ability-cooldown-toast") { false }
val drillFuelBar by toggle("fuel-bar") { true }
@@ -114,9 +129,12 @@ object PickaxeAbility : FirmamentFeature {
BlockPickaxeAbility.ONLY_DESTRUCTIVE -> ability.any { it.name in destructiveAbilities }
}
if (shouldBlock) {
- MC.sendChat(tr("firmament.pickaxe.blocked",
- "Firmament blocked a pickaxe ability from being used on a private island.")
- .red() // TODO: .clickCommand("firm confignavigate ${TConfig.identifier} block-on-dynamic")
+ MC.sendChat(
+ tr(
+ "firmament.pickaxe.blocked",
+ "Firmament blocked a pickaxe ability from being used on a private island."
+ )
+ .red() // TODO: .clickCommand("firm confignavigate ${TConfig.identifier} block-on-dynamic")
)
event.cancel()
}
@@ -179,7 +197,12 @@ object PickaxeAbility : FirmamentFeature {
if (!TConfig.cooldownReadyToast) return
val mc: MinecraftClient = MinecraftClient.getInstance()
mc.toastManager.add(
- SystemToast.create(mc, SystemToast.Type.NARRATOR_TOGGLE, tr("firmament.pickaxe.ability-ready","Pickaxe Cooldown"), tr("firmament.pickaxe.ability-ready.desc", "Pickaxe ability is ready!"))
+ SystemToast.create(
+ mc,
+ SystemToast.Type.NARRATOR_TOGGLE,
+ tr("firmament.pickaxe.ability-ready", "Pickaxe Cooldown"),
+ tr("firmament.pickaxe.ability-ready.desc", "Pickaxe ability is ready!")
+ )
)
}
}
@@ -225,11 +248,15 @@ object PickaxeAbility : FirmamentFeature {
if (!TConfig.cooldownEnabled) return
if (TConfig.disableInDungeons && DungeonUtil.isInDungeonIsland) return
if (!event.isRenderingCursor) return
- var ability = getCooldownFromLore(MC.player?.getStackInHand(Hand.MAIN_HAND) ?: return) ?: return
- defaultAbilityDurations[ability.name] = ability.cooldown
+ val stack = MC.player?.getStackInHand(Hand.MAIN_HAND) ?: return
+ if (!TConfig.showOnTools.matches(ItemType.fromItemStack(stack) ?: ItemType.NIL))
+ return
+ var ability = getCooldownFromLore(stack)?.also { ability ->
+ defaultAbilityDurations[ability.name] = ability.cooldown
+ }
val ao = abilityOverride
- if (ao != ability.name && ao != null) {
- ability = PickaxeAbilityData(ao, defaultAbilityDurations[ao] ?: 120.seconds)
+ if (ability == null || (ao != ability.name && ao != null)) {
+ ability = PickaxeAbilityData(ao ?: return, defaultAbilityDurations[ao] ?: 120.seconds)
}
event.context.matrices.pushMatrix()
event.context.matrices.translate(MC.window.scaledWidth / 2F, MC.window.scaledHeight / 2F)