diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java index 4f3b962f..0b3050ad 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/EcoEnchant.java @@ -4,7 +4,6 @@ import com.willfp.ecoenchants.config.ConfigManager; import com.willfp.ecoenchants.config.configs.EnchantmentConfig; import com.willfp.ecoenchants.enchantments.meta.EnchantmentRarity; import com.willfp.ecoenchants.enchantments.util.Watcher; -import com.willfp.ecoenchants.util.Logger; import com.willfp.ecoenchants.util.interfaces.Registerable; import com.willfp.ecoenchants.util.optional.Prerequisite; import net.md_5.bungee.api.ChatColor; @@ -44,7 +43,6 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist private final Set target = new HashSet<>(); private boolean enabled; - private boolean registered = false; /** * Create new EcoEnchant matching builder and prerequisites @@ -59,14 +57,8 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist this.configVersion = builder.configVersion; this.config = builder.config; - if(!Arrays.stream(prerequisites).allMatch(Prerequisite::isMet)) { - Arrays.stream(prerequisites).forEach(prerequisite -> { - if(!prerequisite.isMet()) { - Logger.warn("Enchantment " + builder.key + " does not match prerequisite \"" + prerequisite.getDescription() + "\". It will not be available."); - } - }); + if(!Prerequisite.areMet(prerequisites)) return; - } this.update(); this.add(); @@ -131,8 +123,6 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist f.setAccessible(false); Enchantment.registerEnchantment(this); - - this.registered = true; } catch (NoSuchFieldException | IllegalAccessException ignored) {} } @@ -174,14 +164,6 @@ public abstract class EcoEnchant extends Enchantment implements Listener, Regist return this.enabled; } - /** - * Get if enchantment is registered - * @return If registered - */ - public boolean isRegistered() { - return this.registered; - } - /** * Get permission name of enchantment * @return The permission name diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/itemtypes/Artifact.java b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/itemtypes/Artifact.java index d72cb4b3..536a3b29 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/itemtypes/Artifact.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/enchantments/itemtypes/Artifact.java @@ -17,6 +17,7 @@ import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Trident; import org.bukkit.event.EventHandler; +import org.bukkit.event.HandlerList; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.ProjectileLaunchEvent; @@ -39,7 +40,11 @@ public abstract class Artifact extends EcoEnchant { protected Artifact(String key, double version, Prerequisite[] prerequisites) { super(new EcoEnchantBuilder(key, EnchantmentType.ARTIFACT, version), prerequisites); - if(!this.isRegistered()) return; + + if(!Prerequisite.areMet(prerequisites)) { + HandlerList.unregisterAll(this); // Prevent events firing + return; + } this.particle = this.getParticle(); this.extra = this.getDustOptions(); diff --git a/Plugin/src/main/java/com/willfp/ecoenchants/util/optional/Prerequisite.java b/Plugin/src/main/java/com/willfp/ecoenchants/util/optional/Prerequisite.java index 19c72581..e736a624 100644 --- a/Plugin/src/main/java/com/willfp/ecoenchants/util/optional/Prerequisite.java +++ b/Plugin/src/main/java/com/willfp/ecoenchants/util/optional/Prerequisite.java @@ -3,6 +3,8 @@ package com.willfp.ecoenchants.util.optional; import com.willfp.ecoenchants.util.ClassUtils; import org.bukkit.Bukkit; +import java.util.Arrays; + public enum Prerequisite { MinVer1_16( false, @@ -37,4 +39,8 @@ public enum Prerequisite { MinVer1_16.setMet(!Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3].contains("15")); HasPaper.setMet(ClassUtils.exists("com.destroystokyo.paper.event.player.PlayerElytraBoostEvent")); } + + public static boolean areMet(Prerequisite[] prerequisites) { + return Arrays.stream(prerequisites).allMatch(Prerequisite::isMet); + } }