diff options
Diffstat (limited to 'src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt')
-rw-r--r-- | src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt b/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt new file mode 100644 index 0000000..86a3863 --- /dev/null +++ b/src/main/kotlin/com/dulkirfabric/features/CooldownDisplays.kt @@ -0,0 +1,61 @@ +package com.dulkirfabric.features + +import com.dulkirfabric.events.PlaySoundEvent +import com.dulkirfabric.events.WorldLoadEvent +import com.dulkirfabric.util.SoundInfo +import com.dulkirfabric.util.TrackedCooldown +import meteordevelopment.orbit.EventHandler +import net.minecraft.item.ItemStack +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable + +object CooldownDisplays { + private val trackedCooldowns: Map<SoundInfo, TrackedCooldown> = mapOf( + Pair( + SoundInfo("mob.zombie.remedy", 1f, .5f), + TrackedCooldown("(REAPER_CHESTPLATE)|(REAPER_LEGGINGS)|(REAPER_BOOTS)".toRegex(), 25000, 0) + ), + Pair( + SoundInfo("mob.zombie.remedy", 0.6984127f, 1f), + TrackedCooldown("(HYPERION|ASTRAEA|SCYLLA|VALKYRIE)".toRegex(), 5000, 0) + ) + ) + + fun shouldDisplay(stack: ItemStack, cir: CallbackInfoReturnable<Boolean>) { + val cooldown = fetchCooldownItem(stack) ?: return + cir.returnValue = true + // cir.returnValue = System.currentTimeMillis() - cooldown.lastUsage < cooldown.cooldownDuration + } + + fun calcDurability(stack: ItemStack, cir: CallbackInfoReturnable<Int>) { + val cooldown = fetchCooldownItem(stack) ?: return + cir.returnValue = 300 + } + @EventHandler + fun onSound(event: PlaySoundEvent) { + val path = event.sound.id.path + val pitch = event.sound.pitch + val volume = event.sound.volume + + // Figure out if we have a match in trackedCooldowns + val matchResult = trackedCooldowns[SoundInfo(path, pitch, volume)] ?: return + matchResult.lastUsage = System.currentTimeMillis() + } + + @EventHandler + fun onWorldLoad(event: WorldLoadEvent) { + trackedCooldowns.forEach { + it.value.lastUsage = 0 + } + } + + private fun fetchCooldownItem(stack: ItemStack): TrackedCooldown? { + val tag = stack.nbt ?: return null + val id = tag.getCompound("ExtraAttributes").get("id") ?: return null + val idStr = id.toString().trim('"') + trackedCooldowns.forEach { + if (idStr matches it.value.itemID) + return it.value + } + return null + } +}
\ No newline at end of file |