diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt index 3dd1ef79..e7acda28 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/EcoSpigotPlugin.kt @@ -62,7 +62,7 @@ import com.willfp.eco.internal.spigot.data.PlayerBlockListener import com.willfp.eco.internal.spigot.data.ProfileHandler import com.willfp.eco.internal.spigot.data.storage.ProfileSaver import com.willfp.eco.internal.spigot.drops.CollatedRunnable -import com.willfp.eco.internal.spigot.eventlisteners.EntityDeathByEntityListeners +import com.willfp.eco.internal.spigot.eventlisteners.EntityDeathByEntityListener import com.willfp.eco.internal.spigot.eventlisteners.NaturalExpGainListenersPaper import com.willfp.eco.internal.spigot.eventlisteners.NaturalExpGainListenersSpigot import com.willfp.eco.internal.spigot.eventlisteners.PlayerJumpListenersPaper @@ -389,7 +389,7 @@ abstract class EcoSpigotPlugin : EcoPlugin() { override fun loadListeners(): List { val listeners = mutableListOf( ArmorListener(), - EntityDeathByEntityListeners(this), + EntityDeathByEntityListener, CraftingRecipeListener(), StackedRecipeListener(this), GUIListener(this), diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/eventlisteners/EntityDeathByEntityBuilder.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/eventlisteners/EntityDeathByEntityBuilder.kt deleted file mode 100644 index 7d564025..00000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/eventlisteners/EntityDeathByEntityBuilder.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.willfp.eco.internal.spigot.eventlisteners - -import com.willfp.eco.core.events.EntityDeathByEntityEvent -import org.bukkit.Bukkit -import org.bukkit.entity.Entity -import org.bukkit.entity.LivingEntity -import org.bukkit.event.entity.EntityDeathEvent -import org.bukkit.inventory.ItemStack - -internal class EntityDeathByEntityBuilder { - var victim: LivingEntity? = null - var damager: Entity? = null - var deathEvent: EntityDeathEvent? = null - var drops: List? = null - var xp = 0 - - fun push() { - val event = EntityDeathByEntityEvent(victim!!, damager!!, drops!!, xp, deathEvent!!) - Bukkit.getPluginManager().callEvent(event) - } -} \ No newline at end of file diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/eventlisteners/EntityDeathByEntityListener.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/eventlisteners/EntityDeathByEntityListener.kt new file mode 100644 index 00000000..0d628999 --- /dev/null +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/eventlisteners/EntityDeathByEntityListener.kt @@ -0,0 +1,27 @@ +package com.willfp.eco.internal.spigot.eventlisteners + +import com.willfp.eco.core.events.EntityDeathByEntityEvent +import org.bukkit.Bukkit +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.Listener +import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.event.entity.EntityDeathEvent + +object EntityDeathByEntityListener: Listener { + @EventHandler(priority = EventPriority.HIGH) + fun onEntityDeath(event: EntityDeathEvent) { + val damageEvent = event.entity.lastDamageCause as? EntityDamageByEntityEvent ?: return + val killer = damageEvent.damager + + Bukkit.getPluginManager().callEvent( + EntityDeathByEntityEvent( + event.entity, + killer, + event.drops, + event.droppedExp, + event + ) + ) + } +} diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/eventlisteners/EntityDeathByEntityListeners.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/eventlisteners/EntityDeathByEntityListeners.kt deleted file mode 100644 index a1e9b6bc..00000000 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/eco/internal/spigot/eventlisteners/EntityDeathByEntityListeners.kt +++ /dev/null @@ -1,64 +0,0 @@ -package com.willfp.eco.internal.spigot.eventlisteners - -import com.willfp.eco.core.EcoPlugin -import org.bukkit.entity.LivingEntity -import org.bukkit.event.EventHandler -import org.bukkit.event.EventPriority -import org.bukkit.event.Listener -import org.bukkit.event.entity.EntityDamageByEntityEvent -import org.bukkit.event.entity.EntityDeathEvent - -class EntityDeathByEntityListeners( - private val plugin: EcoPlugin -) : Listener { - private val events = mutableSetOf() - - @EventHandler(priority = EventPriority.HIGH) - fun onEntityDamage(event: EntityDamageByEntityEvent) { - if ((event.entity !is LivingEntity)) { - return - } - - val victim = event.entity as LivingEntity - - if (victim.health > event.finalDamage) { - return - } - - val builtEvent = EntityDeathByEntityBuilder() - builtEvent.victim = victim - builtEvent.damager = event.damager - - events += builtEvent - - this.plugin.scheduler.runLater(5) { // Fixes conflicts with WildStacker - events.remove(builtEvent) - } - } - - @EventHandler(priority = EventPriority.HIGH) - fun onEntityDeath(event: EntityDeathEvent) { - val victim = event.entity - val drops = event.drops - val xp = event.droppedExp - - var builtEvent: EntityDeathByEntityBuilder? = null - - for (builder in events) { - if (builder.victim == victim) { - builtEvent = builder - } - } - - if (builtEvent == null) { - return - } - - events.remove(builtEvent) - builtEvent.drops = drops - builtEvent.xp = xp - builtEvent.deathEvent = event - - builtEvent.push() - } -}