9
0
mirror of https://github.com/Auxilor/EcoMobs.git synced 2026-01-04 15:41:33 +00:00

Added mob placeholders to chains

This commit is contained in:
Auxilor
2023-11-12 14:03:07 +00:00
parent e0db0c1dc0
commit c17916d548
12 changed files with 50 additions and 19 deletions

View File

@@ -1,5 +1,7 @@
package com.willfp.ecomobs.mob
import com.willfp.ecomobs.mob.event.MobEvent
import com.willfp.libreforge.triggers.DispatchedTrigger
import org.bukkit.entity.Mob
import org.bukkit.entity.Player
@@ -17,6 +19,11 @@ interface LivingMob {
*/
val ticksLeft: Int
/**
* Handle an event.
*/
fun handleEvent(event: MobEvent, trigger: DispatchedTrigger)
/**
* Kill the mob.
*/

View File

@@ -14,6 +14,7 @@ object MobEventDamagePlayer : MobEvent("damage_player") {
val player = event.entity as? Player ?: return
val bukkitMob = event.damager as? Mob ?: return
val ecoMob = bukkitMob.ecoMob ?: return
val living = ecoMob.getLivingMob(bukkitMob) ?: return
val data = TriggerData(
player = player,
@@ -22,6 +23,6 @@ object MobEventDamagePlayer : MobEvent("damage_player") {
event = event
)
ecoMob.handleEvent(this, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
}
}

View File

@@ -31,7 +31,7 @@ object MobEventDeath : MobEvent("death") {
Bukkit.getPluginManager().callEvent(EcoMobDeathEvent(living))
ecoMob.handleEvent(this, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
living.kill(null)
}
}

View File

@@ -8,16 +8,16 @@ import org.bukkit.event.EventHandler
object MobEventDespawn: MobEvent("despawn") {
@EventHandler
fun handle(event: EcoMobDespawnEvent) {
val ecoMob = event.mob
val living = event.mob
val data = TriggerData(
victim = ecoMob.entity,
location = ecoMob.entity.location,
victim = living.entity,
location = living.entity.location,
event = event
)
val player = getArbitraryPlayer() ?: return
ecoMob.mob.handleEvent(this, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
}
}

View File

@@ -12,6 +12,7 @@ object MobEventInteract: MobEvent("interact") {
fun handle(event: PlayerInteractEntityEvent) {
val bukkitMob = event.rightClicked as? Mob ?: return
val ecoMob = bukkitMob.ecoMob ?: return
val living = ecoMob.getLivingMob(bukkitMob) ?: return
val player = event.player
val data = TriggerData(
@@ -21,6 +22,6 @@ object MobEventInteract: MobEvent("interact") {
event = event
)
ecoMob.handleEvent(this, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
}
}

View File

@@ -31,7 +31,7 @@ object MobEventKill : MobEvent("kill") {
Bukkit.getPluginManager().callEvent(EcoMobKillEvent(living, player))
ecoMob.handleEvent(this, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
living.kill(player)
}
}

View File

@@ -14,6 +14,7 @@ object MobEventKillPlayer : MobEvent("kill_player") {
val player = event.victim as? Player ?: return
val bukkitMob = event.killer as? Mob ?: return
val ecoMob = bukkitMob.ecoMob ?: return
val living = ecoMob.getLivingMob(bukkitMob) ?: return
val data = TriggerData(
player = player,
@@ -22,6 +23,6 @@ object MobEventKillPlayer : MobEvent("kill_player") {
event = event
)
ecoMob.handleEvent(this, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
}
}

View File

@@ -13,6 +13,7 @@ object MobEventMeleeAttack : MobEvent("melee_attack") {
fun handle(event: EntityDamageByEntityEvent) {
val bukkitMob = event.entity as? Mob ?: return
val ecoMob = bukkitMob.ecoMob ?: return
val living = ecoMob.getLivingMob(bukkitMob) ?: return
val player = event.damager as? Player ?: return
val data = TriggerData(
@@ -22,7 +23,7 @@ object MobEventMeleeAttack : MobEvent("melee_attack") {
event = event
)
ecoMob.handleEvent(this, data.dispatch(player))
ecoMob.handleEvent(MobEventAnyAttack, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
living.handleEvent(MobEventAnyAttack, data.dispatch(player))
}
}

View File

@@ -5,6 +5,7 @@ import com.willfp.ecomobs.mob.event.MobEvent
import com.willfp.ecomobs.mob.impl.ecoMob
import com.willfp.libreforge.triggers.TriggerData
import org.bukkit.entity.Mob
import org.bukkit.entity.Player
import org.bukkit.event.EventHandler
import org.bukkit.event.entity.EntityDamageByEntityEvent
@@ -13,6 +14,13 @@ object MobEventRangedAttack : MobEvent("ranged_attack") {
fun handle(event: EntityDamageByEntityEvent) {
val bukkitMob = event.entity as? Mob ?: return
val ecoMob = bukkitMob.ecoMob ?: return
val living = ecoMob.getLivingMob(bukkitMob) ?: return
// If the damager is a player, it's a melee attack
if (event.damager is Player) {
return
}
val player = event.damager.tryAsPlayer() ?: return
val data = TriggerData(
@@ -22,7 +30,7 @@ object MobEventRangedAttack : MobEvent("ranged_attack") {
event = event
)
ecoMob.handleEvent(this, data.dispatch(player))
ecoMob.handleEvent(MobEventAnyAttack, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
living.handleEvent(MobEventAnyAttack, data.dispatch(player))
}
}

View File

@@ -3,22 +3,21 @@ package com.willfp.ecomobs.mob.event.impl
import com.willfp.ecomobs.event.EcoMobSpawnEvent
import com.willfp.ecomobs.mob.event.MobEvent
import com.willfp.libreforge.triggers.TriggerData
import org.bukkit.Bukkit
import org.bukkit.event.EventHandler
object MobEventSpawn: MobEvent("spawn") {
@EventHandler
fun handle(event: EcoMobSpawnEvent) {
val mob = event.mob
val living = event.mob
val data = TriggerData(
victim = mob.entity,
location = mob.entity.location,
victim = living.entity,
location = living.entity.location,
event = event
)
val player = getArbitraryPlayer() ?: return
mob.mob.handleEvent(this, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
}
}

View File

@@ -15,6 +15,7 @@ object MobEventTakeDamage : MobEvent("take_damage") {
fun handle(event: EntityDamageEvent) {
val bukkitMob = event.entity as? Mob ?: return
val ecoMob = bukkitMob.ecoMob ?: return
val living = ecoMob.getLivingMob(bukkitMob) ?: return
val data = TriggerData(
victim = bukkitMob,
@@ -24,6 +25,6 @@ object MobEventTakeDamage : MobEvent("take_damage") {
val player = Bukkit.getOnlinePlayers().firstOrNull() ?: return
ecoMob.handleEvent(this, data.dispatch(player))
living.handleEvent(this, data.dispatch(player))
}
}

View File

@@ -5,8 +5,12 @@ import com.willfp.ecomobs.EcoMobsPlugin
import com.willfp.ecomobs.event.EcoMobDespawnEvent
import com.willfp.ecomobs.mob.EcoMob
import com.willfp.ecomobs.mob.LivingMob
import com.willfp.ecomobs.mob.event.MobEvent
import com.willfp.ecomobs.mob.placeholder.MobPlaceholders
import com.willfp.ecomobs.mob.placeholder.formatMobPlaceholders
import com.willfp.ecomobs.tick.TickHandler
import com.willfp.libreforge.NamedValue
import com.willfp.libreforge.triggers.DispatchedTrigger
import org.bukkit.Bukkit
import org.bukkit.entity.Mob
import org.bukkit.entity.Player
@@ -61,6 +65,14 @@ internal class LivingMobImpl(
ticker.runTaskTimer(1, 1)
}
override fun handleEvent(event: MobEvent, trigger: DispatchedTrigger) {
for (placeholder in MobPlaceholders.values()) {
trigger.addPlaceholder(NamedValue(placeholder.id, placeholder.getValue(this)))
}
mob.handleEvent(event, trigger)
}
override fun kill(player: Player?) {
remove()