diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/curse/InaccuracyCurse.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/curse/InaccuracyCurse.java index 22df131b..55c8425d 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/curse/InaccuracyCurse.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/curse/InaccuracyCurse.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.util.NumberUtils; +import org.bukkit.entity.Arrow; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; @@ -23,7 +24,7 @@ public class InaccuracyCurse extends EcoEnchant { @Override - public void onBowShoot(LivingEntity shooter, int level, EntityShootBowEvent event) { + public void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) { double spread = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "spread"); Vector velocity = event.getProjectile().getVelocity().clone(); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Aerial.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Aerial.java index b7532dde..238a0304 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Aerial.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Aerial.java @@ -26,7 +26,7 @@ public class Aerial extends EcoEnchant { @Override - public void onBowShoot(LivingEntity shooter, int level, EntityShootBowEvent event) { + public void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) { if(!(event.getProjectile() instanceof Arrow)) return; if(shooter.isOnGround()) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BlastMining.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BlastMining.java index fadbb966..d4cb1427 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BlastMining.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BlastMining.java @@ -22,22 +22,13 @@ public class BlastMining extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onBreak(BlockBreakEvent event) { - Player player = event.getPlayer(); - Block block = event.getBlock(); + @Override + public void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) { if (block.hasMetadata("from-drill") || block.hasMetadata("from-lumberjack") || block.hasMetadata("from-blastmining") || block.hasMetadata("from-vein")) { return; } - if (!EnchantChecks.mainhand(player, this)) return; - - if (event.isCancelled()) - return; - - if(!AntigriefManager.canBreakBlock(player, block)) return; - if(player.isSneaking() && this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "disable-on-sneak")) return; boolean hasExploded = false; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Bleed.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Bleed.java index 5b7d8716..78f70bef 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Bleed.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Bleed.java @@ -24,26 +24,12 @@ public class Bleed extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if (attacker instanceof Player && Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Blind.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Blind.java index 9ef0596e..a628b80a 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Blind.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Blind.java @@ -24,27 +24,9 @@ public class Blind extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if(event.isCancelled()) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BlockBreather.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BlockBreather.java index 454413a4..73ef5d5c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BlockBreather.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BlockBreather.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.util.NumberUtils; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; @@ -18,19 +19,12 @@ public class BlockBreather extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHurt(EntityDamageEvent event) { - if (!(event.getEntity() instanceof Player)) - return; + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { if(!event.getCause().equals(EntityDamageEvent.DamageCause.SUFFOCATION)) return; - Player player = (Player) event.getEntity(); - - if(!EnchantChecks.helmet(player, this)) return; - int level = EnchantChecks.getHelmetLevel(player, this); - double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); if (NumberUtils.randFloat(0, 1) > level * 0.01 * chance) @@ -38,5 +32,4 @@ public class BlockBreather extends EcoEnchant { event.setCancelled(true); } - } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BossHunter.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BossHunter.java index 4afa51ec..2dcdf17d 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BossHunter.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/BossHunter.java @@ -4,10 +4,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.Boss; -import org.bukkit.entity.ElderGuardian; -import org.bukkit.entity.Player; +import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; public class BossHunter extends EcoEnchant { @@ -19,19 +16,9 @@ public class BossHunter extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) return; - - if (!(((Arrow) event.getDamager()).getShooter() instanceof Player)) return; - - if (!(event.getEntity() instanceof Boss || event.getEntity() instanceof ElderGuardian)) return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - - if (!EnchantChecks.arrow(arrow, this)) return; - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(!(victim instanceof Boss || victim instanceof ElderGuardian)) return; double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Buckshot.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Buckshot.java index 07e832ba..d385bcd5 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Buckshot.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Buckshot.java @@ -8,10 +8,7 @@ import com.willfp.ecoenchants.util.NumberUtils; import org.bukkit.Sound; import org.bukkit.SoundCategory; import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.AbstractArrow; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; +import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.util.Vector; @@ -24,21 +21,12 @@ public class Buckshot extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onShoot(EntityShootBowEvent event) { - if (event.getProjectile().getType() != EntityType.ARROW) - return; - - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - int level = EnchantChecks.getMainhandLevel(player, this); - + @Override + public void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) { event.getProjectile().remove(); - player.playSound(player.getLocation(), Sound.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0f, 1.0f); + if(shooter instanceof Player) { + ((Player) shooter).playSound(shooter.getLocation(), Sound.ENTITY_ARROW_SHOOT, SoundCategory.PLAYERS, 1.0f, 1.0f); + } int numberPerLevel = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "amount-per-level"); int number = numberPerLevel * level; @@ -51,9 +39,9 @@ public class Buckshot extends EcoEnchant { velocity.add(new Vector(NumberUtils.randFloat(-spread, spread), NumberUtils.randFloat(-spread, spread), NumberUtils.randFloat(-spread, spread))); - Arrow arrow = player.launchProjectile(Arrow.class, velocity); - if(EnchantChecks.mainhand(player, Enchantment.ARROW_FIRE)) arrow.setFireTicks(Integer.MAX_VALUE); - arrow.setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); + Arrow arrow1 = shooter.launchProjectile(Arrow.class, velocity); + if(EnchantChecks.mainhand(shooter, Enchantment.ARROW_FIRE)) arrow1.setFireTicks(Integer.MAX_VALUE); + arrow1.setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); } } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Butchering.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Butchering.java index a6ce3145..e95e3d2e 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Butchering.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Butchering.java @@ -18,22 +18,12 @@ public class Butchering extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void butcheringHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - if (event.getEntity() instanceof Monster) - return; - Player player = (Player) event.getDamager(); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(victim instanceof Monster) return; - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-level"); - event.setDamage(event.getDamage() + (level * multiplier)); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cerebral.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cerebral.java index 3997508c..1ecee4fc 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cerebral.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cerebral.java @@ -18,23 +18,12 @@ public class Cerebral extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onCerebralDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) return; - - if (!(((Arrow) event.getDamager()).getShooter() instanceof Player)) return; - - if (!(event.getEntity() instanceof LivingEntity)) return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (!(arrow.getLocation().getY() >= victim.getLocation().getY() + victim.getEyeHeight() - 0.22)) return; if (!EnchantChecks.arrow(arrow, this)) return; - int level = EnchantChecks.getArrowLevel(arrow, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Chopless.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Chopless.java index 03fb3921..6ed23e09 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Chopless.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Chopless.java @@ -4,9 +4,12 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; + public class Chopless extends EcoEnchant { public Chopless() { super( @@ -16,28 +19,17 @@ public class Chopless extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onPreservationHurt(EntityDamageByEntityEvent event) { - if(!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof Player)) - return; + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { + if(victim.getEquipment() == null) return; - Player player = (Player) event.getEntity(); - Player damager = (Player) event.getDamager(); - - if(!damager.getInventory().getItemInMainHand().getType().toString().endsWith("_AXE")) - return; - - int totalChoplessPoints = EnchantChecks.getArmorPoints(player, this, 1); - - if (totalChoplessPoints == 0) + if(!victim.getEquipment().getItemInMainHand().getType().toString().endsWith("_AXE")) return; double reduction = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-less-per-level"); - double multiplier = 1 - (reduction/100 * totalChoplessPoints); + double multiplier = 1 - (reduction/100 * level); event.setDamage(event.getDamage() * multiplier); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cleave.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cleave.java index c13aedb3..22ca8f20 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cleave.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cleave.java @@ -22,28 +22,15 @@ public class Cleave extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { if(victim.hasMetadata("cleaved")) return; - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } double damagePerLevel = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-percentage-per-level") * 0.01; double radiusPerLevel = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "radius-per-level"); @@ -52,10 +39,10 @@ public class Cleave extends EcoEnchant { victim.getNearbyEntities(radius, radius, radius).stream() .filter(entity -> entity instanceof LivingEntity) - .filter(entity -> !entity.equals(player)) + .filter(entity -> !entity.equals(attacker)) .forEach(entity -> { entity.setMetadata("cleaved", new FixedMetadataValue(EcoEnchantsPlugin.getInstance(), true)); - ((LivingEntity) entity).damage(damage, player); + ((LivingEntity) entity).damage(damage, attacker); Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> entity.removeMetadata("cleaved", EcoEnchantsPlugin.getInstance()), 5); }); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Collateral.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Collateral.java index 68c7325b..0b45cc21 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Collateral.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Collateral.java @@ -5,8 +5,10 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Arrow; import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; public class Collateral extends EcoEnchant { public Collateral() { @@ -17,23 +19,9 @@ public class Collateral extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onCollateralShoot(ProjectileLaunchEvent event) { - if (event.getEntityType() != EntityType.ARROW) - return; - if (!(event.getEntity().getShooter() instanceof Player)) - return; - - Player player = (Player) event.getEntity().getShooter(); - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); - - if (!(event.getEntity() instanceof Arrow)) return; - Arrow a = (Arrow) event.getEntity(); - - a.setPierceLevel(level); + @Override + public void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) { + arrow.setPierceLevel(level); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Conclude.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Conclude.java index 0be7357c..afa0d80c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Conclude.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Conclude.java @@ -21,20 +21,9 @@ public class Conclude extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.item(item, this)) return; - int level = EnchantChecks.getItemLevel(item, this); + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Corrosive.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Corrosive.java index 24c9db1b..8d87e3b3 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Corrosive.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Corrosive.java @@ -6,6 +6,7 @@ import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.integrations.antigrief.AntigriefManager; import com.willfp.ecoenchants.util.ItemDurability; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -23,29 +24,10 @@ public class Corrosive extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof Player)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Player victim = (Player) event.getEntity(); - Arrow arrow = (Arrow) event.getDamager(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity uncastVictim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(uncastVictim instanceof Player) return; + Player victim = (Player) uncastVictim; ArrayList armor = new ArrayList(Arrays.asList(victim.getInventory().getArmorContents())); if (armor.isEmpty()) @@ -57,16 +39,16 @@ public class Corrosive extends EcoEnchant { if(armorPiece.equals(victim.getInventory().getHelmet())) { - ItemDurability.damageItem(player, player.getInventory().getHelmet(), level, 39); + ItemDurability.damageItem(victim, victim.getInventory().getHelmet(), level, 39); } if(armorPiece.equals(victim.getInventory().getChestplate())) { - ItemDurability.damageItem(player, player.getInventory().getChestplate(), level, 38); + ItemDurability.damageItem(victim, victim.getInventory().getChestplate(), level, 38); } if(armorPiece.equals(victim.getInventory().getLeggings())) { - ItemDurability.damageItem(player, player.getInventory().getLeggings(), level, 37); + ItemDurability.damageItem(victim, victim.getInventory().getLeggings(), level, 37); } if(armorPiece.equals(victim.getInventory().getBoots())) { - ItemDurability.damageItem(player, player.getInventory().getBoots(), level, 36); + ItemDurability.damageItem(victim, victim.getInventory().getBoots(), level, 36); } } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cranial.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cranial.java index 6c9ed61f..0e4fdbe1 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cranial.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cranial.java @@ -20,26 +20,11 @@ public class Cranial extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) return; - - if (!(((Trident) event.getDamager()).getShooter() instanceof Player)) return; - - if (!(event.getEntity() instanceof LivingEntity)) return; - - Player player = (Player) ((Trident) event.getDamager()).getShooter(); - Trident trident = (Trident) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { if (!(trident.getLocation().getY() >= victim.getLocation().getY() + victim.getEyeHeight() - 0.22)) return; - ItemStack item = TridentStack.getTridentStack(trident); - - if (!EnchantChecks.item(item, this)) return; - int level = EnchantChecks.getItemLevel(item, this); - double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); double damageMultiplier = (level * multiplier) + 1; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Criticals.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Criticals.java index 64a6b53e..b6070d9b 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Criticals.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Criticals.java @@ -17,23 +17,11 @@ public class Criticals extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void criticalHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if (!(attacker.getFallDistance() > 0 && !attacker.isOnGround())) return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - - if (!(player.getFallDistance() > 0 && !player.isOnGround())) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); event.setDamage(event.getDamage() * ((level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-multiplier-per-level")) + 1)); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cubism.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cubism.java index b335c10a..3c56ccc3 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cubism.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Cubism.java @@ -19,20 +19,9 @@ public class Cubism extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) return; - - if (!(event.getEntity() instanceof LivingEntity)) return; - - Player player = (Player) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!(victim instanceof Slime)) - return; - - if (!EnchantChecks.mainhand(player, this)) return; - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!(victim instanceof Slime)) return; double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Defender.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Defender.java index e047ace7..5b892e6a 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Defender.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Defender.java @@ -4,6 +4,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; import org.bukkit.event.EventHandler; @@ -18,22 +19,15 @@ public class Defender extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - if (!(event.getEntity() instanceof Tameable)) - return; - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Tameable entity = (Tameable) event.getEntity(); - Arrow arrow = (Arrow) event.getDamager(); - if(entity.getOwner() == null) return; - if(!entity.getOwner().equals(player)) return; + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(!(victim instanceof Tameable)) return; - if (!EnchantChecks.arrow(arrow, this)) return; + Tameable pet = (Tameable) victim; + + if(pet.getOwner() == null) return; + if(!pet.getOwner().equals(attacker)) return; event.setCancelled(true); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Deflection.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Deflection.java index 63524614..6fc7881c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Deflection.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Deflection.java @@ -18,31 +18,13 @@ public class Deflection extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDeflect(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - if (!(event.getDamager() instanceof LivingEntity)) - return; - - Player player = (Player) event.getEntity(); - - LivingEntity victim = (LivingEntity) event.getDamager(); - - if(!player.isBlocking()) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - int level; - if (!EnchantChecks.offhand(player, this) && !EnchantChecks.mainhand(player, this)) return; - if(EnchantChecks.offhand(player, this)) level = EnchantChecks.getOffhandLevel(player, this); - else level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onDeflect(Player blocker, LivingEntity attacker, int level, EntityDamageByEntityEvent event) { double perlevel = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-deflected-per-level"); double damagePercent = (perlevel/100) * level; double damage = event.getDamage() * damagePercent; - victim.damage(damage, player); + attacker.damage(damage, attacker); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Defusion.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Defusion.java index ae21f546..f4cece63 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Defusion.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Defusion.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Creeper; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -17,22 +18,12 @@ public class Defusion extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void defusionHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof Creeper)) - return; - Player player = (Player) event.getDamager(); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!(victim instanceof Creeper)) return; - Creeper victim = (Creeper) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-level"); - event.setDamage(event.getDamage() + (level * multiplier)); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Disable.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Disable.java index 800526eb..68cbcdde 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Disable.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Disable.java @@ -23,25 +23,13 @@ public class Disable extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Disappear.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Disappear.java index f4a05a3d..100642d9 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Disappear.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Disappear.java @@ -6,9 +6,11 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.Bukkit; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; public class Disappear extends EcoEnchant { @@ -20,25 +22,15 @@ public class Disappear extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHurt(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> { - Player player = (Player) event.getEntity(); - - if(player.getHealth() > EcoEnchants.DISAPPEAR.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "threshold")) - return; - - final int points = EnchantChecks.getArmorPoints(player, this, 1); - - if (points == 0) + if(victim.getHealth() > EcoEnchants.DISAPPEAR.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "threshold")) return; int ticksPerLevel = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "ticks-per-level"); - final int ticks = ticksPerLevel * points; - player.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, ticks, 1, false, false, true)); + final int ticks = ticksPerLevel * level; + victim.addPotionEffect(new PotionEffect(PotionEffectType.INVISIBILITY, ticks, 1, false, false, true)); }, 1); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Diurnal.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Diurnal.java index e5805472..e43d8e18 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Diurnal.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Diurnal.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.World; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -18,21 +19,13 @@ public class Diurnal extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!attacker.getWorld().getEnvironment().equals(World.Environment.NORMAL)) return; - Player player = (Player) event.getDamager(); + if(!(attacker.getWorld().getTime() < 12300 && attacker.getWorld().getTime() > 23850)) return; - if(!player.getWorld().getEnvironment().equals(World.Environment.NORMAL)) - return; - - if(!(player.getWorld().getTime() < 12300 && player.getWorld().getTime() > 23850)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); event.setDamage(event.getDamage() * (1 + (level * multiplier))); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Diverse.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Diverse.java index ac1e8db2..6ed368fd 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Diverse.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Diverse.java @@ -4,6 +4,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -16,23 +17,14 @@ public class Diverse extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(victim.getEquipment() == null) return; + + if(!victim.getEquipment().getItemInMainHand().getType().toString().endsWith("_SWORD")) return; - if(!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getDamager(); - Player victim = (Player) event.getEntity(); - - if(!victim.getInventory().getItemInMainHand().getType().toString().endsWith("_SWORD")) - return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); event.setDamage(event.getDamage() * (1 + (level * multiplier))); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Drill.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Drill.java index 7ce07831..1d414a57 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Drill.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Drill.java @@ -25,29 +25,19 @@ public class Drill extends EcoEnchant { // START OF LISTENERS - @EventHandler(priority = EventPriority.LOW) - public void drillBreak(BlockBreakEvent event) { - Player player = event.getPlayer(); - Block block = event.getBlock(); - + @Override + public void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) { if (block.hasMetadata("from-drill") || block.hasMetadata("from-lumberjack") || block.hasMetadata("from-blastmining") || block.hasMetadata("from-vein")) { return; } - if (!EnchantChecks.mainhand(player, this)) return; - - if (event.isCancelled()) - return; - - if(!AntigriefManager.canBreakBlock(player, block)) return; - if(player.isSneaking() && this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "disable-on-sneak")) return; - int level = EnchantChecks.getMainhandLevel(player, this) * this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "blocks-per-level"); + int blocks = level * this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "blocks-per-level"); AnticheatManager.exemptPlayer(player); - for(int i = 1; i <= level; i++) { + for(int i = 1; i <= blocks; i++) { Vector simplified = VectorUtils.simplifyVector(player.getLocation().getDirection().normalize()).multiply(i); Block block1 = block.getWorld().getBlockAt(block.getLocation().clone().add(simplified)); block1.setMetadata("from-drill", new FixedMetadataValue(EcoEnchantsPlugin.getInstance(), true)); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Dullness.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Dullness.java index cf3ee1fa..f8efa2c0 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Dullness.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Dullness.java @@ -22,25 +22,12 @@ public class Dullness extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Electroshock.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Electroshock.java index 29f59c4a..b1de5397 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Electroshock.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Electroshock.java @@ -20,33 +20,14 @@ public class Electroshock extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onElectroshock(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - if (!(event.getDamager() instanceof LivingEntity)) - return; - - Player player = (Player) event.getEntity(); - - LivingEntity victim = (LivingEntity) event.getDamager(); - - if(!player.isBlocking()) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - int level; - if (!EnchantChecks.offhand(player, this) && !EnchantChecks.mainhand(player, this)) return; - if(EnchantChecks.offhand(player, this)) level = EnchantChecks.getOffhandLevel(player, this); - else level = EnchantChecks.getMainhandLevel(player, this); - + @Override + public void onDeflect(Player blocker, LivingEntity attacker, int level, EntityDamageByEntityEvent event) { double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); double damage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage"); double finalChance = (chance * level)/100; if(NumberUtils.randFloat(0, 1) > finalChance) return; - Lightning.strike(victim, damage); + Lightning.strike(attacker, damage); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/EndInfusion.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/EndInfusion.java index 3daec68a..f6216c16 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/EndInfusion.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/EndInfusion.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.World; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -18,19 +19,12 @@ public class EndInfusion extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!attacker.getWorld().getEnvironment().equals(World.Environment.THE_END)) return; - Player player = (Player) event.getDamager(); - - if(!player.getWorld().getEnvironment().equals(World.Environment.THE_END)) - return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); event.setDamage(event.getDamage() * (1 + (level * multiplier))); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/EnderSlayer.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/EnderSlayer.java index 6678c098..0de832e7 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/EnderSlayer.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/EnderSlayer.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -20,26 +21,18 @@ public class EnderSlayer extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void enderSlayerHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + private static Set endMobs = new HashSet() {{ + add(EntityType.ENDERMITE); + add(EntityType.ENDERMAN); + add(EntityType.ENDER_DRAGON); + add(EntityType.SHULKER); + }}; + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if (!endMobs.contains(victim.getType())) return; - Set endMobs = new HashSet() {{ - add(EntityType.ENDERMITE); - add(EntityType.ENDERMAN); - add(EntityType.ENDER_DRAGON); - add(EntityType.SHULKER); - }}; - - if (!endMobs.contains(event.getEntityType())) - return; - - Player player = (Player) event.getDamager(); - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-level"); event.setDamage(event.getDamage() + (level * multiplier)); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Enderism.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Enderism.java index 7744396f..8605c8e3 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Enderism.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Enderism.java @@ -6,6 +6,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.World; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -19,6 +20,17 @@ public class Enderism extends EcoEnchant { // START OF LISTENERS + + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(!attacker.getWorld().getEnvironment().equals(World.Environment.THE_END)) + return; + + double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); + + event.setDamage(event.getDamage() * (1 + (level * multiplier))); + } + @EventHandler public void onHit(EntityDamageByEntityEvent event) { if (!(event.getDamager() instanceof Arrow)) diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Evasion.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Evasion.java index d722e780..61eb033e 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Evasion.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Evasion.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.util.NumberUtils; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; @@ -17,24 +18,14 @@ public class Evasion extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onEvasionHurt(EntityDamageEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - int totalEvasionPoints = EnchantChecks.getArmorPoints(player, this, 1); - - if (totalEvasionPoints == 0) - return; + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-point"); - if (NumberUtils.randFloat(0, 1) > totalEvasionPoints * 0.01 * chance) + if (NumberUtils.randFloat(0, 1) > level * 0.01 * chance) return; event.setCancelled(true); } - } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Extinguishing.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Extinguishing.java index c8541383..db9e442a 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Extinguishing.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Extinguishing.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.util.NumberUtils; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; @@ -17,26 +18,15 @@ public class Extinguishing extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onExtinguishingHurt(EntityDamageEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - if (!event.getCause().equals(EntityDamageEvent.DamageCause.FIRE_TICK)) - return; - - Player player = (Player) event.getEntity(); - - int totalExtinguishingPoints = EnchantChecks.getArmorPoints(player, this, 0); - - if (totalExtinguishingPoints == 0) + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { + if(!event.getCause().equals(EntityDamageEvent.DamageCause.FIRE_TICK)) return; double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-point"); - if (NumberUtils.randFloat(0, 1) > totalExtinguishingPoints * 0.01 * chance) + if (NumberUtils.randFloat(0, 1) > level * 0.01 * chance) return; - player.setFireTicks(0); + victim.setFireTicks(0); } - } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Extract.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Extract.java index 5f917c07..86ea9d33 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Extract.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Extract.java @@ -22,37 +22,16 @@ public class Extract extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void extractHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - - if(!(((Trident) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) ((Trident) event.getDamager()).getShooter(); - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - - if(!AntigriefManager.canInjure(player, (LivingEntity) event.getEntity())) return; - - if (!EnchantChecks.item(item, this)) return; - - int level = EnchantChecks.getItemLevel(item, this); + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-multiplier-per-level"); double amountToHeal = damage * level * multiplier; - double newHealth = player.getHealth() + amountToHeal; - if (newHealth > player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { - newHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); + double newHealth = attacker.getHealth() + amountToHeal; + if (newHealth > attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { + newHealth = attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); } - player.setHealth(newHealth); + attacker.setHealth(newHealth); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Famine.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Famine.java index 52528caf..033fabeb 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Famine.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Famine.java @@ -22,25 +22,13 @@ public class Famine extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Finality.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Finality.java index 85cecadf..558be913 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Finality.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Finality.java @@ -20,27 +20,14 @@ public class Finality extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.arrow(arrow, this)) return; - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; double minhealth = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "minimum-health-per-level"); - if (!(((LivingEntity) event.getEntity()).getHealth() <= level * minhealth)) + if (!(victim.getHealth() <= level * minhealth)) return; event.setDamage(10000); // cba to do this properly diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Finishing.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Finishing.java index 37e553e8..f0712dac 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Finishing.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Finishing.java @@ -18,25 +18,14 @@ public class Finishing extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void finishingHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; double minhealth = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "minimum-health-per-level"); - if (!(((LivingEntity) event.getEntity()).getHealth() <= level * minhealth)) + if (!(victim.getHealth() <= level * minhealth)) return; event.setDamage(10000); // cba to do this properly diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/FireAffinity.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/FireAffinity.java index 4713b8e9..52e5107b 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/FireAffinity.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/FireAffinity.java @@ -17,20 +17,10 @@ public class FireAffinity extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void fireAffinityHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - Player player = (Player) event.getDamager(); - - if (!EnchantChecks.mainhand(player, this)) return; - - if(player.getFireTicks() == 0) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker.getFireTicks() == 0) return; double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-more-per-level"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/FirstStrike.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/FirstStrike.java index 3acacf46..8dbd461c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/FirstStrike.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/FirstStrike.java @@ -18,23 +18,10 @@ public class FirstStrike extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void firstStrikeHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if (!(victim.getHealth() == victim.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue())) return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - - if (!(((LivingEntity) event.getEntity()).getHealth() == ((LivingEntity) event.getEntity()).getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue())) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); double damagemultiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-multiplier-per-level"); event.setDamage(event.getDamage() * ((level * damagemultiplier) + 1)); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Flinch.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Flinch.java index bb7bb471..51c26d72 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Flinch.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Flinch.java @@ -21,27 +21,9 @@ public class Flinch extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onFlinch(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - if (!(event.getDamager() instanceof LivingEntity)) - return; - - Player player = (Player) event.getEntity(); - - LivingEntity victim = (LivingEntity) event.getDamager(); - - if(!player.isBlocking()) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - int level; - if (!EnchantChecks.offhand(player, this) && !EnchantChecks.mainhand(player, this)) return; - if(EnchantChecks.offhand(player, this)) level = EnchantChecks.getOffhandLevel(player, this); - else level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onDeflect(Player blocker, LivingEntity attacker, int level, EntityDamageByEntityEvent event) { double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); int duration = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "ticks-per-level"); @@ -50,6 +32,6 @@ public class Flinch extends EcoEnchant { int finalDuration = duration * level; - victim.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, finalDuration, 1, false, false, false)); + attacker.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, finalDuration, 1, false, false, false)); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Freerunner.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Freerunner.java index 3db6580e..c93f6cb2 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Freerunner.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Freerunner.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.util.NumberUtils; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; @@ -17,19 +18,9 @@ public class Freerunner extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - if(!event.getCause().equals(EntityDamageEvent.DamageCause.FALL)) - return; - - Player player = (Player) event.getEntity(); - - if(!EnchantChecks.boots(player, this)) return; - int level = EnchantChecks.getBootsLevel(player, this); + @Override + public void onFallDamage(LivingEntity faller, int level, EntityDamageEvent event) { double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); if (NumberUtils.randFloat(0, 1) > level * 0.01 * chance) diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Frozen.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Frozen.java index 0c5f958e..383c67af 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Frozen.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Frozen.java @@ -11,6 +11,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; public class Frozen extends EcoEnchant { @@ -22,31 +23,18 @@ public class Frozen extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHurt(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - if (!(event.getDamager() instanceof LivingEntity)) - return; - - Player player = (Player) event.getEntity(); - LivingEntity victim = (LivingEntity) event.getDamager(); - - final int points = EnchantChecks.getArmorPoints(player, this, 1); - - if (points == 0) - return; - - if (NumberUtils.randFloat(0, 1) > points * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-point")) + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { + if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-point")) return; int divisor = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "points-per-level"); - final int level = (int) Math.ceil((double) points / divisor); + final int amplifier = (int) Math.ceil((double) level / divisor); Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> { - victim.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, points * 5, level)); - victim.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, points * 5, level)); + victim.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, level * 5, amplifier)); + victim.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, level * 5, amplifier)); }, 1); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Fury.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Fury.java index e1cdf3df..30f25951 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Fury.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Fury.java @@ -21,25 +21,12 @@ public class Fury extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; @@ -56,7 +43,7 @@ public class Fury extends EcoEnchant { ((Monster) e).setTarget(victim); - Vector vector = player.getLocation().toVector().clone().subtract(e.getLocation().toVector()).normalize().multiply(0.23d); + Vector vector = attacker.getLocation().toVector().clone().subtract(e.getLocation().toVector()).normalize().multiply(0.23d); if(VectorUtils.isFinite(vector)) { e.setVelocity(vector); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Goliath.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Goliath.java index 0cafa60d..ffd75d96 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Goliath.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Goliath.java @@ -18,24 +18,13 @@ public class Goliath extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void goliathHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if (victim.getHealth() <= attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) return; - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - - if (victim.getHealth() <= player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); - double timesMoreHealth = victim.getHealth() / player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); + double timesMoreHealth = victim.getHealth() / attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-multiplier-per-level"); event.setDamage(event.getDamage() * ((level * multiplier * timesMoreHealth) + 1)); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Grapple.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Grapple.java index 4ff1e171..6c2d6f5c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Grapple.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Grapple.java @@ -20,29 +20,11 @@ public class Grapple extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void grappleHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if(event.isCancelled()) return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(victim.hasMetadata("NPC")) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { double baseMultiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "velocity-multiplier"); - Vector vector = player.getLocation().toVector().clone().subtract(victim.getLocation().toVector()).normalize().multiply(level * baseMultiplier); + Vector vector = attacker.getLocation().toVector().clone().subtract(victim.getLocation().toVector()).normalize().multiply(level * baseMultiplier); if(VectorUtils.isFinite(vector)) { victim.setVelocity(vector); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Hellish.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Hellish.java index 8183b077..9ad1c632 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Hellish.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Hellish.java @@ -6,6 +6,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.nms.TridentStack; import org.bukkit.World; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Trident; import org.bukkit.event.EventHandler; @@ -21,24 +22,12 @@ public class Hellish extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - if (!(((Trident) event.getDamager()).getShooter() instanceof Player)) + + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { + if(!attacker.getWorld().getEnvironment().equals(World.Environment.NETHER)) return; - Player player = (Player) ((Trident) event.getDamager()).getShooter(); - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - - assert player != null; - if(!player.getWorld().getEnvironment().equals(World.Environment.NETHER)) - return; - - if (!EnchantChecks.item(item, this)) return; - - int level = EnchantChecks.getItemLevel(item, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); event.setDamage(event.getDamage() * (1 + (level * multiplier))); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Hook.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Hook.java index 9a2dfdc0..ece414e8 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Hook.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Hook.java @@ -21,31 +21,11 @@ public class Hook extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void hookHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if(event.isCancelled()) return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(victim.hasMetadata("NPC")) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { double baseMultiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "velocity-multiplier"); - Vector vector = player.getLocation().toVector().clone().subtract(victim.getLocation().toVector()).normalize().multiply(level * baseMultiplier); + Vector vector = attacker.getLocation().toVector().clone().subtract(victim.getLocation().toVector()).normalize().multiply(level * baseMultiplier); if(VectorUtils.isFinite(vector)) { victim.setVelocity(vector); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Horde.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Horde.java index d23b74a2..91195a9d 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Horde.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Horde.java @@ -17,20 +17,12 @@ public class Horde extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - - Player player = (Player) event.getDamager(); - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { double distance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "distance-per-level") * level; - int entitiesNearby = (int) player.getNearbyEntities(distance, distance, distance).stream().filter(entity -> entity instanceof LivingEntity).count(); + int entitiesNearby = (int) attacker.getNearbyEntities(distance, distance, distance).stream().filter(entity -> entity instanceof LivingEntity).count(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier-per-level"); multiplier = (1 + (level * multiplier * entitiesNearby)); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/IceShot.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/IceShot.java index a271fbbd..bb9035cf 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/IceShot.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/IceShot.java @@ -23,27 +23,9 @@ public class IceShot extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if(event.isCancelled()) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Identify.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Identify.java index 89de8c0f..3bca47d7 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Identify.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Identify.java @@ -22,27 +22,9 @@ public class Identify extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onBlock(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - if (!(event.getDamager() instanceof LivingEntity)) - return; - - Player player = (Player) event.getEntity(); - - LivingEntity victim = (LivingEntity) event.getDamager(); - - if(!player.isBlocking()) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - int level; - if (!EnchantChecks.offhand(player, this) && !EnchantChecks.mainhand(player, this)) return; - if(EnchantChecks.offhand(player, this)) level = EnchantChecks.getOffhandLevel(player, this); - else level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onDeflect(Player blocker, LivingEntity attacker, int level, EntityDamageByEntityEvent event) { double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); int duration = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "ticks-per-level"); @@ -51,6 +33,6 @@ public class Identify extends EcoEnchant { int finalDuration = duration * level; - victim.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, finalDuration, 1, false, false, false)); + attacker.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, finalDuration, 1, false, false, false)); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Ignite.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Ignite.java index 04637eb1..3cbc6b64 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Ignite.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Ignite.java @@ -10,6 +10,7 @@ import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.ProjectileHitEvent; @@ -22,28 +23,17 @@ public class Ignite extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onLand(ProjectileHitEvent event) { - if (!(event.getEntity() instanceof Arrow)) - return; - if (!(event.getEntity().getShooter() instanceof Player)) + @Override + public void onArrowHit(LivingEntity uncastShooter, int level, ProjectileHitEvent event) { + if(!(uncastShooter instanceof Player)) return; if(event.getHitBlock() == null) return; - Block block = event.getHitBlock(); - Arrow arrow = (Arrow) event.getEntity(); - Player player = (Player) event.getEntity().getShooter(); - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); - - float power = (float) (0.5 + (level * 0.5)); - - if (!AntigriefManager.canBreakBlock(player, block)) + Player shooter = (Player) uncastShooter; + if (!AntigriefManager.canBreakBlock(shooter, event.getHitBlock())) return; if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) @@ -53,7 +43,7 @@ public class Ignite extends EcoEnchant { assert face != null; - Block toIgnite = block.getRelative(face); + Block toIgnite = event.getHitBlock().getRelative(face); if(toIgnite.getType().equals(Material.AIR)) { toIgnite.setType(Material.FIRE); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/IllusionAspect.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/IllusionAspect.java index af65eede..66460705 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/IllusionAspect.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/IllusionAspect.java @@ -7,6 +7,7 @@ import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.integrations.antigrief.AntigriefManager; import com.willfp.ecoenchants.nms.Cooldown; import com.willfp.ecoenchants.util.NumberUtils; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -21,25 +22,13 @@ public class IllusionAspect extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void illusionAspectHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof Player)) - return; - Player player = (Player) event.getDamager(); - - Player victim = (Player) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); if (NumberUtils.randFloat(0, 1) > level * 0.01 * chance) diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Impact.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Impact.java index d13ca47f..67feed03 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Impact.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Impact.java @@ -22,28 +22,9 @@ public class Impact extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - - if(!(((Trident) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) ((Trident) event.getDamager()).getShooter(); - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - - if (!EnchantChecks.item(item, this)) return; - - int level = EnchantChecks.getItemLevel(item, this); + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Inferno.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Inferno.java index 6001e3bc..09c984b8 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Inferno.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Inferno.java @@ -20,35 +20,14 @@ public class Inferno extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onInfernoShoot(ProjectileLaunchEvent event) { - if (!(event.getEntity() instanceof Trident)) - return; - - if (!(event.getEntity().getShooter() instanceof Player)) - return; - - Player player = (Player) event.getEntity().getShooter(); - Trident trident = (Trident) event.getEntity(); - ItemStack item = TridentStack.getTridentStack(trident); - - if (!EnchantChecks.item(item, this)) return; + @Override + public void onTridentLaunch(LivingEntity shooter, Trident trident, int level, ProjectileLaunchEvent event) { trident.setFireTicks(Integer.MAX_VALUE); } - @EventHandler - public void onInfernoShoot(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - if(!(event.getEntity() instanceof LivingEntity)) - return; - - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.item(item, this)) return; + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { if(trident.getFireTicks() <= 0) return; victim.setFireTicks(100); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Infuriate.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Infuriate.java index c334ea97..7c116590 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Infuriate.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Infuriate.java @@ -21,27 +21,9 @@ public class Infuriate extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onBlock(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - if (!(event.getDamager() instanceof LivingEntity)) - return; - - Player player = (Player) event.getEntity(); - - LivingEntity victim = (LivingEntity) event.getDamager(); - - if(!player.isBlocking()) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - int level; - if (!EnchantChecks.offhand(player, this) && !EnchantChecks.mainhand(player, this)) return; - if(EnchantChecks.offhand(player, this)) level = EnchantChecks.getOffhandLevel(player, this); - else level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onDeflect(Player blocker, LivingEntity attacker, int level, EntityDamageByEntityEvent event) { double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); double finalChance = (chance * level)/100; if(NumberUtils.randFloat(0, 1) > finalChance) return; @@ -49,16 +31,16 @@ public class Infuriate extends EcoEnchant { double distancePerLevel = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "distance-per-level"); final double distance = distancePerLevel * level; - for (Entity e : victim.getWorld().getNearbyEntities(victim.getLocation(), distance, distance, distance)) { + for (Entity e : attacker.getWorld().getNearbyEntities(attacker.getLocation(), distance, distance, distance)) { if(!(e instanceof Monster)) continue; if(e instanceof PigZombie) { ((PigZombie) e).setAngry(true); } - ((Monster) e).setTarget(victim); + ((Monster) e).setTarget(attacker); - Vector vector = player.getLocation().toVector().clone().subtract(e.getLocation().toVector()).normalize().multiply(0.23d); + Vector vector = attacker.getLocation().toVector().clone().subtract(e.getLocation().toVector()).normalize().multiply(0.23d); if(VectorUtils.isFinite(vector)) { e.setVelocity(vector); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Insecticide.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Insecticide.java index 5f608c76..bfe53175 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Insecticide.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Insecticide.java @@ -5,9 +5,11 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Spider; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; +import sun.security.provider.ConfigFile; public class Insecticide extends EcoEnchant { public Insecticide() { @@ -18,20 +20,12 @@ public class Insecticide extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) + + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(!(victim instanceof Spider)) return; - if(!(event.getEntity() instanceof Spider)) return; - - Arrow arrow = (Arrow) event.getDamager(); - - if(!EnchantChecks.arrow(arrow, this)) - return; - - int level = EnchantChecks.getArrowLevel(arrow, this); - double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); double bonus = (multiplier * (level + 1)) + 1; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Instantaneous.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Instantaneous.java index 1ef29ed0..5cade72d 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Instantaneous.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Instantaneous.java @@ -6,6 +6,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.integrations.anticheat.AnticheatManager; import com.willfp.ecoenchants.util.NumberUtils; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.BlockDamageEvent; @@ -18,20 +19,9 @@ public class Instantaneous extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamageBlock(BlockDamageEvent event) { - Player player = event.getPlayer(); - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); - - if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) - return; - - if(event.getBlock().getDrops(player.getInventory().getItemInMainHand()).isEmpty()) - return; + @Override + public void onDamageBlock(Player player, Block block, int level, BlockDamageEvent event) { AnticheatManager.exemptPlayer(player); event.setInstaBreak(true); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Kinetic.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Kinetic.java index 062ee0a8..a7d5567a 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Kinetic.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Kinetic.java @@ -4,6 +4,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; @@ -16,19 +17,11 @@ public class Kinetic extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onKineticHurt(EntityDamageEvent event) { + + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { if(event.getCause().equals(EntityDamageEvent.DamageCause.FLY_INTO_WALL)) return; - if(!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - if(!EnchantChecks.chestplate(player, this)) return; - - int level = EnchantChecks.getChestplateLevel(player, this); - double reduction = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "reduction-per-level"); double multiplier = 1 - ((reduction/100) * level); event.setDamage(event.getDamage() * multiplier); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Leeching.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Leeching.java index f14b8aa4..eae2f13a 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Leeching.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Leeching.java @@ -19,32 +19,16 @@ public class Leeching extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void leechingHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) event.getDamager(); - - if(!AntigriefManager.canInjure(player, (LivingEntity) event.getEntity())) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-multiplier-per-level"); double amountToHeal = damage * level * multiplier; - double newHealth = player.getHealth() + amountToHeal; - if (newHealth > player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { - newHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); + double newHealth = attacker.getHealth() + amountToHeal; + if (newHealth > attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { + newHealth = attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); } - player.setHealth(newHealth); + attacker.setHealth(newHealth); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Lesion.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Lesion.java index 2c9135e8..163aadac 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Lesion.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Lesion.java @@ -27,27 +27,9 @@ public class Lesion extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - if(!(((Trident) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) ((Trident) event.getDamager()).getShooter(); - Trident trident = (Trident) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - ItemStack item = TridentStack.getTridentStack(trident); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.item(item, this)) return; - - int level = EnchantChecks.getItemLevel(item, this); + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Levitate.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Levitate.java index d38c4ebe..0059d4c5 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Levitate.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Levitate.java @@ -23,27 +23,9 @@ public class Levitate extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if(event.isCancelled()) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/LiquidShot.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/LiquidShot.java index d842cde9..62d97efe 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/LiquidShot.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/LiquidShot.java @@ -16,24 +16,12 @@ public class LiquidShot extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onLiquidShotDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) return; - - if (!(((Arrow) event.getDamager()).getShooter() instanceof Player)) return; - - if (!(event.getEntity() instanceof LivingEntity)) return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if(!(victim instanceof Blaze || victim instanceof MagmaCube || victim instanceof Enderman)) return; - if (!EnchantChecks.arrow(arrow, this)) return; - int level = EnchantChecks.getArrowLevel(arrow, this); - double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); double damageMultiplier = (level * multiplier) + 1; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Lumberjack.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Lumberjack.java index 2c481ca9..83e8421f 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Lumberjack.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Lumberjack.java @@ -30,22 +30,13 @@ public class Lumberjack extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onLumberjack(BlockBreakEvent event) { - Player player = event.getPlayer(); - Block block = event.getBlock(); + @Override + public void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) { if (block.hasMetadata("from-drill") || block.hasMetadata("from-blastmining") || block.hasMetadata("from-lumberjack") || block.hasMetadata("from-vein")) { return; } - if (!EnchantChecks.mainhand(player, this)) return; - - if (event.isCancelled()) - return; - - if(!AntigriefManager.canBreakBlock(player, block)) return; - if(player.isSneaking() && this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "disable-on-sneak")) return; List materials = new ArrayList<>(); @@ -55,7 +46,6 @@ public class Lumberjack extends EcoEnchant { return; int blocksPerLevel = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "blocks-per-level"); - int level = EnchantChecks.getMainhandLevel(player, this); int limit = level * blocksPerLevel; Set treeBlocks = BlockUtils.getVein(block, materials, limit); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Marking.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Marking.java index df6200fb..c3b5105f 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Marking.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Marking.java @@ -24,27 +24,9 @@ public class Marking extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - - if (!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { int ticksPerLevel = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "ticks-per-level"); int ticks = ticksPerLevel * level; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Marksman.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Marksman.java index 724439f5..609cd865 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Marksman.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Marksman.java @@ -7,8 +7,10 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Arrow; import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; import org.bukkit.scheduler.BukkitRunnable; public class Marksman extends EcoEnchant { @@ -20,29 +22,18 @@ public class Marksman extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onMarksmanShoot(ProjectileLaunchEvent event) { - if (event.getEntityType() != EntityType.ARROW) - return; - if (!(event.getEntity().getShooter() instanceof Player)) - return; - - Player player = (Player) event.getEntity().getShooter(); - - if (!EnchantChecks.mainhand(player, this)) return; - - if (!(event.getEntity() instanceof Arrow)) return; - Arrow a = (Arrow) event.getEntity(); - a.setGravity(false); + @Override + public void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) { + arrow.setGravity(false); int ticks = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "remove-arrow-after-ticks"); new BukkitRunnable() { @Override public void run() { - if (!a.isOnGround()) { - a.remove(); + if (!arrow.isOnGround()) { + arrow.remove(); } } }.runTaskLater(EcoEnchantsPlugin.getInstance(), ticks); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/NetherInfusion.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/NetherInfusion.java index d6da9536..de6cda15 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/NetherInfusion.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/NetherInfusion.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.World; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -17,19 +18,12 @@ public class NetherInfusion extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void netherInfusionHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!attacker.getWorld().getEnvironment().equals(World.Environment.NETHER)) return; - Player player = (Player) event.getDamager(); - - if(!player.getWorld().getEnvironment().equals(World.Environment.NETHER)) - return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); event.setDamage(event.getDamage() * (1 + (level * multiplier))); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Netheric.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Netheric.java index 838c1885..715fbc56 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Netheric.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Netheric.java @@ -6,6 +6,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.World; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -19,23 +20,12 @@ public class Netheric extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if (!(((Arrow) event.getDamager()).getShooter() instanceof Player)) + + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(!attacker.getWorld().getEnvironment().equals(World.Environment.NETHER)) return; - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - - assert player != null; - if(!player.getWorld().getEnvironment().equals(World.Environment.NETHER)) - return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); event.setDamage(event.getDamage() * (1 + (level * multiplier))); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Nocturnal.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Nocturnal.java index cfdd416f..f09c1528 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Nocturnal.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Nocturnal.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.World; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -17,21 +18,15 @@ public class Nocturnal extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void nocturnalHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!attacker.getWorld().getEnvironment().equals(World.Environment.NORMAL)) return; - Player player = (Player) event.getDamager(); - - if(!player.getWorld().getEnvironment().equals(World.Environment.NORMAL)) + if(!(attacker.getWorld().getTime() > 12300 && attacker.getWorld().getTime() < 23850)) return; - if(!(player.getWorld().getTime() > 12300 && player.getWorld().getTime() < 23850)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); event.setDamage(event.getDamage() * (1 + (level * multiplier))); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Optics.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Optics.java index 5a9254cf..d17be78f 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Optics.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Optics.java @@ -6,6 +6,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.Location; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -18,24 +19,14 @@ public class Optics extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onOpticsDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) return; - - if (!(((Arrow) event.getDamager()).getShooter() instanceof Player)) return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - - if (!EnchantChecks.arrow(arrow, this)) return; + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { Location land = arrow.getLocation(); - Location source = player.getLocation(); + Location source = attacker.getLocation(); double distance = land.distance(source); - int level = EnchantChecks.getArrowLevel(arrow, this); - double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "block-multiplier"); double damageMultiplier = (distance * level * multiplier) + 1; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Oxygenate.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Oxygenate.java index 735dfb10..7ac98420 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Oxygenate.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Oxygenate.java @@ -19,22 +19,11 @@ public class Oxygenate extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void oxygenateBreak(BlockBreakEvent event) { - Player player = event.getPlayer(); - Block block = event.getBlock(); - - if (!EnchantChecks.mainhand(player, this)) return; - - if (event.isCancelled()) - return; - - if (!AntigriefManager.canBreakBlock(player, block)) return; + @Override + public void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) { if(player.getRemainingAir() == player.getMaximumAir()) return; - int level = EnchantChecks.getMainhandLevel(player, this); - int oxygenLevel = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "oxygen-per-level"); int oxygen = level * oxygenLevel; int newOxygen = player.getRemainingAir() + oxygen; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Pacify.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Pacify.java index f65166aa..cd48a461 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Pacify.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Pacify.java @@ -6,6 +6,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.nms.TridentStack; import org.bukkit.entity.Creeper; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Trident; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -20,20 +21,10 @@ public class Pacify extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - if(!(event.getEntity() instanceof Creeper)) return; - - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - - if(!EnchantChecks.item(item, this)) - return; - - int level = EnchantChecks.getItemLevel(item, this); + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { + if(!(victim instanceof Creeper)) return; double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Paladin.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Paladin.java index 102263aa..fdb7f0a3 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Paladin.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Paladin.java @@ -18,22 +18,10 @@ public class Paladin extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void paladinHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - - if(!(player.getVehicle() instanceof Horse)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!(attacker.getVehicle() instanceof Horse)) return; event.setDamage(event.getDamage() * ((level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-multiplier-per-level")) + 1)); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Paralyze.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Paralyze.java index 76e462b9..fad3e60b 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Paralyze.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Paralyze.java @@ -22,27 +22,9 @@ public class Paralyze extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onBlock(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - if (!(event.getDamager() instanceof LivingEntity)) - return; - - Player player = (Player) event.getEntity(); - - LivingEntity victim = (LivingEntity) event.getDamager(); - - if(!player.isBlocking()) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - int level; - if (!EnchantChecks.offhand(player, this) && !EnchantChecks.mainhand(player, this)) return; - if(EnchantChecks.offhand(player, this)) level = EnchantChecks.getOffhandLevel(player, this); - else level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onDeflect(Player blocker, LivingEntity attacker, int level, EntityDamageByEntityEvent event) { double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); int duration = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "ticks-per-level"); @@ -51,6 +33,6 @@ public class Paralyze extends EcoEnchant { int finalDuration = duration * level; - victim.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, finalDuration, 10, false, false, false)); + attacker.addPotionEffect(new PotionEffect(PotionEffectType.SLOW_DIGGING, finalDuration, 10, false, false, false)); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Parasitic.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Parasitic.java index 6ce80b24..fe2db376 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Parasitic.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Parasitic.java @@ -20,35 +20,16 @@ public class Parasitic extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void parasiticHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - if(!AntigriefManager.canInjure(player, (LivingEntity) event.getEntity())) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-multiplier-per-level"); double amountToHeal = damage * level * multiplier; - double newHealth = player.getHealth() + amountToHeal; - if (newHealth > player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { - newHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); + double newHealth = attacker.getHealth() + amountToHeal; + if (newHealth > attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { + newHealth = attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); } - player.setHealth(newHealth); + attacker.setHealth(newHealth); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Phantasm.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Phantasm.java index 9fd7e672..a15bc093 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Phantasm.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Phantasm.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.nms.TridentStack; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Skeleton; import org.bukkit.entity.Trident; import org.bukkit.entity.Zombie; @@ -21,20 +22,10 @@ public class Phantasm extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - if(!(event.getEntity() instanceof Zombie || event.getEntity() instanceof Skeleton)) return; - - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - - if(!EnchantChecks.item(item, this)) - return; - - int level = EnchantChecks.getItemLevel(item, this); + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { + if(!(victim instanceof Zombie || victim instanceof Skeleton)) return; double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Protector.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Protector.java index 725ae479..fc38815c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Protector.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Protector.java @@ -3,6 +3,7 @@ package com.willfp.ecoenchants.enchantments.ecoenchants.normal; import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; import org.bukkit.event.EventHandler; @@ -16,19 +17,13 @@ public class Protector extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void protectorHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof Tameable)) - return; + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity uncastVictim, int level, EntityDamageByEntityEvent event) { + if(!(uncastVictim instanceof Tameable)) return; - Player player = (Player) event.getDamager(); - Tameable entity = (Tameable) event.getEntity(); - if(entity.getOwner() == null) return; - if(!entity.getOwner().equals(player)) return; - - if (!EnchantChecks.mainhand(player, this)) return; + Tameable victim = (Tameable) uncastVictim; + if(victim.getOwner() == null) return; + if(!victim.getOwner().equals(attacker)) return; event.setCancelled(true); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Proximity.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Proximity.java index ee288cfd..1a0ed20c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Proximity.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Proximity.java @@ -17,25 +17,13 @@ public class Proximity extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void proximityHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - - double distance = player.getLocation().distance(victim.getLocation()); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + double distance = attacker.getLocation().distance(victim.getLocation()); double decreaseAfter = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "when-closer-than-blocks"); - int level = EnchantChecks.getMainhandLevel(player, this); - if(distance <= decreaseAfter) { double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-more-per-level"); double finalMultiplier = (multiplier/100 * level) +1; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Puncture.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Puncture.java index 5f26474a..b14f718b 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Puncture.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Puncture.java @@ -18,33 +18,12 @@ public class Puncture extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - - if(!(((Trident) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) ((Trident) event.getDamager()).getShooter(); - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - - LivingEntity victim = (LivingEntity) event.getEntity(); + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { if(!(victim instanceof Turtle || victim instanceof Shulker)) return; - if (!EnchantChecks.item(item, this)) return; - - int level = EnchantChecks.getItemLevel(item, this); - double perLevelDamage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-more-per-level"); double totalDamagePercent = (100 + (perLevelDamage * level))/100; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Quadrilateralism.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Quadrilateralism.java index 9d77a67c..bda0e8e3 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Quadrilateralism.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Quadrilateralism.java @@ -20,24 +20,12 @@ public class Quadrilateralism extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) return; - - if (!(((Arrow) event.getDamager()).getShooter() instanceof Player)) return; - - if (!(event.getEntity() instanceof LivingEntity)) return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if(!(victim instanceof Slime)) return; - if (!EnchantChecks.arrow(arrow, this)) return; - int level = EnchantChecks.getArrowLevel(arrow, this); - double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); double damageMultiplier = (level * multiplier) + 1; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Radiance.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Radiance.java index 34c37792..bcdb8427 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Radiance.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Radiance.java @@ -9,6 +9,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -21,20 +22,9 @@ public class Radiance extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onLand(ProjectileHitEvent event) { - if (!(event.getEntity().getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof Arrow)) return; - - Arrow arrow = (Arrow) event.getEntity(); - Player player = (Player) event.getEntity().getShooter(); - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { double radius = level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "radius-multiplier"); int duration = level * this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "duration-per-level"); @@ -43,7 +33,7 @@ public class Radiance extends EcoEnchant { if (!(e instanceof LivingEntity)) continue; LivingEntity entity = (LivingEntity) e; - if(e.equals(player)) continue; + if(e.equals(attacker)) continue; entity.addPotionEffect(new PotionEffect(PotionEffectType.GLOWING, duration, 0, false, false, false)); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Rage.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Rage.java index df494411..8ea97141 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Rage.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Rage.java @@ -21,25 +21,9 @@ public class Rage extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; @@ -55,7 +39,7 @@ public class Rage extends EcoEnchant { ((Monster) e).setTarget(victim); - Vector vector = player.getLocation().toVector().clone().subtract(e.getLocation().toVector()).normalize().multiply(0.23d); + Vector vector = attacker.getLocation().toVector().clone().subtract(e.getLocation().toVector()).normalize().multiply(0.23d); if(VectorUtils.isFinite(vector)) { e.setVelocity(vector); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Rapid.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Rapid.java index 09bf1499..40001bb2 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Rapid.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Rapid.java @@ -4,7 +4,9 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import org.bukkit.entity.Arrow; import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityShootBowEvent; @@ -17,20 +19,9 @@ public class Rapid extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onRapidShoot(EntityShootBowEvent event) { - if (event.getProjectile().getType() != EntityType.ARROW) - return; - - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) { double multiplier = 1 - ((this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-faster-per-level")/100) * level); if(event.getForce() < multiplier) diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Reinforcement.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Reinforcement.java index c92e4813..15e294f6 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Reinforcement.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Reinforcement.java @@ -4,6 +4,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; @@ -16,19 +17,11 @@ public class Reinforcement extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onReinforcementHurt(EntityDamageEvent event) { + + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { if(event.getCause().equals(EntityDamageEvent.DamageCause.FALL)) return; - if(!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - if(!EnchantChecks.chestplate(player, this)) return; - - int level = EnchantChecks.getChestplateLevel(player, this); - double reduction = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "reduction-per-level"); double multiplier = 1 - ((reduction/100) * level); event.setDamage(event.getDamage() * multiplier); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Replenish.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Replenish.java index e70b5327..5e5b60a0 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Replenish.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Replenish.java @@ -21,17 +21,11 @@ public class Replenish extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onCropBreak(BlockBreakEvent event) { - Player player = event.getPlayer(); - Block block = event.getBlock(); + + @Override + public void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) { Material type = block.getType(); - if(!EnchantChecks.mainhand(player, this)) return; - - if(!AntigriefManager.canBreakBlock(player, block)) return; - if(event.isCancelled()) return; - if(!(block.getBlockData() instanceof Ageable)) return; Ageable data = (Ageable) block.getBlockData(); @@ -39,7 +33,6 @@ public class Replenish extends EcoEnchant { data.setAge(0); - new BukkitRunnable() { @Override public void run() { diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Respirator.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Respirator.java index ba973631..5152217b 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Respirator.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Respirator.java @@ -17,16 +17,11 @@ public class Respirator extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHurt(EntityDamageEvent event) { + + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { if(!event.getCause().equals(EntityDamageEvent.DamageCause.DRAGON_BREATH)) return; - if(!(event.getEntity() instanceof LivingEntity)) return; - - if(!EnchantChecks.helmet((LivingEntity) event.getEntity(), this)) return; - - int level = EnchantChecks.getHelmetLevel((LivingEntity) event.getEntity(), this); - double reduction = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-less-per-level"); double multiplier = 1 - (reduction/100 * level); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Revenant.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Revenant.java index b111fefc..c79faef1 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Revenant.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Revenant.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Skeleton; import org.bukkit.entity.Zombie; import org.bukkit.event.EventHandler; @@ -19,19 +20,10 @@ public class Revenant extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if(!(event.getEntity() instanceof Zombie || event.getEntity() instanceof Skeleton)) return; - - Arrow arrow = (Arrow) event.getDamager(); - - if(!EnchantChecks.arrow(arrow, this)) - return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(!(victim instanceof Zombie || victim instanceof Skeleton)) return; double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Serrated.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Serrated.java index 9a84db2c..65476d7c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Serrated.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Serrated.java @@ -20,29 +20,9 @@ public class Serrated extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void serratedHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - - if(!(((Trident) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) ((Trident) event.getDamager()).getShooter(); - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - - - if (!EnchantChecks.item(item, this)) return; - - int level = EnchantChecks.getItemLevel(item, this); + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { double baseDamage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-more-base"); double perLevelDamage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-more-per-level"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Settle.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Settle.java index 65eddb19..59466b2e 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Settle.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Settle.java @@ -6,6 +6,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Arrow; import org.bukkit.entity.Creeper; +import org.bukkit.entity.LivingEntity; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -18,19 +19,10 @@ public class Settle extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if(!(event.getEntity() instanceof Creeper)) return; - - Arrow arrow = (Arrow) event.getDamager(); - - if(!EnchantChecks.arrow(arrow, this)) - return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(!(victim instanceof Creeper)) return; double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Sickening.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Sickening.java index 82c51524..541c2244 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Sickening.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Sickening.java @@ -24,27 +24,9 @@ public class Sickening extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if(event.isCancelled()) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Slaughter.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Slaughter.java index fef695bb..0c4dc2aa 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Slaughter.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Slaughter.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Monster; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -18,19 +19,10 @@ public class Slaughter extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if(event.getEntity() instanceof Monster) return; - - Arrow arrow = (Arrow) event.getDamager(); - - if(!EnchantChecks.arrow(arrow, this)) - return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { + if(victim instanceof Monster) return; double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Spearfishing.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Spearfishing.java index 79d79ff0..ac0caa26 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Spearfishing.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Spearfishing.java @@ -9,6 +9,7 @@ import com.willfp.ecoenchants.queue.DropQueue; import com.willfp.ecoenchants.util.NumberUtils; import org.bukkit.Material; import org.bukkit.entity.EntityType; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Trident; import org.bukkit.event.EventHandler; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Stab.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Stab.java index a4eba309..f57b1919 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Stab.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Stab.java @@ -17,23 +17,9 @@ public class Stab extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void stabHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) event.getDamager(); - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { double baseDamage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-base"); double perLevelDamage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-per-level"); double damage = baseDamage + (level * perLevelDamage); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/StoneSwitcher.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/StoneSwitcher.java index 43ba478f..2d2fa61a 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/StoneSwitcher.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/StoneSwitcher.java @@ -23,24 +23,14 @@ public class StoneSwitcher extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void stoneSwitcherBreak(BlockBreakEvent event) { - Player player = event.getPlayer(); - Block block = event.getBlock(); - - if (!EnchantChecks.mainhand(player, this)) return; + @Override + public void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) { if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) return; if(!block.getType().equals(Material.STONE)) return; - if (event.isCancelled()) - return; - - if (!AntigriefManager.canBreakBlock(player, block)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); if(NumberUtils.randFloat(0, 1) > level * chance * 0.01) diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/StrayAspect.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/StrayAspect.java index 96425bb8..c85ec873 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/StrayAspect.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/StrayAspect.java @@ -22,25 +22,13 @@ public class StrayAspect extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void strayAspectHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Succession.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Succession.java index e7db671d..98ad7f94 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Succession.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Succession.java @@ -8,10 +8,7 @@ import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.util.ItemDurability; import org.bukkit.Bukkit; import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.AbstractArrow; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; +import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityShootBowEvent; public class Succession extends EcoEnchant { @@ -23,31 +20,24 @@ public class Succession extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onSuccessionShoot(EntityShootBowEvent event) { - if (event.getProjectile().getType() != EntityType.ARROW) - return; - - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; + @Override + public void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) { int number = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "extra-arrows"); - boolean fire = EnchantChecks.mainhand(player, Enchantment.ARROW_FIRE); + boolean fire = EnchantChecks.mainhand(shooter, Enchantment.ARROW_FIRE); for (int i = 1; i <= number; i++) { Bukkit.getScheduler().scheduleSyncDelayedTask(EcoEnchantsPlugin.getInstance(), () -> { - Arrow arrow = player.launchProjectile(Arrow.class, event.getProjectile().getVelocity()); - arrow.setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); - if(fire) arrow.setFireTicks(Integer.MAX_VALUE); + Arrow arrow1 = shooter.launchProjectile(Arrow.class, event.getProjectile().getVelocity()); + arrow1.setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); + if(fire) arrow1.setFireTicks(Integer.MAX_VALUE); if (this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "per-arrow-damage")) { - ItemDurability.damageItem(player, player.getInventory().getItemInMainHand(), 1, player.getInventory().getHeldItemSlot()); + if(shooter instanceof Player) { + ItemDurability.damageItem((Player) shooter, ((Player) shooter).getInventory().getItemInMainHand(), 1, ((Player) shooter).getInventory().getHeldItemSlot()); + } } }, i * 2); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Supercritical.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Supercritical.java index 65fd56e6..611f95aa 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Supercritical.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Supercritical.java @@ -19,23 +19,13 @@ public class Supercritical extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void supercriticalHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Sycophant.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Sycophant.java index 10602c5f..44c3a4cc 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Sycophant.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Sycophant.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.attribute.Attribute; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -17,27 +18,16 @@ public class Sycophant extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onBlock(EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - if(!player.isBlocking()) return; - - int level; - if (!EnchantChecks.offhand(player, this) && !EnchantChecks.mainhand(player, this)) return; - if(EnchantChecks.offhand(player, this)) level = EnchantChecks.getOffhandLevel(player, this); - else level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onDeflect(Player blocker, LivingEntity attacker, int level, EntityDamageByEntityEvent event) { double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-multiplier-per-level"); double amountToHeal = damage * level * multiplier; - double newHealth = player.getHealth() + amountToHeal; - if (newHealth > player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { - newHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); + double newHealth = blocker.getHealth() + amountToHeal; + if (newHealth > blocker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { + newHealth = blocker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); } - player.setHealth(newHealth); + blocker.setHealth(newHealth); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tectonic.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tectonic.java index e15ea29f..958a0c86 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tectonic.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tectonic.java @@ -20,26 +20,20 @@ public class Tectonic extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onTecFall(EntityDamageEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - Player player = (Player) event.getEntity(); + @Override + public void onFallDamage(LivingEntity faller, int level, EntityDamageEvent event) { if (!event.getCause().equals(EntityDamageEvent.DamageCause.FALL)) return; - - if (!EnchantChecks.boots(player, this)) return; - - int radius = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "initial-radius") + (this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "per-level-radius") * EnchantChecks.getBootsLevel(player, this) - 1); - int damage = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "initial-damage") + (this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "per-level-damage") * EnchantChecks.getBootsLevel(player, this) - 1); + int radius = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "initial-radius") + (this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "per-level-radius") * level - 1); + int damage = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "initial-damage") + (this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "per-level-damage") * level - 1); - Collection entities = player.getWorld().getNearbyEntities(player.getLocation(), radius, 2, radius); + Collection entities = faller.getWorld().getNearbyEntities(faller.getLocation(), radius, 2, radius); for (Entity entity : entities) { - if (entity.equals(player)) + if (entity.equals(faller)) continue; if(!(entity instanceof LivingEntity)) continue; entity.teleport(entity.getLocation().add(0, 0.3, 0)); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Thor.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Thor.java index 864f1d95..dc5f5e87 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Thor.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Thor.java @@ -21,28 +21,14 @@ public class Thor extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void thorHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(event.getEntity() instanceof Player) { - if(!AntigriefManager.canInjure(player, (Player) event.getEntity())) return; + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; } - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); - if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tornado.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tornado.java index 17bc3a90..3d6a6dd7 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tornado.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tornado.java @@ -21,27 +21,9 @@ public class Tornado extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void tornadoHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if(event.isCancelled()) return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(victim.hasMetadata("NPC")) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { double baseVelocity = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "velocity-per-level"); double yVelocity = baseVelocity * level; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Toxic.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Toxic.java index 619b18c2..d691d0fa 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Toxic.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Toxic.java @@ -22,26 +22,14 @@ public class Toxic extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Transfuse.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Transfuse.java index eddef181..76a31e6b 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Transfuse.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Transfuse.java @@ -24,24 +24,12 @@ public class Transfuse extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onBreak(BlockBreakEvent event) { - Player player = event.getPlayer(); - Block block = event.getBlock(); - - if (!EnchantChecks.mainhand(player, this)) return; + @Override + public void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) { if (player.getGameMode() == GameMode.CREATIVE || player.getGameMode() == GameMode.SPECTATOR) return; - if(!block.getType().equals(Material.STONE)) return; - - if (event.isCancelled()) - return; - - if (!AntigriefManager.canBreakBlock(player, block)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); if(NumberUtils.randFloat(0, 1) > level * chance * 0.01) diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tripleshot.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tripleshot.java index a37e143b..31e63596 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tripleshot.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Tripleshot.java @@ -5,10 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.AbstractArrow; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; +import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.util.Vector; @@ -21,18 +18,9 @@ public class Tripleshot extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onTripleshotShoot(EntityShootBowEvent event) { - if (event.getProjectile().getType() != EntityType.ARROW) - return; - - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; + @Override + public void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) { for (int i = -1; i < 2; i += 2) { Vector velocity = event.getProjectile().getVelocity(); @@ -40,9 +28,9 @@ public class Tripleshot extends EcoEnchant { float radians = (float) ((float) i * Math.toRadians(this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "angle"))); velocity.rotateAroundY(radians); - Arrow arrow = player.launchProjectile(Arrow.class, velocity); - if(EnchantChecks.mainhand(player, Enchantment.ARROW_FIRE)) arrow.setFireTicks(Integer.MAX_VALUE); - arrow.setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); + Arrow arrow1 = shooter.launchProjectile(Arrow.class, velocity); + if(EnchantChecks.mainhand(shooter, Enchantment.ARROW_FIRE)) arrow1.setFireTicks(Integer.MAX_VALUE); + arrow1.setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); } } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/VampireAspect.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/VampireAspect.java index 78a1d726..1a1b7c44 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/VampireAspect.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/VampireAspect.java @@ -22,6 +22,20 @@ public class VampireAspect extends EcoEnchant { // START OF LISTENERS + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } + + if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) + return; + + victim.addPotionEffect(new PotionEffect(PotionEffectType.WITHER, level * 10 + 20, level)); + } + @EventHandler public void vampireAspectHit(EntityDamageByEntityEvent event) { if (!(event.getDamager() instanceof Player)) diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Vein.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Vein.java index 36f0b09d..a21daecd 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Vein.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Vein.java @@ -30,22 +30,13 @@ public class Vein extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onBreak(BlockBreakEvent event) { - Player player = event.getPlayer(); - Block block = event.getBlock(); + @Override + public void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) { if (block.hasMetadata("from-drill") || block.hasMetadata("from-blastmining") || block.hasMetadata("from-lumberjack") || block.hasMetadata("from-vein")) { return; } - if (!EnchantChecks.mainhand(player, this)) return; - - if (event.isCancelled()) - return; - - if(!AntigriefManager.canBreakBlock(player, block)) return; - if(player.isSneaking() && this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "disable-on-sneak")) return; List materials = new ArrayList<>(); @@ -55,7 +46,6 @@ public class Vein extends EcoEnchant { return; int blocksPerLevel = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "blocks-per-level"); - int level = EnchantChecks.getMainhandLevel(player, this); int limit = level * blocksPerLevel; Set blockSet = BlockUtils.getVein(block, materials, limit); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Venom.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Venom.java index 035238b3..89788d9a 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Venom.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Venom.java @@ -22,27 +22,9 @@ public class Venom extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if(event.isCancelled()) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/VoidAffinity.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/VoidAffinity.java index d43028c6..fa70d8f7 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/VoidAffinity.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/VoidAffinity.java @@ -6,6 +6,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.nms.TridentStack; import org.bukkit.World; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Trident; import org.bukkit.event.EventHandler; @@ -21,24 +22,12 @@ public class VoidAffinity extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - if (!(((Trident) event.getDamager()).getShooter() instanceof Player)) + + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { + if(!attacker.getWorld().getEnvironment().equals(World.Environment.THE_END)) return; - Player player = (Player) ((Trident) event.getDamager()).getShooter(); - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - - assert player != null; - if(!player.getWorld().getEnvironment().equals(World.Environment.THE_END)) - return; - - if (!EnchantChecks.item(item, this)) return; - - int level = EnchantChecks.getItemLevel(item, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); event.setDamage(event.getDamage() * (1 + (level * multiplier))); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Voltage.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Voltage.java index 1a63bbe2..f0ecbe5d 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Voltage.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Voltage.java @@ -40,15 +40,8 @@ public class Voltage extends EcoEnchant { Material.CHAINMAIL_BOOTS, }; - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if(!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { EntityEquipment equipment = victim.getEquipment(); if(equipment == null) return; @@ -60,9 +53,6 @@ public class Voltage extends EcoEnchant { if(pieces == 0) return; - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); event.setDamage(event.getDamage() * (1 + (level * multiplier * pieces))); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/WaterAffinity.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/WaterAffinity.java index 6a855ef0..7196ddfa 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/WaterAffinity.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/WaterAffinity.java @@ -18,21 +18,11 @@ public class WaterAffinity extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!attacker.getLocation().getBlock().getType().equals(Material.WATER)) return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - if (!EnchantChecks.mainhand(player, this)) return; - - if(!player.getLocation().getBlock().getType().equals(Material.WATER)) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-more-per-level"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/WaterAspect.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/WaterAspect.java index dd04d8f0..24accaf5 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/WaterAspect.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/WaterAspect.java @@ -16,21 +16,12 @@ public class WaterAspect extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onWaterAspectDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) return; - - if (!(event.getEntity() instanceof LivingEntity)) return; - - Player player = (Player) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { if(!(victim instanceof Blaze || victim instanceof MagmaCube || victim instanceof Enderman)) return; - if (!EnchantChecks.mainhand(player, this)) return; - int level = EnchantChecks.getMainhandLevel(player, this); - double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); double damageMultiplier = (level * multiplier) + 1; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Weakening.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Weakening.java index d8cdbd2e..2b201aa9 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Weakening.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Weakening.java @@ -23,24 +23,9 @@ public class Weakening extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { int ticksPerLevel = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "ticks-per-level"); int ticks = ticksPerLevel * level; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wound.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wound.java index c0164b80..8c4c64d4 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wound.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wound.java @@ -25,26 +25,9 @@ public class Wound extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Zeus.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Zeus.java index 4a402745..306d97be 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Zeus.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Zeus.java @@ -21,25 +21,9 @@ public class Zeus extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void zeusHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - Arrow arrow = (Arrow) event.getDamager(); - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.arrow(arrow, this)) return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Annihilate.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Annihilate.java index f0650922..c630ba56 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Annihilate.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Annihilate.java @@ -19,29 +19,11 @@ public class Annihilate extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if(event.isCancelled()) return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(victim.hasMetadata("NPC")) return; - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { double baseMultiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "velocity-multiplier"); - Vector vector = player.getLocation().toVector().clone().subtract(victim.getLocation().toVector()).normalize().multiply(level * baseMultiplier).multiply(-1); + Vector vector = attacker.getLocation().toVector().clone().subtract(victim.getLocation().toVector()).normalize().multiply(level * baseMultiplier).multiply(-1); vector.setY(0.2); victim.setVelocity(vector); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Bladed.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Bladed.java index e0df6b17..f05b74c4 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Bladed.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Bladed.java @@ -20,29 +20,9 @@ public class Bladed extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void bladedHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Trident)) - return; - - if(!(((Trident) event.getDamager()).getShooter() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) ((Trident) event.getDamager()).getShooter(); - Trident trident = (Trident) event.getDamager(); - ItemStack item = TridentStack.getTridentStack(trident); - - - if (!EnchantChecks.item(item, this)) return; - - int level = EnchantChecks.getItemLevel(item, this); + @Override + public void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) { double baseDamage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-more-base"); double perLevelDamage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-more-per-level"); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Bolt.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Bolt.java index ca3ed74d..8dab9bc1 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Bolt.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Bolt.java @@ -21,25 +21,13 @@ public class Bolt extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Carve.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Carve.java index e985b5da..37b3be3b 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Carve.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Carve.java @@ -22,41 +22,29 @@ public class Carve extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { if(victim.hasMetadata("carved")) return; - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); - double damagePerLevel = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-percentage-per-level") * 0.01; double radiusPerLevel = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "radius-per-level"); final double damage = damagePerLevel * level * event.getDamage(); final double radius = radiusPerLevel * level; + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } + victim.getNearbyEntities(radius, radius, radius).stream() .filter(entity -> entity instanceof LivingEntity) - .filter(entity -> !entity.equals(player)) + .filter(entity -> !entity.equals(attacker)) .forEach(entity -> { entity.setMetadata("carved", new FixedMetadataValue(EcoEnchantsPlugin.getInstance(), true)); - ((LivingEntity) entity).damage(damage, player); - Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> entity.removeMetadata("carved", EcoEnchantsPlugin.getInstance()), 5); + ((LivingEntity) entity).damage(damage, attacker); + Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> entity.removeMetadata("carved", EcoEnchantsPlugin.getInstance()), 20); }); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Confusion.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Confusion.java index 7f863b42..6898f812 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Confusion.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Confusion.java @@ -7,6 +7,7 @@ import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.integrations.antigrief.AntigriefManager; import com.willfp.ecoenchants.nms.Cooldown; import com.willfp.ecoenchants.util.NumberUtils; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -24,25 +25,16 @@ public class Confusion extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void confusionHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof Player)) - return; - Player player = (Player) event.getDamager(); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity uncastVictim, int level, EntityDamageByEntityEvent event) { + if(!(uncastVictim instanceof Player)) return; + Player victim = (Player) uncastVictim; - Player victim = (Player) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); + if(attacker instanceof Player) { + if (Cooldown.getCooldown((Player) attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) + return; + } double chance = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level"); if (NumberUtils.randFloat(0, 1) > level * 0.01 * chance) diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Energizing.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Energizing.java index 3c27f4d6..e02268ea 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Energizing.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Energizing.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import com.willfp.ecoenchants.integrations.antigrief.AntigriefManager; +import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.block.BlockBreakEvent; @@ -19,15 +20,9 @@ public class Energizing extends EcoEnchant { } // START OF LISTENERS - @EventHandler - public void onEnergizingBreak(BlockBreakEvent event) { - if(event.isCancelled()) return; - Player player = event.getPlayer(); - if(!AntigriefManager.canBreakBlock(player, event.getBlock())) return; - if(!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) { int duration = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "ticks-per-level") * level; int amplifier = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "initial-level") + (level - 2); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Force.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Force.java index 983054ad..fbb18dd7 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Force.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Force.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Arrow; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -18,22 +19,9 @@ public class Force extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onDamage(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Arrow)) - return; - - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) - return; - - Arrow arrow = (Arrow) event.getDamager(); - Player player = (Player) ((Arrow) event.getDamager()).getShooter(); - - if(!EnchantChecks.arrow(arrow, this)) - return; - - int level = EnchantChecks.getArrowLevel(arrow, this); + @Override + public void onArrowDamage(LivingEntity attacker, LivingEntity victim, Arrow arrow, int level, EntityDamageByEntityEvent event) { double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier"); double bonus = (multiplier * (level + 6)) + 1; diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/LifeSteal.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/LifeSteal.java index 181af306..a20a8948 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/LifeSteal.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/LifeSteal.java @@ -19,34 +19,16 @@ public class LifeSteal extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - - if (!(event.getEntity() instanceof LivingEntity)) - return; - - if (event.isCancelled()) - return; - - Player player = (Player) event.getDamager(); - - if(event.getEntity() instanceof Player) { - if(!AntigriefManager.canInjure(player, (Player) event.getEntity())) return; - } - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { double damage = event.getDamage(); double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "damage-multiplier-per-level"); double amountToHeal = damage * level * multiplier; - double newHealth = player.getHealth() + amountToHeal; - if (newHealth > player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { - newHealth = player.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); + double newHealth = attacker.getHealth() + amountToHeal; + if (newHealth > attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue()) { + newHealth = attacker.getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue(); } - player.setHealth(newHealth); + attacker.setHealth(newHealth); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Pentashot.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Pentashot.java index 2274b364..7ee4f750 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Pentashot.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Pentashot.java @@ -5,10 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.AbstractArrow; -import org.bukkit.entity.Arrow; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; +import org.bukkit.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityShootBowEvent; import org.bukkit.util.Vector; @@ -21,18 +18,9 @@ public class Pentashot extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onPentashotShoot(EntityShootBowEvent event) { - if (event.getProjectile().getType() != EntityType.ARROW) - return; - - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; + @Override + public void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) { for (int i = -2; i <= 2; i += 1) { if(i == 0) continue; @@ -41,9 +29,9 @@ public class Pentashot extends EcoEnchant { float radians = (float) ((float) i * Math.toRadians(this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "angle"))); velocity.rotateAroundY(radians); - Arrow arrow = player.launchProjectile(Arrow.class, velocity); - if(EnchantChecks.mainhand(player, Enchantment.ARROW_FIRE)) arrow.setFireTicks(Integer.MAX_VALUE); - arrow.setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); + Arrow arrow1 = shooter.launchProjectile(Arrow.class, velocity); + if(EnchantChecks.mainhand(shooter, Enchantment.ARROW_FIRE)) arrow1.setFireTicks(Integer.MAX_VALUE); + arrow1.setPickupStatus(AbstractArrow.PickupStatus.DISALLOWED); } } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Preservation.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Preservation.java index 1e561cba..f2f7cb8b 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Preservation.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Preservation.java @@ -4,6 +4,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; @@ -16,23 +17,14 @@ public class Preservation extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onPreservationHurt(EntityDamageEvent event) { + + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { if(event.getCause().equals(EntityDamageEvent.DamageCause.FALL)) return; - if (!(event.getEntity() instanceof Player)) - return; - - Player player = (Player) event.getEntity(); - - int totalPreservationPoints = EnchantChecks.getArmorPoints(player, this, 1); - - if (totalPreservationPoints == 0) - return; - double reduction = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "percent-less-per-level"); - double multiplier = 1 - (reduction/100 * totalPreservationPoints); + double multiplier = 1 - (reduction/100 * level); event.setDamage(event.getDamage() * multiplier); } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Razor.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Razor.java index 191a1412..71c47f6c 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Razor.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Razor.java @@ -18,26 +18,16 @@ public class Razor extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void razorHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) - return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if (!EnchantChecks.mainhand(player, this)) return; - - int level = EnchantChecks.getMainhandLevel(player, this); + @Override + public void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { double perLevelMultiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "per-level-multiplier"); double baseDamage = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "base-damage"); double extra = level*perLevelMultiplier + baseDamage; if(this.getConfig().getBool((EcoEnchants.CONFIG_LOCATION) + "decrease-if-cooldown")) { - extra *= Cooldown.getCooldown(player); + if(attacker instanceof Player) { + extra *= Cooldown.getCooldown((Player) attacker); + } } event.setDamage(event.getDamage() + extra); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Spring.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Spring.java index a3e273c2..08308fa1 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Spring.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Spring.java @@ -5,6 +5,7 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.Material; +import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.entity.EntityDamageEvent; @@ -23,43 +24,17 @@ public class Spring extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onPlayerDamage(EntityDamageEvent event) { - if (!(event.getEntity() instanceof Player)) - return; - Player player = (Player) event.getEntity(); - if (!EnchantChecks.boots(player, this)) return; + @Override + public void onDamageWearingArmor(LivingEntity victim, int level, EntityDamageEvent event) { if (event.getCause() == EntityDamageEvent.DamageCause.FALL) { event.setCancelled(true); } } - private final Set prevPlayersOnGround = Sets.newHashSet(); - private static final DecimalFormat df = new DecimalFormat("0.00"); - - @EventHandler - public void onMove(PlayerMoveEvent e) { - Player player = e.getPlayer(); - if (player.getVelocity().getY() > 0) { - float jumpVelocity = 0.42f; - if (player.hasPotionEffect(PotionEffectType.JUMP)) { - jumpVelocity += ((float) player.getPotionEffect(PotionEffectType.JUMP).getAmplifier() + 1) * 0.1F; - } - jumpVelocity = Float.parseFloat(df.format(jumpVelocity).replace(',', '.')); - if (e.getPlayer().getLocation().getBlock().getType() != Material.LADDER && prevPlayersOnGround.contains(player.getUniqueId())) { - if (!player.isOnGround() && Float.compare((float) player.getVelocity().getY(), jumpVelocity) == 0) { - if (!EnchantChecks.boots(player, this)) return; - - double multiplier = 0.5 + (double) ((EnchantChecks.getBootsLevel(player, this) * EnchantChecks.getBootsLevel(player, this)) / 4 - 0.2) / 3; - player.setVelocity(player.getLocation().getDirection().multiply(multiplier).setY(multiplier)); - } - } - } - if (player.isOnGround()) { - prevPlayersOnGround.add(player.getUniqueId()); - } else { - prevPlayersOnGround.remove(player.getUniqueId()); - } + @Override + public void onJump(Player player, int level, PlayerMoveEvent event) { + double multiplier = 0.5 + (double) ((level * level) / 4 - 0.2) / 3; + player.setVelocity(player.getLocation().getDirection().multiply(multiplier).setY(multiplier)); } } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Streamlining.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Streamlining.java index 20d83ba9..426bb805 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Streamlining.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Streamlining.java @@ -18,23 +18,14 @@ public class Streamlining extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onEquip(ArmorEquipEvent event) { - final Player player = event.getPlayer(); - new BukkitRunnable() { - public void run() { - if (!EnchantChecks.boots(player, EcoEnchants.STREAMLINING)) { - player.setWalkSpeed(0.2f); - return; - } + @Override + public void onArmorEquip(Player player, int level, ArmorEquipEvent event) { + if(level == 0) { + player.setWalkSpeed(0.2f); + return; + } - int level = EnchantChecks.getBootsLevel(player, EcoEnchants.STREAMLINING); - double speed; - player.setWalkSpeed((float) (0.2 + (level * EcoEnchants.STREAMLINING.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "speed-per-level")))); - - } - }.runTaskLater(EcoEnchantsPlugin.getInstance(), 1); + player.setWalkSpeed((float) (0.2 + (level * EcoEnchants.STREAMLINING.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "speed-per-level")))); } - } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Volatile.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Volatile.java index 1606b900..5fc37364 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Volatile.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Volatile.java @@ -21,25 +21,15 @@ public class Volatile extends EcoEnchant { // START OF LISTENERS - @EventHandler - public void onHit(EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player)) + + @Override + public void onMeleeAttack(LivingEntity uncastAttacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) { + if(!(uncastAttacker instanceof Player)) return; + + Player attacker = (Player) uncastAttacker; + + if (Cooldown.getCooldown(attacker) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) return; - if (!(event.getEntity() instanceof LivingEntity)) - return; - - Player player = (Player) event.getDamager(); - - LivingEntity victim = (LivingEntity) event.getEntity(); - - if(!AntigriefManager.canInjure(player, victim)) return; - - if (!EnchantChecks.mainhand(player, this)) return; - - if (Cooldown.getCooldown(player) != 1.0f && !this.getConfig().getBool(EcoEnchants.CONFIG_LOCATION + "allow-not-fully-charged")) - return; - - int level = EnchantChecks.getMainhandLevel(player, this); if (NumberUtils.randFloat(0, 1) > level * 0.01 * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "chance-per-level")) return; @@ -49,13 +39,13 @@ public class Volatile extends EcoEnchant { float power = (float) (0.5 + (level * 0.5)); - if (!AntigriefManager.canCreateExplosion(player, event.getEntity().getLocation())) return; + if (!AntigriefManager.canCreateExplosion(attacker, event.getEntity().getLocation())) return; if (breakblocks) { - if (!AntigriefManager.canBreakBlock(player, event.getEntity().getLocation().getWorld().getBlockAt(event.getEntity().getLocation()))) + if (!AntigriefManager.canBreakBlock(attacker, event.getEntity().getLocation().getWorld().getBlockAt(event.getEntity().getLocation()))) return; } - double distance = player.getLocation().distance(victim.getLocation()); + double distance = attacker.getLocation().distance(victim.getLocation()); Location explosionLoc = victim.getEyeLocation(); victim.getWorld().createExplosion(explosionLoc, power, fire, breakblocks); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/Watcher.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/Watcher.java index 752c2821..ebb44384 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/Watcher.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/Watcher.java @@ -16,8 +16,8 @@ public interface Watcher { default void onTridentDamage(LivingEntity attacker, LivingEntity victim, Trident trident, int level, EntityDamageByEntityEvent event) {} default void onJump(Player player, int level, PlayerMoveEvent event) {} default void onMeleeAttack(LivingEntity attacker, LivingEntity victim, int level, EntityDamageByEntityEvent event) {} - default void onBowShoot(LivingEntity shooter, int level, EntityShootBowEvent event) {} - default void onFallDamage(LivingEntity shooter, int level, EntityDamageEvent event) {} + default void onBowShoot(LivingEntity shooter, Arrow arrow, int level, EntityShootBowEvent event) {} + default void onFallDamage(LivingEntity faller, int level, EntityDamageEvent event) {} default void onArrowHit(LivingEntity shooter, int level, ProjectileHitEvent event) {} default void onTridentHit(LivingEntity shooter, int level, ProjectileHitEvent event) {} default void onBlockBreak(Player player, Block block, int level, BlockBreakEvent event) {} @@ -25,4 +25,5 @@ public interface Watcher { default void onArmorEquip(Player player, int level, ArmorEquipEvent event) {} default void onDamageBlock(Player player, Block block, int level, BlockDamageEvent event) {} default void onTridentLaunch(LivingEntity shooter, Trident trident, int level, ProjectileLaunchEvent event) {} + default void onDeflect(Player blocker, LivingEntity attacker, int level, EntityDamageByEntityEvent event) {} } diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/WatcherTriggers.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/WatcherTriggers.java index 911cdae3..faaacac9 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/WatcherTriggers.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/WatcherTriggers.java @@ -39,6 +39,8 @@ public class WatcherTriggers implements Listener { Arrow arrow = (Arrow) event.getDamager(); LivingEntity victim = (LivingEntity) event.getEntity(); + if(victim.hasMetadata("NPC")) return; + if(attacker instanceof Player) { if (!AntigriefManager.canInjure((Player) attacker, victim)) return; } @@ -46,6 +48,8 @@ public class WatcherTriggers implements Listener { if(event.isCancelled()) return; EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; if (!EnchantChecks.arrow(arrow, enchant)) return; int level = EnchantChecks.getArrowLevel(arrow, enchant); enchant.onArrowDamage(attacker, victim, arrow, level, event); @@ -72,11 +76,15 @@ public class WatcherTriggers implements Listener { LivingEntity victim = (LivingEntity) event.getEntity(); + if(victim.hasMetadata("NPC")) return; + if(attacker instanceof Player) { if (!AntigriefManager.canInjure((Player) attacker, victim)) return; } EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; if (!EnchantChecks.item(item, enchant)) return; int level = EnchantChecks.getItemLevel(item, enchant); enchant.onTridentDamage(attacker, victim, trident, level, event); @@ -99,6 +107,8 @@ public class WatcherTriggers implements Listener { if (event.getPlayer().getLocation().getBlock().getType() != Material.LADDER && prevPlayersOnGround.contains(player.getUniqueId())) { if (!player.isOnGround() && Float.compare((float) player.getVelocity().getY(), jumpVelocity) == 0) { EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; int level = EnchantChecks.getArmorPoints(player, enchant); if(level == 0) return; enchant.onJump(player, level, event); @@ -127,11 +137,15 @@ public class WatcherTriggers implements Listener { LivingEntity attacker = (LivingEntity) event.getDamager(); LivingEntity victim = (LivingEntity) event.getEntity(); + if(victim.hasMetadata("NPC")) return; + if(attacker instanceof Player) { if (!AntigriefManager.canInjure((Player) attacker, victim)) return; } EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; if (!EnchantChecks.mainhand(attacker, enchant)) return; int level = EnchantChecks.getMainhandLevel(attacker, enchant); enchant.onMeleeAttack(attacker, victim, level, event); @@ -144,11 +158,14 @@ public class WatcherTriggers implements Listener { return; LivingEntity shooter = event.getEntity(); + Arrow arrow = (Arrow) event.getProjectile(); EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; if (!EnchantChecks.mainhand(shooter, enchant)) return; int level = EnchantChecks.getMainhandLevel(shooter, enchant); - enchant.onBowShoot(shooter, level, event); + enchant.onBowShoot(shooter, arrow, level, event); })); } @@ -163,6 +180,8 @@ public class WatcherTriggers implements Listener { LivingEntity victim = (LivingEntity) event.getEntity(); EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; int level = EnchantChecks.getArmorPoints(victim, enchant); if(level == 0) return; enchant.onFallDamage(victim, level, event); @@ -180,6 +199,7 @@ public class WatcherTriggers implements Listener { LivingEntity shooter = (LivingEntity) event.getEntity().getShooter(); EcoEnchants.getAll().forEach((enchant -> { + if(!enchant.isEnabled()) return; if (!EnchantChecks.arrow(arrow, enchant)) return; int level = EnchantChecks.getArrowLevel(arrow, enchant); enchant.onArrowHit(shooter, level, event); @@ -198,6 +218,7 @@ public class WatcherTriggers implements Listener { LivingEntity shooter = (LivingEntity) event.getEntity().getShooter(); EcoEnchants.getAll().forEach((enchant -> { + if(!enchant.isEnabled()) return; if (!EnchantChecks.item(item, enchant)) return; int level = EnchantChecks.getItemLevel(item, enchant); enchant.onTridentHit(shooter, level, event); @@ -215,6 +236,8 @@ public class WatcherTriggers implements Listener { return; EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; if (!EnchantChecks.mainhand(player, enchant)) return; int level = EnchantChecks.getMainhandLevel(player, enchant); enchant.onBlockBreak(player, block, level, event); @@ -229,6 +252,8 @@ public class WatcherTriggers implements Listener { LivingEntity victim = (LivingEntity) event.getEntity(); EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; int level = EnchantChecks.getArmorPoints(victim, enchant); if(level == 0) return; enchant.onDamageWearingArmor(victim, level, event); @@ -241,6 +266,8 @@ public class WatcherTriggers implements Listener { Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> { EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; int level = EnchantChecks.getArmorPoints(player, enchant); enchant.onArmorEquip(player, level, event); })); @@ -252,7 +279,12 @@ public class WatcherTriggers implements Listener { Player player = event.getPlayer(); Block block = event.getBlock(); + if(event.getBlock().getDrops(player.getInventory().getItemInMainHand()).isEmpty()) + return; + EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; if (!EnchantChecks.mainhand(player, enchant)) return; int level = EnchantChecks.getMainhandLevel(player, enchant); enchant.onDamageBlock(player, block, level, event); @@ -272,9 +304,38 @@ public class WatcherTriggers implements Listener { ItemStack item = TridentStack.getTridentStack(trident); EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; if (!EnchantChecks.item(item, enchant)) return; int level = EnchantChecks.getItemLevel(item, enchant); enchant.onTridentLaunch(shooter, trident, level, event); })); } + + @EventHandler(ignoreCancelled = true) + public void onDeflect(EntityDamageByEntityEvent event) { + if (!(event.getEntity() instanceof Player)) + return; + + if (!(event.getDamager() instanceof LivingEntity)) + return; + + Player blocker = (Player) event.getEntity(); + + LivingEntity attacker = (LivingEntity) event.getDamager(); + + if(!blocker.isBlocking()) return; + + if(!AntigriefManager.canInjure(blocker, attacker)) return; + + EcoEnchants.getAll().forEach((enchant -> { + if(event.isCancelled()) return; + if(!enchant.isEnabled()) return; + int level; + if (!EnchantChecks.offhand(blocker, enchant) && !EnchantChecks.mainhand(blocker, enchant)) return; + if(EnchantChecks.offhand(blocker, enchant)) level = EnchantChecks.getOffhandLevel(blocker, enchant); + else level = EnchantChecks.getMainhandLevel(blocker, enchant); + enchant.onDeflect(blocker, attacker, level, event); + })); + } }