From 819ec8b8355f7400e8cf38a0a5b64c5f6dd0a2f8 Mon Sep 17 00:00:00 2001 From: inglettronald Date: Tue, 13 Jun 2023 23:49:28 -0500 Subject: some cooldown displays --- .../kotlin/dulkirmod/features/ImpactDisplay.kt | 52 ++++++++++++++++++++++ .../kotlin/dulkirmod/features/ReaperDisplay.kt | 52 ++++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 src/main/kotlin/dulkirmod/features/ImpactDisplay.kt create mode 100644 src/main/kotlin/dulkirmod/features/ReaperDisplay.kt (limited to 'src/main/kotlin/dulkirmod/features') diff --git a/src/main/kotlin/dulkirmod/features/ImpactDisplay.kt b/src/main/kotlin/dulkirmod/features/ImpactDisplay.kt new file mode 100644 index 0000000..e1d3f07 --- /dev/null +++ b/src/main/kotlin/dulkirmod/features/ImpactDisplay.kt @@ -0,0 +1,52 @@ +package dulkirmod.features + +import net.minecraft.item.ItemStack +import net.minecraft.nbt.NBTTagCompound +import net.minecraftforge.client.event.sound.PlaySoundEvent +import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable +import kotlin.math.min + +object ImpactDisplay { + + var lastImpact = 0L + + fun shouldDisplay(stack: ItemStack, cir: CallbackInfoReturnable) { + if (!isBlade(stack)) return + cir.returnValue = System.currentTimeMillis() - lastImpact < 5000 + } + + fun calcDurability(stack: ItemStack, cir: CallbackInfoReturnable) { + if (!isBlade(stack)) return + val time = (System.currentTimeMillis() - lastImpact) / 5000.0 + cir.returnValue = min(1.0, 1.0 - time) + } + + @SubscribeEvent + fun onSound(event: PlaySoundEvent) { + if (event.name != "mob.zombie.remedy") return + if (event.sound.pitch != 0.6984127f) return + if (event.sound.volume != 1.0f) return + lastImpact = System.currentTimeMillis() + } + + @SubscribeEvent + fun onWorldLoad(event: WorldEvent.Load) { + lastImpact = 0L + } + + private fun isBlade(stack: ItemStack): Boolean { + if (stack.hasTagCompound()) { + val tag: NBTTagCompound = stack.tagCompound + if (tag.hasKey("ExtraAttributes", 10) && tag.hasKey("display", 10)) { + val ea: NBTTagCompound = tag.getCompoundTag("ExtraAttributes") + if (ea.hasKey("id", 8)) { + val id = ea.getString("id") + return id matches "(HYPERION|ASTRAEA|SCYLLA|VALKYRIE)".toRegex() + } + } + } + return false + } +} \ No newline at end of file diff --git a/src/main/kotlin/dulkirmod/features/ReaperDisplay.kt b/src/main/kotlin/dulkirmod/features/ReaperDisplay.kt new file mode 100644 index 0000000..3fd743d --- /dev/null +++ b/src/main/kotlin/dulkirmod/features/ReaperDisplay.kt @@ -0,0 +1,52 @@ +package dulkirmod.features + +import net.minecraft.item.ItemStack +import net.minecraft.nbt.NBTTagCompound +import net.minecraftforge.client.event.sound.PlaySoundEvent +import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable +import kotlin.math.min + +object ReaperDisplay { + + var lastReaperUsage = 0L + + fun shouldDisplay(stack: ItemStack, cir: CallbackInfoReturnable) { + if (!isReaper(stack)) return + cir.returnValue = System.currentTimeMillis() - lastReaperUsage < 25000 + } + + fun calcDurability(stack: ItemStack, cir: CallbackInfoReturnable) { + if (!isReaper(stack)) return + val time = (System.currentTimeMillis() - lastReaperUsage) / 25000.0 + cir.returnValue = min(1.0, 1.0 - time) + } + + @SubscribeEvent + fun onSound(event: PlaySoundEvent) { + if (event.name != "mob.zombie.remedy") return + if (event.sound.pitch != 1.0f) return + if (event.sound.volume != .5f) return + lastReaperUsage = System.currentTimeMillis() + } + + @SubscribeEvent + fun onWorldLoad(event: WorldEvent) { + lastReaperUsage = 0L + } + + private fun isReaper(stack: ItemStack): Boolean { + if (stack.hasTagCompound()) { + val tag: NBTTagCompound = stack.tagCompound + if (tag.hasKey("ExtraAttributes", 10) && tag.hasKey("display", 10)) { + val ea: NBTTagCompound = tag.getCompoundTag("ExtraAttributes") + if (ea.hasKey("id", 8)) { + val id = ea.getString("id") + return id matches "(REAPER_CHESTPLATE)|(REAPER_LEGGINGS)|(REAPER_BOOTS)".toRegex() + } + } + } + return false + } +} \ No newline at end of file -- cgit