From 42b493f96d87b7a4795b3a5f0666fc47aae9ea89 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sat, 29 Aug 2020 14:38:57 +0100 Subject: [PATCH] Modified Weakening and Marking --- .../ecoenchants/normal/Marking.java | 32 ++++++++++------- .../ecoenchants/normal/Weakening.java | 36 ++++++++++++------- 2 files changed, 43 insertions(+), 25 deletions(-) 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 4e4821fc..b6b47a55 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 @@ -1,5 +1,6 @@ package com.willfp.ecoenchants.enchantments.ecoenchants.normal; +import com.sun.javaws.Main; import com.willfp.ecoenchants.EcoEnchantsPlugin; import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; @@ -13,6 +14,8 @@ 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.metadata.FixedMetadataValue; import java.util.HashSet; import java.util.Set; @@ -26,14 +29,12 @@ public class Marking extends EcoEnchant { // START OF LISTENERS - Set weakened = new HashSet<>(); - @EventHandler public void onHit(EntityDamageByEntityEvent event) { if (!(event.getDamager() instanceof Arrow)) return; - if(!(((Arrow) event.getDamager()).getShooter() instanceof Player)) + if (!(((Arrow) event.getDamager()).getShooter() instanceof Player)) return; if (!(event.getEntity() instanceof LivingEntity)) @@ -43,13 +44,7 @@ public class Marking extends EcoEnchant { LivingEntity victim = (LivingEntity) event.getEntity(); - if(weakened.contains(victim)) { - double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier-while-weak"); - - event.setDamage(event.getDamage() * multiplier); - } - - if(!AntigriefManager.canInjure(player, victim)) return; + if (!AntigriefManager.canInjure(player, victim)) return; if (!HasEnchant.playerHeld(player, this)) return; @@ -58,10 +53,23 @@ public class Marking extends EcoEnchant { int ticksPerLevel = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "ticks-per-level"); int ticks = ticksPerLevel * level; - weakened.add(victim); + victim.setMetadata("marked", new FixedMetadataValue(EcoEnchantsPlugin.getInstance(), true)); Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> { - weakened.remove(victim); + victim.removeMetadata("marked", EcoEnchantsPlugin.getInstance()); }, ticks); } + + @EventHandler + public void onHitWhileMarked(EntityDamageEvent event) { + if(!(event.getEntity() instanceof LivingEntity)) + return; + + LivingEntity victim = (LivingEntity) event.getEntity(); + + if(!victim.hasMetadata("marked")) + return; + + event.setDamage(event.getDamage() * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier-while-weak")); + } } 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 9b42631c..2aa2f631 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 @@ -1,5 +1,6 @@ package com.willfp.ecoenchants.enchantments.ecoenchants.normal; +import com.sun.javaws.Main; import com.willfp.ecoenchants.EcoEnchantsPlugin; import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchantBuilder; @@ -8,26 +9,28 @@ import com.willfp.ecoenchants.integrations.antigrief.AntigriefManager; import com.willfp.ecoenchants.nms.Target; import com.willfp.ecoenchants.util.HasEnchant; import org.bukkit.Bukkit; +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; +import org.bukkit.event.entity.EntityDamageEvent; +import org.bukkit.metadata.FixedMetadataValue; import java.util.HashSet; import java.util.Set; + public class Weakening extends EcoEnchant { public Weakening() { super( - new EcoEnchantBuilder("weakening", EnchantmentType.NORMAL, Target.Applicable.SWORD, 4.0) + new EcoEnchantBuilder("weakening", EnchantmentType.NORMAL, new Target.Applicable[]{Target.Applicable.SWORD, Target.Applicable.AXE}, 4.0) ); } // START OF LISTENERS - Set weakened = new HashSet<>(); - @EventHandler - public void weakeningHit(EntityDamageByEntityEvent event) { + public void onHit(EntityDamageByEntityEvent event) { if (!(event.getDamager() instanceof Player)) return; @@ -38,13 +41,7 @@ public class Weakening extends EcoEnchant { LivingEntity victim = (LivingEntity) event.getEntity(); - if(weakened.contains(victim)) { - double multiplier = this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier-while-weak"); - - event.setDamage(event.getDamage() * multiplier); - } - - if(!AntigriefManager.canInjure(player, victim)) return; + if (!AntigriefManager.canInjure(player, victim)) return; if (!HasEnchant.playerHeld(player, this)) return; @@ -53,10 +50,23 @@ public class Weakening extends EcoEnchant { int ticksPerLevel = this.getConfig().getInt(EcoEnchants.CONFIG_LOCATION + "ticks-per-level"); int ticks = ticksPerLevel * level; - weakened.add(victim); + victim.setMetadata("weak", new FixedMetadataValue(EcoEnchantsPlugin.getInstance(), true)); Bukkit.getScheduler().runTaskLater(EcoEnchantsPlugin.getInstance(), () -> { - weakened.remove(victim); + victim.removeMetadata("weak", EcoEnchantsPlugin.getInstance()); }, ticks); } + + @EventHandler + public void onDamage(EntityDamageEvent event) { + if(!(event.getEntity() instanceof LivingEntity)) + return; + + LivingEntity victim = (LivingEntity) event.getEntity(); + + if(!victim.hasMetadata("weak")) + return; + + event.setDamage(event.getDamage() * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "multiplier-while-weak")); + } }