From f164b76c621c1d462439bf148e5eb4f7ab36feaa Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Mon, 17 Jan 2022 23:40:39 +0300 Subject: [PATCH 1/4] Fixed Intellect and Wisdom sometimes giving more exp than they should --- .../ecoenchants/normal/Wisdom.java | 28 +++++++++++++++++-- .../ecoenchants/special/Intellect.java | 21 +++++++++++++- 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wisdom.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wisdom.java index b41a0ed0..e46edc12 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wisdom.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wisdom.java @@ -9,7 +9,13 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.List; + public class Wisdom extends EcoEnchant { + + private static final List toPrevent = new ArrayList<>(); + public Wisdom() { super( "wisdom", EnchantmentType.NORMAL @@ -24,7 +30,13 @@ public class Wisdom extends EcoEnchant { return; } - if (!EnchantChecks.mainhand(player, this)) { + if (!this.areRequirementsMet(player)) { + return; + } + + int level = EnchantChecks.getMainhandLevel(player, this); + + if (level == 0) { return; } @@ -32,8 +44,18 @@ public class Wisdom extends EcoEnchant { return; } - int level = EnchantChecks.getMainhandLevel(player, this); + int newValue = toPrevent.contains(player) ? event.getExpChangeEvent().getAmount() : + (int) Math.ceil(event.getExpChangeEvent().getAmount() * + (1 + (level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-point")))); - event.getExpChangeEvent().setAmount((int) Math.ceil(event.getExpChangeEvent().getAmount() * (1 + (level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-point"))))); + event.getExpChangeEvent().setAmount(newValue); + + if (newValue > player.getExpToLevel()) { + if (!toPrevent.contains(player)){ + toPrevent.add(player); + } + } else { + toPrevent.remove(player); + } } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Intellect.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Intellect.java index 2f3282b7..cf6ca78b 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Intellect.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Intellect.java @@ -7,9 +7,16 @@ import com.willfp.ecoenchants.enchantments.meta.EnchantmentType; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.entity.PlayerDeathEvent; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.List; + public class Intellect extends EcoEnchant { + + private static final List toPrevent = new ArrayList<>(); + public Intellect() { super( "intellect", EnchantmentType.SPECIAL @@ -38,6 +45,18 @@ public class Intellect extends EcoEnchant { return; } - event.getExpChangeEvent().setAmount((int) Math.ceil(event.getExpChangeEvent().getAmount() * (1 + (level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-point"))))); + int newValue = toPrevent.contains(player) ? event.getExpChangeEvent().getAmount() : + (int) Math.ceil(event.getExpChangeEvent().getAmount() * + (1 + (level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-point")))); + + event.getExpChangeEvent().setAmount(newValue); + + if (newValue > player.getExpToLevel()) { + if (!toPrevent.contains(player)){ + toPrevent.add(player); + } + } else { + toPrevent.remove(player); + } } } From c538a007da804a5ddf4448ffdfcc0f3b115bdca0 Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Mon, 24 Jan 2022 23:09:01 +0300 Subject: [PATCH 2/4] Added AntigriefManager support to Corrosive enchantment --- .../enchantments/ecoenchants/normal/Corrosive.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Corrosive.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Corrosive.java index 768d6bbe..09dd2612 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Corrosive.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Corrosive.java @@ -1,5 +1,6 @@ package com.willfp.ecoenchants.enchantments.ecoenchants.normal; +import com.willfp.eco.core.integrations.antigrief.AntigriefManager; import com.willfp.eco.util.DurabilityUtils; import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.meta.EnchantmentType; @@ -30,6 +31,12 @@ public class Corrosive extends EcoEnchant { return; } + if (attacker instanceof Player player) { + if (!AntigriefManager.canInjure(player, uncastVictim)) { + return; + } + } + ArrayList armor = new ArrayList<>(Arrays.asList(victim.getInventory().getArmorContents())); if (armor.isEmpty()) { return; From 84e57fb2d6e19046f8930d677557029ba001e8a2 Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Mon, 24 Jan 2022 23:09:34 +0300 Subject: [PATCH 3/4] Added AntigriefManager support to Instability enchantment --- .../ecoenchants/special/Instability.java | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Instability.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Instability.java index 01ec32e7..0621730c 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Instability.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Instability.java @@ -5,20 +5,40 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchants; import com.willfp.ecoenchants.enchantments.meta.EnchantmentType; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; -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.EntityDamageEvent; import org.bukkit.event.entity.ProjectileHitEvent; import org.jetbrains.annotations.NotNull; +import java.util.ArrayList; +import java.util.List; + public class Instability extends EcoEnchant { + + private static final List toProtect = new ArrayList<>(); + public Instability() { super( "instability", EnchantmentType.SPECIAL ); } + @EventHandler + public void onInstabilityExplode(@NotNull final EntityDamageEvent event) { + if (!toProtect.contains(event.getEntity())) { + return; + } + + if (event.getCause() != EntityDamageEvent.DamageCause.ENTITY_EXPLOSION && event.getCause() + != EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) { + return; + } + + event.setCancelled(true); + toProtect.remove(event.getEntity()); + } + @EventHandler public void onInstabilityLand(@NotNull final ProjectileHitEvent event) { if (event.getEntityType() != EntityType.ARROW) { @@ -60,6 +80,16 @@ public class Instability extends EcoEnchant { breakblocks = AntigriefManager.canBreakBlock(player, event.getEntity().getLocation().getWorld().getBlockAt(event.getEntity().getLocation())); } + List toAdd = event.getEntity().getNearbyEntities(power, power, power) + .stream().filter(entity -> entity instanceof LivingEntity && !AntigriefManager.canInjure(player, (LivingEntity) entity)) + .toList(); + + toProtect.addAll( + toAdd + ); + + this.getPlugin().getScheduler().runLater(() -> toProtect.removeAll(toAdd), 20); + event.getEntity().getWorld().createExplosion(event.getEntity().getLocation().getX(), event.getEntity().getLocation().getY(), event.getEntity().getLocation().getZ(), power, fire, breakblocks); event.getEntity().remove(); From d9d9e0a40be00d4e6c4cf16bc40c487ba0097db2 Mon Sep 17 00:00:00 2001 From: _OfTeN_ Date: Mon, 24 Jan 2022 23:15:46 +0300 Subject: [PATCH 4/4] Revert "Fixed Intellect and Wisdom sometimes giving more exp than they should" This reverts commit f164b76c621c1d462439bf148e5eb4f7ab36feaa. --- .../ecoenchants/normal/Wisdom.java | 28 ++----------------- .../ecoenchants/special/Intellect.java | 21 +------------- 2 files changed, 4 insertions(+), 45 deletions(-) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wisdom.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wisdom.java index e46edc12..b41a0ed0 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wisdom.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/normal/Wisdom.java @@ -9,13 +9,7 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.List; - public class Wisdom extends EcoEnchant { - - private static final List toPrevent = new ArrayList<>(); - public Wisdom() { super( "wisdom", EnchantmentType.NORMAL @@ -30,13 +24,7 @@ public class Wisdom extends EcoEnchant { return; } - if (!this.areRequirementsMet(player)) { - return; - } - - int level = EnchantChecks.getMainhandLevel(player, this); - - if (level == 0) { + if (!EnchantChecks.mainhand(player, this)) { return; } @@ -44,18 +32,8 @@ public class Wisdom extends EcoEnchant { return; } - int newValue = toPrevent.contains(player) ? event.getExpChangeEvent().getAmount() : - (int) Math.ceil(event.getExpChangeEvent().getAmount() * - (1 + (level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-point")))); + int level = EnchantChecks.getMainhandLevel(player, this); - event.getExpChangeEvent().setAmount(newValue); - - if (newValue > player.getExpToLevel()) { - if (!toPrevent.contains(player)){ - toPrevent.add(player); - } - } else { - toPrevent.remove(player); - } + event.getExpChangeEvent().setAmount((int) Math.ceil(event.getExpChangeEvent().getAmount() * (1 + (level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-point"))))); } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Intellect.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Intellect.java index cf6ca78b..2f3282b7 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Intellect.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/ecoenchants/special/Intellect.java @@ -7,16 +7,9 @@ import com.willfp.ecoenchants.enchantments.meta.EnchantmentType; import com.willfp.ecoenchants.enchantments.util.EnchantChecks; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; -import org.bukkit.event.entity.PlayerDeathEvent; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.List; - public class Intellect extends EcoEnchant { - - private static final List toPrevent = new ArrayList<>(); - public Intellect() { super( "intellect", EnchantmentType.SPECIAL @@ -45,18 +38,6 @@ public class Intellect extends EcoEnchant { return; } - int newValue = toPrevent.contains(player) ? event.getExpChangeEvent().getAmount() : - (int) Math.ceil(event.getExpChangeEvent().getAmount() * - (1 + (level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-point")))); - - event.getExpChangeEvent().setAmount(newValue); - - if (newValue > player.getExpToLevel()) { - if (!toPrevent.contains(player)){ - toPrevent.add(player); - } - } else { - toPrevent.remove(player); - } + event.getExpChangeEvent().setAmount((int) Math.ceil(event.getExpChangeEvent().getAmount() * (1 + (level * this.getConfig().getDouble(EcoEnchants.CONFIG_LOCATION + "bonus-per-point"))))); } }