mirror of
https://github.com/Auxilor/EcoMobs.git
synced 2025-12-20 07:29:21 +00:00
Fixed 'death' event, fixed top damagers
This commit is contained in:
@@ -52,7 +52,8 @@ class EcoMobsPlugin : LibreforgePlugin() {
|
|||||||
VanillaCompatibilityHandlers(),
|
VanillaCompatibilityHandlers(),
|
||||||
DiscoverRecipeListener(this),
|
DiscoverRecipeListener(this),
|
||||||
SpawnEggHandler(this),
|
SpawnEggHandler(this),
|
||||||
SpawnTotemHandler()
|
SpawnTotemHandler(),
|
||||||
|
topDamagerHandler
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user