9
0
mirror of https://github.com/Auxilor/EcoMobs.git synced 2025-12-19 23:19:17 +00:00

Fixed 'death' event, fixed top damagers

This commit is contained in:
Auxilor
2024-01-01 17:59:02 +00:00
parent f6a40d84f7
commit 8cca1f7994
4 changed files with 17 additions and 8 deletions

View File

@@ -52,7 +52,8 @@ class EcoMobsPlugin : LibreforgePlugin() {
VanillaCompatibilityHandlers(), VanillaCompatibilityHandlers(),
DiscoverRecipeListener(this), DiscoverRecipeListener(this),
SpawnEggHandler(this), SpawnEggHandler(this),
SpawnTotemHandler() SpawnTotemHandler(),
topDamagerHandler
) )
} }

View File

@@ -27,7 +27,7 @@ interface LivingMob {
/** /**
* Kill the mob. * Kill the mob.
*/ */
fun kill(player: Player?) fun kill(player: Player?, removeTracking: Boolean = true)
/** /**
* Despawn the mob. * Despawn the mob.

View File

@@ -33,6 +33,12 @@ object MobEventKill : MobEvent("kill") {
Bukkit.getPluginManager().callEvent(EcoMobKillEvent(living, player)) Bukkit.getPluginManager().callEvent(EcoMobKillEvent(living, player))
living.handleEvent(this, data.dispatch(player.toDispatcher())) 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
)
} }
} }

View File

@@ -19,7 +19,7 @@ internal class LivingMobImpl(
private val plugin: EcoMobsPlugin, private val plugin: EcoMobsPlugin,
override val mob: EcoMob, override val mob: EcoMob,
override val entity: Mob, override val entity: Mob,
private val deathCallback: () -> Unit private val trackingRemovalCallback: () -> Unit
) : LivingMob { ) : LivingMob {
private val ticker = plugin.runnableFactory.create { private val ticker = plugin.runnableFactory.create {
tick(tick) tick(tick)
@@ -77,8 +77,8 @@ internal class LivingMobImpl(
mob.handleEvent(event, trigger) mob.handleEvent(event, trigger)
} }
override fun kill(player: Player?) { override fun kill(player: Player?, removeTracking: Boolean) {
handleRemove() handleRemove(removeTracking = removeTracking)
mob.spawnDrops(entity.location, player) mob.spawnDrops(entity.location, player)
} }
@@ -92,9 +92,11 @@ internal class LivingMobImpl(
) )
} }
private fun handleRemove() { private fun handleRemove(removeTracking: Boolean = true) {
ticker.cancel() ticker.cancel()
deathCallback() if (removeTracking) {
trackingRemovalCallback()
}
for (handler in this.tickHandlers) { for (handler in this.tickHandlers) {
handler.onRemove(this, tick) handler.onRemove(this, tick)