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/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)