diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.java b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.java index 7c51789..783400e 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.java +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.java @@ -43,238 +43,6 @@ public class WatcherTriggers extends PluginDependent implements Liste super(plugin); } - /** - * Called when an entity shoots another entity with an arrow. - * - * @param event The event to listen for. - */ - - /** - * Called when an entity damages another entity with a trident throw. - * - * @param event The event to listen for. - */ - @EventHandler(ignoreCancelled = true) - public void onTridentDamage(@NotNull final EntityDamageByEntityEvent event) { - if (McmmoManager.isFake(event)) { - return; - } - - if (!(event.getDamager() instanceof Trident trident)) { - return; - } - - if (!(((Trident) event.getDamager()).getShooter() instanceof LivingEntity attacker)) { - return; - } - - if (((Trident) event.getDamager()).getShooter() == null) { - return; - } - - if (!(event.getEntity() instanceof LivingEntity victim)) { - return; - } - - if (event.isCancelled()) { - return; - } - - ItemStack item = trident.getItem(); - - if (attacker instanceof Player && !AntigriefManager.canInjure((Player) attacker, victim)) { - return; - } - - Reforge reforge = ReforgeUtils.getReforge(item); - - if (reforge == null) { - return; - } - - for (Map.Entry entry : reforge.getEffects().entrySet()) { - if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { - continue; - } - entry.getKey().onTridentDamage(attacker, victim, trident, event, entry.getValue()); - entry.getKey().onAnyDamage(attacker, victim, event, entry.getValue()); - } - } - - /** - * Called when a player jumps. - * - * @param event The event to listen for. - */ - @EventHandler(ignoreCancelled = true) - public void onJump(@NotNull final PlayerJumpEvent event) { - if (McmmoManager.isFake(event)) { - return; - } - - Player player = event.getPlayer(); - - for (ItemStack itemStack : player.getInventory().getArmorContents()) { - if (itemStack == null) { - continue; - } - - Reforge reforge = ReforgeUtils.getReforge(itemStack); - - if (reforge == null) { - continue; - } - - for (Map.Entry entry : reforge.getEffects().entrySet()) { - if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { - continue; - } - entry.getKey().onJump(player, event, entry.getValue()); - } - } - } - - /** - * Called when an entity attacks another entity with a melee attack. - * - * @param event The event to listen for. - */ - @EventHandler(ignoreCancelled = true) - public void onMeleeAttack(@NotNull final EntityDamageByEntityEvent event) { - if (McmmoManager.isFake(event)) { - return; - } - - if (!(event.getDamager() instanceof LivingEntity attacker)) { - return; - } - - if (!(event.getEntity() instanceof LivingEntity victim)) { - return; - } - - if (event.isCancelled()) { - return; - } - - if (event.getCause() == EntityDamageEvent.DamageCause.THORNS) { - return; - } - - if (attacker instanceof Player && !AntigriefManager.canInjure((Player) attacker, victim)) { - return; - } - - EntityEquipment entityEquipment = attacker.getEquipment(); - - if (entityEquipment == null) { - return; - } - - Reforge reforge = ReforgeUtils.getReforge(entityEquipment.getItemInMainHand()); - - if (reforge == null) { - return; - } - - for (Map.Entry entry : reforge.getEffects().entrySet()) { - if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { - continue; - } - entry.getKey().onMeleeAttack(attacker, victim, event, entry.getValue()); - entry.getKey().onAnyDamage(attacker, victim, event, entry.getValue()); - } - } - - /** - * Called when an entity kills another entity. - * - * @param event The event to listen for. - */ - @EventHandler(ignoreCancelled = true) - public void onKill(@NotNull final EntityDeathByEntityEvent event) { - if (McmmoManager.isFake(event)) { - return; - } - - LivingEntity killer = null; - Entity uncast = event.getKiller(); - if (uncast instanceof LivingEntity) { - killer = (LivingEntity) uncast; - } else if (uncast instanceof Projectile projectile) { - if (projectile.getShooter() instanceof LivingEntity) { - killer = (Player) projectile.getShooter(); - } - } - - if (killer == null) { - return; - } - - LivingEntity victim = event.getVictim(); - - if (killer instanceof Player && !AntigriefManager.canInjure((Player) killer, victim)) { - return; - } - - EntityEquipment entityEquipment = killer.getEquipment(); - - if (entityEquipment == null) { - return; - } - - Reforge reforge = ReforgeUtils.getReforge(entityEquipment.getItemInMainHand()); - - if (reforge == null) { - return; - } - - for (Map.Entry entry : reforge.getEffects().entrySet()) { - if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { - continue; - } - entry.getKey().onKill(killer, victim, event, entry.getValue()); - } - } - - /** - * Called when an entity shoots a bow. - * - * @param event The event to listen for. - */ - @EventHandler(ignoreCancelled = true) - public void onBowShoot(@NotNull final EntityShootBowEvent event) { - if (McmmoManager.isFake(event)) { - return; - } - - if (event.getProjectile().getType() != EntityType.ARROW) { - return; - } - - LivingEntity shooter = event.getEntity(); - Arrow arrow = (Arrow) event.getProjectile(); - - ItemStack bow = ArrowUtils.getBow(arrow); - - if (bow == null) { - return; - } - - Reforge reforge = ReforgeUtils.getReforge(bow); - - if (reforge == null) { - return; - } - - for (Map.Entry entry : reforge.getEffects().entrySet()) { - if (NumberUtils.randFloat(0, 100) > (entry.getValue().has("chance") ? entry.getValue().getDouble("chance") : 100)) { - continue; - } - entry.getKey().onBowShoot(shooter, arrow, event, entry.getValue()); - } - } - /** * Called when an entity launches a projectile. * diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt index 9975da7..64c7981 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/reforges/reforges/util/WatcherTriggers.kt @@ -1,17 +1,19 @@ package com.willfp.reforges.reforges.util import com.willfp.eco.core.EcoPlugin +import com.willfp.eco.core.events.EntityDeathByEntityEvent +import com.willfp.eco.core.events.PlayerJumpEvent import com.willfp.eco.core.integrations.antigrief.AntigriefManager import com.willfp.eco.core.integrations.mcmmo.McmmoManager import com.willfp.eco.util.ArrowUtils import com.willfp.eco.util.NumberUtils -import org.bukkit.entity.Arrow -import org.bukkit.entity.LivingEntity -import org.bukkit.entity.Player +import org.bukkit.entity.* import org.bukkit.event.EventHandler import org.bukkit.event.Listener import org.bukkit.event.block.BlockBreakEvent import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.event.entity.EntityDamageEvent +import org.bukkit.event.entity.EntityShootBowEvent class WatcherTriggers( private val plugin: EcoPlugin @@ -81,4 +83,173 @@ class WatcherTriggers( } } + @EventHandler(ignoreCancelled = true) + fun onTridentDamage(event: EntityDamageByEntityEvent) { + if (McmmoManager.isFake(event)) { + return + } + + val trident = event.damager + val victim = event.entity + + if (trident !is Trident) { + return + } + + if (victim !is LivingEntity) { + return + } + + val shooter = trident.shooter + + if (shooter !is LivingEntity) { + return + } + + val item = trident.item + + if (shooter is Player && !AntigriefManager.canInjure(shooter, victim)) { + return + } + + if (event.isCancelled) { + return + } + + val reforge = ReforgeUtils.getReforge(item) ?: return + + for ((effect, config) in reforge.effects) { + if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) { + continue + } + effect.onTridentDamage(shooter, victim, trident, event, config) + effect.onAnyDamage(shooter, victim, event, config) + } + } + + @EventHandler(ignoreCancelled = true) + fun onJump(event: PlayerJumpEvent) { + if (McmmoManager.isFake(event)) { + return + } + val player = event.player + for (itemStack in player.inventory.armorContents) { + if (itemStack == null) { + continue + } + val reforge = ReforgeUtils.getReforge(itemStack) ?: continue + for ((effect, config) in reforge.effects) { + if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) { + continue + } + effect.onJump(player, event, config) + } + } + } + + @EventHandler(ignoreCancelled = true) + fun onMeleeAttack(event: EntityDamageByEntityEvent) { + if (McmmoManager.isFake(event)) { + return + } + + val attacker = event.damager + + if (attacker !is LivingEntity) { + return + } + + val victim = event.entity + + if (victim !is LivingEntity) { + return + } + + if (event.isCancelled) { + return + } + + if (event.cause == EntityDamageEvent.DamageCause.THORNS) { + return + } + + if (attacker is Player && !AntigriefManager.canInjure(attacker, victim)) { + return + } + + val equipment = attacker.equipment ?: return + + val reforge = ReforgeUtils.getReforge(equipment.itemInMainHand) ?: return + + for ((effect, config) in reforge.effects) { + if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) { + continue + } + effect.onMeleeAttack(attacker, victim, event, config) + effect.onAnyDamage(attacker, victim, event, config) + } + } + + @EventHandler(ignoreCancelled = true) + fun onKill(event: EntityDeathByEntityEvent) { + if (McmmoManager.isFake(event)) { + return + } + + var killer: Any? = null + if (event.killer is LivingEntity) { + killer = event.killer + } else if (event.killer is Projectile) { + if ((event.killer as Projectile).shooter is LivingEntity) { + killer = (event.killer as Projectile).shooter + } + } + + if (killer !is LivingEntity) { + return + } + + val victim = event.victim + + if (killer is Player && !AntigriefManager.canInjure(killer, victim)) { + return + } + + val equipment = killer.equipment ?: return + + val reforge = ReforgeUtils.getReforge(equipment.itemInMainHand) ?: return + + for ((effect, config) in reforge.effects) { + if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) { + continue + } + effect.onKill(killer, victim, event, config) + } + } + + @EventHandler(ignoreCancelled = true) + fun onBowShoot(event: EntityShootBowEvent) { + if (McmmoManager.isFake(event)) { + return + } + if (event.projectile.type != EntityType.ARROW) { + return + } + + val shooter = event.entity + + val arrow = event.projectile as Arrow + + val bow = ArrowUtils.getBow(arrow) ?: return + + val reforge = ReforgeUtils.getReforge(bow) ?: return + + for ((effect, config) in reforge.effects) { + if (NumberUtils.randFloat(0.0, 100.0) > config.getDoubleOrNull("chance") ?: 100.0) { + continue + } + effect.onBowShoot(shooter, arrow, event, config) + } + } + } \ No newline at end of file