diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/EcoMobsPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/EcoMobsPlugin.kt index 7593cb2..847b275 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/EcoMobsPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/EcoMobsPlugin.kt @@ -52,7 +52,8 @@ class EcoMobsPlugin : LibreforgePlugin() { VanillaCompatibilityHandlers(), DiscoverRecipeListener(this), SpawnEggHandler(this), - SpawnTotemHandler() + SpawnTotemHandler(), + topDamagerHandler ) } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/LivingMob.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/LivingMob.kt index 304a047..9c77382 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/LivingMob.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/LivingMob.kt @@ -27,7 +27,7 @@ interface LivingMob { /** * Kill the mob. */ - fun kill(player: Player?) + fun kill(player: Player?, removeTracking: Boolean = true) /** * Despawn the mob. diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/damage/TopDamagers.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/damage/TopDamagers.kt index 58e73fc..7672451 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/damage/TopDamagers.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/damage/TopDamagers.kt @@ -1,9 +1,11 @@ package com.willfp.ecomobs.mob.damage import com.willfp.eco.util.savedDisplayName +import com.willfp.eco.util.toNiceString import com.willfp.eco.util.tryAsPlayer import com.willfp.ecomobs.EcoMobsPlugin import com.willfp.libreforge.NamedValue +import com.willfp.libreforge.triggers.TriggerData import org.bukkit.Bukkit import org.bukkit.entity.Mob import org.bukkit.event.EventHandler @@ -49,10 +51,21 @@ class TopDamagerHandler( fun generatePlaceholders(mob: Mob): List { return mob.topDamagers - .mapIndexed { index, damager -> - NamedValue("top_damager_${index + 1}_name", Bukkit.getOfflinePlayer(damager.uuid).name ?: "Unknown") - NamedValue("top_damager_${index + 1}_display", Bukkit.getOfflinePlayer(damager.uuid).savedDisplayName) - NamedValue("top_damager_${index + 1}_damage", damager.damage.toString()) + .flatMapIndexed { index, damager -> + listOf( + NamedValue( + "top_damager_${index + 1}_name", + Bukkit.getOfflinePlayer(damager.uuid).name ?: "Unknown" + ), + NamedValue( + "top_damager_${index + 1}_display", + Bukkit.getOfflinePlayer(damager.uuid).savedDisplayName + ), + NamedValue( + "top_damager_${index + 1}_damage", + damager.damage.toNiceString() + ) + ) } } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/event/impl/MobEventKill.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/event/impl/MobEventKill.kt index 19ea603..424d7da 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/event/impl/MobEventKill.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/event/impl/MobEventKill.kt @@ -33,6 +33,12 @@ object MobEventKill : MobEvent("kill") { Bukkit.getPluginManager().callEvent(EcoMobKillEvent(living, player)) living.handleEvent(this, data.dispatch(player.toDispatcher())) - living.kill(player) + + // Tracking isn't removed here because it's removed in MobEventDeath, which is called after this one. + // Otherwise, player kills wouldn't fire the death event. + living.kill( + player, + removeTracking = false + ) } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/impl/LivingMobImpl.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/impl/LivingMobImpl.kt index c3105e4..f5575b4 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/impl/LivingMobImpl.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecomobs/mob/impl/LivingMobImpl.kt @@ -19,7 +19,7 @@ internal class LivingMobImpl( private val plugin: EcoMobsPlugin, override val mob: EcoMob, override val entity: Mob, - private val deathCallback: () -> Unit + private val trackingRemovalCallback: () -> Unit ) : LivingMob { private val ticker = plugin.runnableFactory.create { tick(tick) @@ -77,8 +77,8 @@ internal class LivingMobImpl( mob.handleEvent(event, trigger) } - override fun kill(player: Player?) { - handleRemove() + override fun kill(player: Player?, removeTracking: Boolean) { + handleRemove(removeTracking = removeTracking) mob.spawnDrops(entity.location, player) } @@ -92,9 +92,11 @@ internal class LivingMobImpl( ) } - private fun handleRemove() { + private fun handleRemove(removeTracking: Boolean = true) { ticker.cancel() - deathCallback() + if (removeTracking) { + trackingRemovalCallback() + } for (handler in this.tickHandlers) { handler.onRemove(this, tick) diff --git a/gradle.properties b/gradle.properties index fcd7bd3..4672f70 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ #libreforge-updater -#Sat Jan 06 09:20:57 GMT 2024 +#Thu Jan 04 17:25:24 GMT 2024 kotlin.code.style=official -libreforge-version=4.53.1 -version=10.0.0-b3 +libreforge-version=4.53.0 +version=10.0.0-b5