From 851489068dc9c5051b5e26e077ecb0c7bfb4c272 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Wed, 24 Jul 2024 15:55:18 +0200 Subject: [PATCH 1/5] Register new enchantment on custom anvil reload. --- .../cuanvil/command/ReloadExecutor.kt | 4 +-- .../cuanvil/dependency/DependencyManager.kt | 9 +++++++ .../dependency/EcoEnchantDependency.kt | 27 ++++++++++++++++++- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt index e49793d..38a98c0 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/ReloadExecutor.kt @@ -51,8 +51,8 @@ class ReloadExecutor : CommandExecutor { // temporary: handle 1.21 update Update_1_21.handleUpdate() - // Register enchantment of compatible plugin and load configuration change. - DependencyManager.handleCompatibilityConfig() + // Handle dependency reload + DependencyManager.handleConfigReload() // Call event val configReadyEvent = CAConfigReadyEvent() diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt index f3962d5..3512699 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/DependencyManager.kt @@ -44,4 +44,13 @@ object DependencyManager { } + fun handleConfigReload(){ + // Register enchantment of compatible plugin and load configuration change. + handleCompatibilityConfig() + + // Then handle plugin reload + ecoEnchantCompatibility?.handleConfigReload() + + } + } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/EcoEnchantDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/EcoEnchantDependency.kt index 713a03c..e7bad3e 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/EcoEnchantDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/EcoEnchantDependency.kt @@ -1,5 +1,6 @@ package xyz.alexcrea.cuanvil.dependency +import com.willfp.ecoenchants.enchant.EcoEnchant import com.willfp.ecoenchants.enchant.EcoEnchants import io.delilaheve.CustomAnvil import org.bukkit.event.inventory.PrepareAnvilEvent @@ -17,15 +18,39 @@ class EcoEnchantDependency(private val ecoEnchantPlugin: Plugin) { PrepareAnvilEvent.getHandlerList().unregister(this.ecoEnchantPlugin) } + private var ecoEnchantOldEnchantments: MutableSet? = null fun registerEnchantments() { CustomAnvil.instance.logger.info("Preparing Eco Enchant compatibility...") - for (ecoEnchant in EcoEnchants.values()) { + val enchantments = EcoEnchants.values() + for (ecoEnchant in enchantments) { EnchantmentApi.unregisterEnchantment(ecoEnchant.enchantment) // As eco enchants is loaded before custom anvil and register enchantment to registry, we need to unregister old "vanilla" enchant. EnchantmentApi.registerEnchantment(CAEcoEnchant(ecoEnchant)) } + ecoEnchantOldEnchantments = HashSet(enchantments) + CustomAnvil.instance.logger.info("Eco Enchant should now work as expected !") } + fun handleConfigReload() { + // Should not happen in known case. + if(this.ecoEnchantOldEnchantments == null) return + + val newEnchantments = EcoEnchants.values() + + // Add new enchantments + for (ecoEnchant in newEnchantments) + if(!this.ecoEnchantOldEnchantments!!.contains(ecoEnchant)) + EnchantmentApi.registerEnchantment(CAEcoEnchant(ecoEnchant)) + + // Remove old enchantments that not now currently used + this.ecoEnchantOldEnchantments!!.removeAll(newEnchantments) + for (oldEnchantment in this.ecoEnchantOldEnchantments!!) { + EnchantmentApi.unregisterEnchantment(oldEnchantment.enchantment) + } + + this.ecoEnchantOldEnchantments = HashSet(newEnchantments) + } + } From 526e6a35284e98058441831be93460e087d0d8e5 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Wed, 24 Jul 2024 16:07:37 +0200 Subject: [PATCH 2/5] Edit README.md to reflect changes. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 077eabd..5cde745 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Here is a list of supported plugins with support status: - [Enchantment²](https://www.spigotmc.org/resources/enchants-squared-the-enchantsplus-rewrite-custom-enchantments-that-act-like-vanilla-ones.86747/): Officially supported by Custom Anvil but still experimental. Automatic configuration. - [EcoEnchant](https://www.spigotmc.org/resources/50-sale-%E2%8C%9B-ecoenchants-%E2%AD%95-250-enchantments-%E2%9C%85-create-custom-enchants-%E2%9C%A8-essentials-cmi-support.79573/): -Officially supported by Custom Anvil but still experimental. Need a server restart to add newly added enchantment. +Officially supported by Custom Anvil but still experimental. Need to use /anvilconfigreload or a server restart to add newly added enchantment. Use EcoEnchant restriction system by default.​ If you like Custom Anvil to support a specific custom enchantment plugin. From 9b3402e45f1f79a7d3b50192b855345c7ee03f0e Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Wed, 24 Jul 2024 16:49:07 +0200 Subject: [PATCH 3/5] Fix sorted list depending on GuiSharedConstant initialisation --- .../cuanvil/enchant/CAEnchantmentRegistry.java | 14 ++++++++++++++ .../config/global/AbstractEnchantConfigGui.java | 3 ++- .../cuanvil/gui/util/GuiSharedConstant.java | 9 +-------- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java index f4d3dec..3b285c1 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java @@ -24,6 +24,8 @@ public class CAEnchantmentRegistry { private final HashMap byKeyMap; private final HashMap byNameMap; + private final SortedSet nameSortedEnchantments; + private final List unoptimisedGetValues; private final List unoptimisedCleanValues; @@ -34,6 +36,8 @@ public class CAEnchantmentRegistry { byKeyMap = new HashMap<>(); byNameMap = new HashMap<>(); + nameSortedEnchantments = new TreeSet<>(Comparator.comparing(CAEnchantment::getName)); + unoptimisedGetValues = new ArrayList<>(); unoptimisedCleanValues = new ArrayList<>(); @@ -82,6 +86,7 @@ public class CAEnchantmentRegistry { byKeyMap.put(enchantment.getKey(), enchantment); byNameMap.put(enchantment.getName(), enchantment); + nameSortedEnchantments.add(enchantment); if(!enchantment.isGetOptimised()){ unoptimisedGetValues.add(enchantment); @@ -109,6 +114,8 @@ public class CAEnchantmentRegistry { byKeyMap.remove(enchantment.getKey()); byNameMap.remove(enchantment.getName()); + nameSortedEnchantments.remove(enchantment); + unoptimisedGetValues.remove(enchantment); unoptimisedCleanValues.remove(enchantment); return true; @@ -185,4 +192,11 @@ public class CAEnchantmentRegistry { return optimisedGetOperators; } + /** + * Get custom anvil enchantment sorted by name. + * @return An immutable sorted set of every registered enchantment sorted by name. + */ + public SortedSet getNameSortedEnchantments() { + return Collections.unmodifiableSortedSet(nameSortedEnchantments); + } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java index 369924b..5ba5691 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java @@ -4,6 +4,7 @@ import com.github.stefvanschie.inventoryframework.gui.GuiItem; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import org.bukkit.event.inventory.InventoryClickEvent; import xyz.alexcrea.cuanvil.enchant.CAEnchantment; +import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry; import xyz.alexcrea.cuanvil.gui.ValueUpdatableGui; import xyz.alexcrea.cuanvil.gui.config.list.SettingGuiListConfigGui; import xyz.alexcrea.cuanvil.gui.config.settings.SettingGui; @@ -37,7 +38,7 @@ public abstract class AbstractEnchantConfigGui getEveryDisplayableInstanceOfGeneric() { - return GuiSharedConstant.SORTED_ENCHANTMENT_LIST; + return CAEnchantmentRegistry.getInstance().getNameSortedEnchantments(); } @Override diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java index bcab7fa..c2bccf9 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/util/GuiSharedConstant.java @@ -7,20 +7,13 @@ import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; -import xyz.alexcrea.cuanvil.enchant.CAEnchantment; -import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry; import xyz.alexcrea.cuanvil.gui.config.MainConfigGui; import java.util.*; public class GuiSharedConstant { - public static final List SORTED_ENCHANTMENT_LIST; - - static { - SORTED_ENCHANTMENT_LIST = new ArrayList<>(CAEnchantmentRegistry.getInstance().values()); - SORTED_ENCHANTMENT_LIST.sort(Comparator.comparing(ench -> ench.getKey().getKey())); - } + private GuiSharedConstant(){} public static final Material SECONDARY_BACKGROUND_MATERIAL = Material.BLACK_STAINED_GLASS_PANE; public static final GuiItem SECONDARY_BACKGROUND_ITEM = GuiGlobalItems.backgroundItem(GuiSharedConstant.SECONDARY_BACKGROUND_MATERIAL); From b70887c5caae4af47aa2e989d4e1c817b72efce9 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Wed, 24 Jul 2024 16:57:22 +0200 Subject: [PATCH 4/5] Enchantment are now sorted on select gui. --- .../alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java | 8 ++++---- .../gui/config/settings/EnchantSelectSettingGui.java | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java index 3b285c1..01262f9 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java @@ -152,10 +152,10 @@ public class CAEnchantmentRegistry { /** * Gets a map of all the registered enchantments. - * @return Map of enchantments. + * @return Immutable map of enchantments. */ public Map registeredEnchantments() { - return byKeyMap; + return Collections.unmodifiableMap(byKeyMap); } /** @@ -178,7 +178,7 @@ public class CAEnchantmentRegistry { /** * Get "clean optimised operation" for get enchantments. - * @return Get mutable "clean enchantments optimised operation" list. + * @return Mutable "clean enchantments optimised operation" list. */ public List getOptimisedCleanOperators() { return optimisedCleanOperators; @@ -186,7 +186,7 @@ public class CAEnchantmentRegistry { /** * Get "get optimised operation" for get enchantments. - * @return Get mutable "get enchantments optimised operation" list. + * @return Mutable "get enchantments optimised operation" list. */ public List getOptimisedGetOperators() { return optimisedGetOperators; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantSelectSettingGui.java index 308d51f..2c50042 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantSelectSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/EnchantSelectSettingGui.java @@ -65,9 +65,9 @@ public class EnchantSelectSettingGui extends SettingGuiListConfigGui getEveryDisplayableInstanceOfGeneric() { Stream toDisplayStream; if(this.displayUnselected){ - toDisplayStream = CAEnchantmentRegistry.getInstance().values().stream(); + toDisplayStream = CAEnchantmentRegistry.getInstance().getNameSortedEnchantments().stream(); }else{ - toDisplayStream = this.selectedEnchant.stream(); + toDisplayStream = this.selectedEnchant.stream().sorted(Comparator.comparing(CAEnchantment::getName)); } Set illegalEnchantments = this.enchantContainer.illegalEnchantments(); From a6c2d5f1486b256ca9008013759e2dd73dc7a0a5 Mon Sep 17 00:00:00 2001 From: alexcrea <42614139+alexcrea@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:13:23 +0200 Subject: [PATCH 5/5] Sort new enchantment in gui on add. --- .../global/AbstractEnchantConfigGui.java | 40 +++++++++++++++++++ .../gui/config/list/ElementListConfigGui.java | 4 +- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java index 5ba5691..f9e2903 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/AbstractEnchantConfigGui.java @@ -53,6 +53,46 @@ public abstract class AbstractEnchantConfigGui extends ChestGui implements Valu this.pages.clear(); this.pages.add(this.firstPage); - for (T conflict : getEveryDisplayableInstanceOfGeneric()) { - updateValueForGeneric(conflict, false); + for (T generic : getEveryDisplayableInstanceOfGeneric()) { + updateValueForGeneric(generic, false); } update();