Reworked EntityDamageByEntityEvent, finally
This commit is contained in:
@@ -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.ProfileHandler
|
||||||
import com.willfp.eco.internal.spigot.data.storage.ProfileSaver
|
import com.willfp.eco.internal.spigot.data.storage.ProfileSaver
|
||||||
import com.willfp.eco.internal.spigot.drops.CollatedRunnable
|
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.NaturalExpGainListenersPaper
|
||||||
import com.willfp.eco.internal.spigot.eventlisteners.NaturalExpGainListenersSpigot
|
import com.willfp.eco.internal.spigot.eventlisteners.NaturalExpGainListenersSpigot
|
||||||
import com.willfp.eco.internal.spigot.eventlisteners.PlayerJumpListenersPaper
|
import com.willfp.eco.internal.spigot.eventlisteners.PlayerJumpListenersPaper
|
||||||
@@ -389,7 +389,7 @@ abstract class EcoSpigotPlugin : EcoPlugin() {
|
|||||||
override fun loadListeners(): List<Listener> {
|
override fun loadListeners(): List<Listener> {
|
||||||
val listeners = mutableListOf(
|
val listeners = mutableListOf(
|
||||||
ArmorListener(),
|
ArmorListener(),
|
||||||
EntityDeathByEntityListeners(this),
|
EntityDeathByEntityListener,
|
||||||
CraftingRecipeListener(),
|
CraftingRecipeListener(),
|
||||||
StackedRecipeListener(this),
|
StackedRecipeListener(this),
|
||||||
GUIListener(this),
|
GUIListener(this),
|
||||||
|
|||||||
@@ -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<ItemStack>? = null
|
|
||||||
var xp = 0
|
|
||||||
|
|
||||||
fun push() {
|
|
||||||
val event = EntityDeathByEntityEvent(victim!!, damager!!, drops!!, xp, deathEvent!!)
|
|
||||||
Bukkit.getPluginManager().callEvent(event)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<EntityDeathByEntityBuilder>()
|
|
||||||
|
|
||||||
@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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user