From 7612eac7653efc0b69620686bae9e977dbe59eb5 Mon Sep 17 00:00:00 2001 From: alexcrea Date: Tue, 3 Feb 2026 17:22:32 +0100 Subject: [PATCH] progress on using namespaced key instead of material --- build.gradle.kts | 8 ++- .../cuanvil/api/MaterialGroupApi.java | 9 +-- .../enchant/AdditionalTestEnchantment.java | 10 +-- .../enchant/wrapped/CAEEPreV5Enchantment.java | 7 ++- .../enchant/wrapped/CAEEV5Enchantment.java | 9 +-- .../cuanvil/enchant/wrapped/CAEcoEnchant.java | 7 ++- .../wrapped/CAIncompatibleAllEnchant.java | 5 +- .../wrapped/CALegacyEEEnchantment.java | 7 ++- .../enchant/wrapped/CALegacyEcoEnchant.java | 11 ++-- .../gui/config/SelectMaterialContainer.java | 13 ++-- .../gui/config/ask/SelectItemTypeGui.java | 3 +- .../elements/GroupConfigSubSettingGui.java | 13 ++-- .../settings/MaterialSelectSettingGui.java | 39 ++++++------ .../cuanvil/update/plugin/PUpdate_1_11_0.java | 13 +++- .../io/delilaheve/util/ConfigOptions.kt | 6 +- .../io/delilaheve/util/EnchantmentUtil.kt | 3 +- .../kotlin/io/delilaheve/util/ItemUtil.kt | 3 +- .../dependency/datapack/DataPackDependency.kt | 2 +- .../plugins/EcoItemDependencyUtil.kt | 34 +++++++++++ .../plugins/EnchantmentSquaredDependency.kt | 6 +- .../cuanvil/group/AbstractMaterialGroup.kt | 22 ++++--- .../cuanvil/group/EnchantConflictGroup.kt | 3 +- .../cuanvil/group/EnchantConflictManager.kt | 11 ++-- .../alexcrea/cuanvil/group/ExcludeGroup.kt | 15 ++--- .../alexcrea/cuanvil/group/IncludeGroup.kt | 15 ++--- .../cuanvil/group/ItemGroupManager.kt | 2 +- .../xyz/alexcrea/cuanvil/group/NegativeSet.kt | 51 ++++++++++++++++ .../cuanvil/listener/PrepareAnvilListener.kt | 17 +++--- .../cuanvil/recipe/AnvilCustomRecipe.kt | 7 +-- .../xyz/alexcrea/cuanvil/util/MaterialUtil.kt | 61 +++++++++++++++++++ .../alexcrea/cuanvil/util/UnitRepairUtil.kt | 5 +- .../cuanvil/api/MaterialGroupApiTests.java | 4 +- 32 files changed, 297 insertions(+), 124 deletions(-) create mode 100644 src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EcoItemDependencyUtil.kt create mode 100644 src/main/kotlin/xyz/alexcrea/cuanvil/group/NegativeSet.kt create mode 100644 src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt diff --git a/build.gradle.kts b/build.gradle.kts index 78f0724..49f0576 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -65,11 +65,15 @@ dependencies { // EnchantsSquaredRewritten compileOnly(files("libs/EnchantsSquared.jar")) - // EcoEnchants - compileOnly("com.willfp:EcoEnchants:12.11.1") + // EcoEnchants & item + compileOnly("com.willfp:libreforge:4.79.0:all") compileOnly("com.willfp:eco:6.74.5") + + compileOnly("com.willfp:EcoEnchants:12.11.1") compileOnly(project(":impl:LegacyEcoEnchant")) + compileOnly("com.willfp:EcoItems:5.66.0") + // ExcellentEnchants implementation(project(":impl:ExcellentEnchant5_4")) compileOnly("su.nightexpress.excellentenchants:Core:5.1.0") { diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/MaterialGroupApi.java b/src/main/java/xyz/alexcrea/cuanvil/api/MaterialGroupApi.java index 48dd500..cd71c7a 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/api/MaterialGroupApi.java +++ b/src/main/java/xyz/alexcrea/cuanvil/api/MaterialGroupApi.java @@ -3,6 +3,7 @@ package xyz.alexcrea.cuanvil.api; import io.delilaheve.CustomAnvil; import io.delilaheve.util.ConfigOptions; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.configuration.file.FileConfiguration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -123,7 +124,7 @@ public class MaterialGroupApi { FileConfiguration config = ConfigHolder.ITEM_GROUP_HOLDER.getConfig(); String basePath = group.getName() + "."; - Set materialSet = group.getNonGroupInheritedMaterials(); + Set materialSet = group.getNonGroupInheritedMaterials(); Set groupSet = group.getGroups(); boolean empty = true; @@ -153,7 +154,7 @@ public class MaterialGroupApi { FileConfiguration config = ConfigHolder.ITEM_GROUP_HOLDER.getConfig(); String basePath = group.getName() + "."; - EnumSet materials = group.getMaterials(); + Set materials = group.getMaterials(); if (materials.isEmpty()) return false; @@ -163,8 +164,8 @@ public class MaterialGroupApi { return true; } - public static List materialSetToStringList(@NotNull Set materials) { - return materials.stream().map(material -> material.getKey().getKey().toLowerCase()).toList(); + public static List materialSetToStringList(@NotNull Set materials) { + return materials.stream().map(NamespacedKey::toString).toList(); } public static List materialGroupSetToStringList(@NotNull Set groups) { diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/AdditionalTestEnchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/AdditionalTestEnchantment.java index 832e5af..821838f 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/AdditionalTestEnchantment.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/AdditionalTestEnchantment.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.enchant; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -11,24 +12,23 @@ public interface AdditionalTestEnchantment { /** * Test if the provided enchantments can be compatible with this enchantment. only non-Custom Anvil conflict. * @param enchantments Immutable map of validated enchantments for the item. - * @param itemMat Material of the tested item. + * @param itemType Material namespaced key of the tested item. * @return If there is a conflict with the enchantments. */ boolean isEnchantConflict( @NotNull Map enchantments, - @NotNull Material itemMat); - + @NotNull NamespacedKey itemType); /** * Test if the provided item can be compatible with this enchantment. only non-Custom Anvil conflict. * @param enchantments Immutable map of validated enchantments for the item. - * @param itemMat Material of the tested item. + * @param itemType Material namespaced key of the tested item. * @param item Provide a new instance of the used item stack with the partial enchantment applied. * @return If there is a conflict with the enchantment and the item. */ boolean isItemConflict( @NotNull Map enchantments, - @NotNull Material itemMat, + @NotNull NamespacedKey itemType, @NotNull ItemStack item); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEPreV5Enchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEPreV5Enchantment.java index d3082c9..783798d 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEPreV5Enchantment.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEPreV5Enchantment.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.enchant.wrapped; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import su.nightexpress.excellentenchants.api.enchantment.CustomEnchantment; @@ -39,7 +40,7 @@ public class CAEEPreV5Enchantment extends CABukkitEnchantment implements Additio } @Override - public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull Material itemMat) { + public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType) { if (!definition.hasConflicts()) return false; Set conflicts = definition.getConflicts(); @@ -52,8 +53,8 @@ public class CAEEPreV5Enchantment extends CABukkitEnchantment implements Additio } @Override - public boolean isItemConflict(@NotNull Map enchantments, @NotNull Material itemMat, @NotNull ItemStack item) { - if (Material.ENCHANTED_BOOK.equals(itemMat)) return false; + public boolean isItemConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType, @NotNull ItemStack item) { + if (Material.ENCHANTED_BOOK.getKey().equals(itemType)) return false; return !definition.getSupportedItems().is(item); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEV5Enchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEV5Enchantment.java index 813eda8..2d8f945 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEV5Enchantment.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEEV5Enchantment.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.enchant.wrapped; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import su.nightexpress.excellentenchants.api.enchantment.CustomEnchantment; @@ -27,7 +28,7 @@ public class CAEEV5Enchantment extends CABukkitEnchantment implements Additional } @Override - public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull Material itemMat) { + public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType) { if (!hasConflicts()) return false; Set conflicts = getExclusiveSet(); @@ -41,10 +42,10 @@ public class CAEEV5Enchantment extends CABukkitEnchantment implements Additional } @Override - public boolean isItemConflict(@NotNull Map enchantments, @NotNull Material itemMat, @NotNull ItemStack item) { - if (Material.ENCHANTED_BOOK.equals(itemMat)) return false; + public boolean isItemConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType, @NotNull ItemStack item) { + if (Material.ENCHANTED_BOOK.getKey().equals(itemType)) return false; - String key = itemMat.getKey().getKey(); + String key = itemType.getKey(); ItemSet primary = eeenchantment.getPrimaryItems(); if (primary.getMaterials().contains(key)) return false; diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEcoEnchant.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEcoEnchant.java index b0e8fba..32d1346 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEcoEnchant.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAEcoEnchant.java @@ -4,6 +4,7 @@ import com.willfp.ecoenchants.enchant.EcoEnchant; import com.willfp.ecoenchants.target.EnchantmentTarget; import com.willfp.ecoenchants.type.EnchantmentType; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.enchant.AdditionalTestEnchantment; @@ -23,7 +24,7 @@ public class CAEcoEnchant extends CABukkitEnchantment implements AdditionalTestE } @Override - public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull Material itemMat) { + public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType) { if (enchantments.isEmpty()) return false; // Check if there is only self @@ -61,9 +62,9 @@ public class CAEcoEnchant extends CABukkitEnchantment implements AdditionalTestE @Override public boolean isItemConflict(@NotNull Map enchantments, - @NotNull Material itemMat, + @NotNull NamespacedKey itemType, @NotNull ItemStack item) { - if (Material.ENCHANTED_BOOK.equals(itemMat)) { + if (Material.ENCHANTED_BOOK.getKey().equals(itemType)) { return false; } diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAIncompatibleAllEnchant.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAIncompatibleAllEnchant.java index 218ce87..552ecd4 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAIncompatibleAllEnchant.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CAIncompatibleAllEnchant.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.enchant.wrapped; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; @@ -24,12 +25,12 @@ public class CAIncompatibleAllEnchant extends CABukkitEnchantment implements Add @Override - public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull Material itemMat) { + public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType) { return !enchantments.isEmpty() && !(enchantments.size() == 1 && enchantments.containsKey(this)); } @Override - public boolean isItemConflict(@NotNull Map enchantments, @NotNull Material itemMat, @NotNull ItemStack item) { + public boolean isItemConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType, @NotNull ItemStack item) { return false; } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CALegacyEEEnchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CALegacyEEEnchantment.java index 191f8f3..74068d4 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CALegacyEEEnchantment.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CALegacyEEEnchantment.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.enchant.wrapped; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import su.nightexpress.excellentenchants.api.enchantment.EnchantmentData; @@ -22,7 +23,7 @@ public class CALegacyEEEnchantment extends CABukkitEnchantment implements Additi } @Override - public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull Material itemMat) { + public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType) { if (!eeenchantment.hasConflicts()) return false; Set conflicts = eeenchantment.getConflicts(); @@ -35,8 +36,8 @@ public class CALegacyEEEnchantment extends CABukkitEnchantment implements Additi } @Override - public boolean isItemConflict(@NotNull Map enchantments, @NotNull Material itemMat, @NotNull ItemStack item) { - if (Material.ENCHANTED_BOOK.equals(itemMat)) return false; + public boolean isItemConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType, @NotNull ItemStack item) { + if (Material.ENCHANTED_BOOK.getKey().equals(itemType)) return false; return !eeenchantment.getSupportedItems().is(item); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CALegacyEcoEnchant.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CALegacyEcoEnchant.java index 3b4242d..cb24def 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CALegacyEcoEnchant.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CALegacyEcoEnchant.java @@ -4,12 +4,14 @@ import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.meta.EnchantmentTarget; import com.willfp.ecoenchants.enchantments.meta.EnchantmentType; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.enchant.AdditionalTestEnchantment; import xyz.alexcrea.cuanvil.enchant.CAEnchantment; import xyz.alexcrea.cuanvil.enchant.EnchantmentRarity; +import xyz.alexcrea.cuanvil.util.MaterialUtil; import java.util.Map; @@ -23,7 +25,7 @@ public class CALegacyEcoEnchant extends CABukkitEnchantment implements Additiona } @Override - public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull Material itemMat) { + public boolean isEnchantConflict(@NotNull Map enchantments, @NotNull NamespacedKey itemType) { if (enchantments.isEmpty()) return false; EnchantmentType type = this.ecoEnchant.getType(); @@ -48,14 +50,15 @@ public class CALegacyEcoEnchant extends CABukkitEnchantment implements Additiona @Override public boolean isItemConflict(@NotNull Map enchantments, - @NotNull Material itemMat, + @NotNull NamespacedKey itemType, @NotNull ItemStack item) { - if (Material.ENCHANTED_BOOK.equals(itemMat)) { + if (Material.ENCHANTED_BOOK.getKey().equals(itemType)) { return false; } + var mat = MaterialUtil.INSTANCE.getMatFromKey(itemType); for (EnchantmentTarget target : this.ecoEnchant.getTargets()) { - if (target.getMaterials().contains(itemMat)) { + if (target.getMaterials().contains(mat)) { return false; } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java index 2f76694..3756341 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/SelectMaterialContainer.java @@ -1,34 +1,35 @@ package xyz.alexcrea.cuanvil.gui.config; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import xyz.alexcrea.cuanvil.util.CasedStringUtil; import java.util.*; public interface SelectMaterialContainer { - EnumSet getSelectedMaterials(); + Set getSelectedMaterials(); - boolean setSelectedMaterials(EnumSet materials); + boolean setSelectedMaterials(Set materials); - EnumSet illegalMaterials(); + Set illegalMaterials(); static List getMaterialLore(SelectMaterialContainer container, String containerType, String action){ // Prepare material lore ArrayList groupLore = new ArrayList<>(); groupLore.add("§7Allow you to select a list of §ematerials §7that this " + containerType + " should " + action); - Set materialSet = container.getSelectedMaterials(); + Set materialSet = container.getSelectedMaterials(); if (materialSet.isEmpty()) { groupLore.add("§7There is no "+action+"d material for this "+containerType+"."); } else { groupLore.add("§7List of "+action+"d materials for this "+containerType+":"); - Iterator materialIterator = materialSet.iterator(); + Iterator materialIterator = materialSet.iterator(); boolean greaterThanMax = materialSet.size() > 5; int maxindex = (greaterThanMax ? 4 : materialSet.size()); for (int i = 0; i < maxindex; i++) { // format string like "- Stone Sword" - String formattedName = CasedStringUtil.snakeToUpperSpacedCase(materialIterator.next().name().toLowerCase()); + String formattedName = CasedStringUtil.snakeToUpperSpacedCase(materialIterator.next().getKey().toLowerCase()); groupLore.add("§7- §e" + formattedName); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java index b2d6afe..66411bd 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/ask/SelectItemTypeGui.java @@ -12,6 +12,7 @@ import org.jetbrains.annotations.NotNull; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; +import xyz.alexcrea.cuanvil.util.MaterialUtil; import java.util.Arrays; import java.util.concurrent.atomic.AtomicReference; @@ -52,7 +53,7 @@ public class SelectItemTypeGui extends AbstractAskGui { event.setCancelled(true); ItemStack cursor = event.getWhoClicked().getItemOnCursor(); - if(cursor.getType().isAir()) return; + if(MaterialUtil.INSTANCE.isAir(cursor)) return; ItemStack finalItem; if(materialOnly){ diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java index c49fec7..3d05674 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/list/elements/GroupConfigSubSettingGui.java @@ -5,6 +5,7 @@ import com.github.stefvanschie.inventoryframework.pane.PatternPane; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import io.delilaheve.CustomAnvil; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.entity.HumanEntity; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemFlag; @@ -325,19 +326,19 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen // ---------------------------- @Override - public EnumSet getSelectedMaterials() { + public Set getSelectedMaterials() { return this.group.getNonGroupInheritedMaterials(); } @Override - public boolean setSelectedMaterials(EnumSet materials) { + public boolean setSelectedMaterials(Set materials) { this.group.setNonGroupInheritedMaterials(materials); // Write to file configuration String[] groupNames = new String[materials.size()]; int index = 0; - for (Material otherGroup : materials) { - groupNames[index++] = otherGroup.name().toLowerCase(); + for (NamespacedKey otherGroup : materials) { + groupNames[index++] = otherGroup.getKey().toLowerCase(); } ConfigHolder.ITEM_GROUP_HOLDER.getConfig().set(this.group.getName()+"."+ItemGroupManager.MATERIAL_LIST_PATH, groupNames); @@ -353,8 +354,8 @@ public class GroupConfigSubSettingGui extends MappedToListSubSettingGui implemen } @Override - public EnumSet illegalMaterials() { - return EnumSet.of(Material.AIR); + public Set illegalMaterials() { + return Set.of(Material.AIR.getKey()); } // ---------------------------- diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java index a3963ce..fc519ff 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/settings/MaterialSelectSettingGui.java @@ -5,6 +5,7 @@ import com.github.stefvanschie.inventoryframework.gui.type.util.Gui; import com.github.stefvanschie.inventoryframework.pane.util.Pattern; import io.delilaheve.CustomAnvil; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.entity.HumanEntity; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.inventory.ItemFlag; @@ -18,18 +19,19 @@ import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions; import xyz.alexcrea.cuanvil.gui.util.GuiGlobalItems; import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant; import xyz.alexcrea.cuanvil.util.CasedStringUtil; +import xyz.alexcrea.cuanvil.util.MaterialUtil; import java.util.*; import java.util.function.Consumer; -public class MaterialSelectSettingGui extends MappedElementListConfigGui { +public class MaterialSelectSettingGui extends MappedElementListConfigGui { private final SelectMaterialContainer selector; private final Gui backGui; private boolean instantRemove; - private final List defaultMaterials; - private final EnumSet illegalMaterials; + private final List defaultMaterials; + private final Set illegalMaterials; private final int defaultMaterialHash; private int nowMaterialHash; @@ -161,8 +163,7 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui result = EnumSet.noneOf(Material.class); - result.addAll(this.elementGuiMap.keySet()); + Set result = new HashSet<>(this.elementGuiMap.keySet()); if(!this.selector.setSelectedMaterials(result)){ player.sendMessage("§cSomething went wrong while saving the change of value."); @@ -185,8 +186,8 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui getEveryDisplayableInstanceOfGeneric() { + protected Collection getEveryDisplayableInstanceOfGeneric() { return this.defaultMaterials; } @Override - protected void updateElement(Material material, GuiItem element) { + protected void updateElement(NamespacedKey material, GuiItem element) { // Nothing happen here I think } @Override - protected GuiItem newElementRequested(Material material, GuiItem newItem) { + protected GuiItem newElementRequested(NamespacedKey material, GuiItem newItem) { newItem.setAction(event -> { if(this.instantRemove){ removeMaterial(material); }else { - String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.name().toLowerCase()); + String materialName = CasedStringUtil.snakeToUpperSpacedCase(material.getKey().toLowerCase()); // Create and show confirm remove gui. ConfirmActionGui confirmGui = new ConfirmActionGui( @@ -250,7 +251,7 @@ public class MaterialSelectSettingGui extends MappedElementListConfigGui materialList){ + private static int hashFromMaterialList(List materialList){ int defaultMaterialHash = 0; - for (Material material : materialList) { + for (NamespacedKey material : materialList) { defaultMaterialHash ^= material.hashCode(); } return defaultMaterialHash; diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_11_0.java b/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_11_0.java index 6d6baca..9740971 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_11_0.java +++ b/src/main/java/xyz/alexcrea/cuanvil/update/plugin/PUpdate_1_11_0.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.update.plugin; import org.bukkit.Material; +import org.bukkit.NamespacedKey; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.jetbrains.annotations.NotNull; @@ -11,6 +12,7 @@ import xyz.alexcrea.cuanvil.group.AbstractMaterialGroup; import xyz.alexcrea.cuanvil.group.IncludeGroup; import javax.annotation.Nonnull; +import java.util.Arrays; import java.util.List; import java.util.Set; @@ -69,7 +71,12 @@ public class PUpdate_1_11_0 { // Create new group IncludeGroup group = new IncludeGroup(toolset); - group.addAll(toolMats); + NamespacedKey[] keys = new NamespacedKey[toolMats.length]; + for (int i = 0; i < toolMats.length; i++) { + keys[i] = toolMats[i].getKey(); + } + + group.addAll(keys); MaterialGroupApi.addMaterialGroup(group, true); @@ -77,8 +84,8 @@ public class PUpdate_1_11_0 { if (tools == null) return; if (!(tools instanceof IncludeGroup include)) return; - List mats = List.of(toolMats); - Set matSet = include.getNonGroupInheritedMaterials(); + List mats = List.of(keys); + Set matSet = include.getNonGroupInheritedMaterials(); if (!matSet.containsAll(mats)) return; mats.forEach(matSet::remove); diff --git a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt index c69f2fb..b761784 100644 --- a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt +++ b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt @@ -348,7 +348,7 @@ object ConfigOptions { * * @return the current enchantment limit. -1 if none */ - fun getEnchantCountLimit(type: Material): Int? { + fun getEnchantCountLimit(type: NamespacedKey): Int? { val limit = materialEnchantCountLimit(type) if(limit != null) return limit @@ -362,8 +362,8 @@ object ConfigOptions { * * @return The current enchantment limit. -1 if none */ - private fun materialEnchantCountLimit(type: Material): Int? { - val path = "$ENCHANT_COUNT_LIMIT_ITEMS.${type.key.key.lowercase()}" + private fun materialEnchantCountLimit(type: NamespacedKey): Int? { + val path = "$ENCHANT_COUNT_LIMIT_ITEMS.${type.key.lowercase()}" if(!ConfigHolder.DEFAULT_CONFIG.config.isInt(path)) return null diff --git a/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt b/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt index b0fcc97..af959f2 100644 --- a/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt +++ b/src/main/kotlin/io/delilaheve/util/EnchantmentUtil.kt @@ -6,6 +6,7 @@ import org.bukkit.inventory.ItemStack import xyz.alexcrea.cuanvil.config.ConfigHolder import xyz.alexcrea.cuanvil.enchant.CAEnchantment import xyz.alexcrea.cuanvil.group.ConflictType +import xyz.alexcrea.cuanvil.util.MaterialUtil.customType import kotlin.math.max import kotlin.math.min @@ -34,7 +35,7 @@ object EnchantmentUtil { val bypassFuse = player.hasPermission(CustomAnvil.bypassFusePermission) val bypassLevel = player.hasPermission(CustomAnvil.bypassLevelPermission) - var maxEnchantCount = ConfigOptions.getEnchantCountLimit(item.type) + var maxEnchantCount = ConfigOptions.getEnchantCountLimit(item.customType) if(maxEnchantCount == null || maxEnchantCount < 0) maxEnchantCount = Int.MAX_VALUE val allowed = other.filter { (enchantment, _) -> enchantment.isAllowed(player) } diff --git a/src/main/kotlin/io/delilaheve/util/ItemUtil.kt b/src/main/kotlin/io/delilaheve/util/ItemUtil.kt index a85af39..414d37e 100644 --- a/src/main/kotlin/io/delilaheve/util/ItemUtil.kt +++ b/src/main/kotlin/io/delilaheve/util/ItemUtil.kt @@ -4,6 +4,7 @@ import org.bukkit.Material.ENCHANTED_BOOK import org.bukkit.inventory.ItemStack import org.bukkit.inventory.meta.Damageable import xyz.alexcrea.cuanvil.enchant.CAEnchantment +import xyz.alexcrea.cuanvil.util.MaterialUtil.customType import kotlin.math.ceil import kotlin.math.max import kotlin.math.min @@ -90,5 +91,5 @@ object ItemUtil { */ fun ItemStack.canMergeWith( other: ItemStack? - ) = (other != null) && (type == other.type || (other.isEnchantedBook())) + ) = (other != null) && (customType == other.customType || (other.isEnchantedBook())) } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackDependency.kt index f397200..b0e9e52 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/datapack/DataPackDependency.kt @@ -145,7 +145,7 @@ object DataPackDependency { CustomAnvil.instance.logger.warning("Could not find material $name for item group $groupName") continue } - group.addToPolicy(mat) + group.addToPolicy(mat.key) } for (name in section.getStringList("groups")) { val otherGroup = MaterialGroupApi.getGroup(name) diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EcoItemDependencyUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EcoItemDependencyUtil.kt new file mode 100644 index 0000000..14c7d9f --- /dev/null +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EcoItemDependencyUtil.kt @@ -0,0 +1,34 @@ +package xyz.alexcrea.cuanvil.dependency.plugins + +import com.willfp.ecoitems.items.EcoItem +import com.willfp.ecoitems.items.EcoItems +import com.willfp.ecoitems.items.ecoItem +import org.bukkit.Material +import org.bukkit.NamespacedKey +import org.bukkit.inventory.ItemStack + +object EcoItemDependencyUtil { + + fun ecoItemNamespace(item: ItemStack): NamespacedKey? { + val ecoi = item.ecoItem ?: return null + + return ecoi.id + } + + fun ecoItemFromKey(key: NamespacedKey): EcoItem? { + return EcoItems.getByID(key.toString()) + } + + fun ecoItemMaterialFromKey(key: NamespacedKey): Material? { + val ecoi = ecoItemFromKey(key) ?: return null + + return ecoi.itemStack.type + } + + fun newEcoItemstack(key: NamespacedKey): ItemStack? { + val ecoi = ecoItemFromKey(key) ?: return null + + return ecoi.itemStack + } + +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EnchantmentSquaredDependency.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EnchantmentSquaredDependency.kt index f4da612..d769986 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EnchantmentSquaredDependency.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/dependency/plugins/EnchantmentSquaredDependency.kt @@ -102,15 +102,15 @@ class EnchantmentSquaredDependency(private val enchantmentSquaredPlugin: Plugin) private fun writeMissingGroups(){ // Write group that do not exist on custom anvil. val shield = IncludeGroup("shield") - shield.addToPolicy(Material.SHIELD) + shield.addToPolicy(Material.SHIELD.key) MaterialGroupApi.addMaterialGroup(shield) val elytra = IncludeGroup("elytra") - elytra.addToPolicy(Material.ELYTRA) + elytra.addToPolicy(Material.ELYTRA.key) MaterialGroupApi.addMaterialGroup(elytra) val trinkets = IncludeGroup("trinkets") - trinkets.addToPolicy(Material.ROTTEN_FLESH) + trinkets.addToPolicy(Material.ROTTEN_FLESH.key) MaterialGroupApi.addMaterialGroup(trinkets) } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt index ec6e7bc..d0d2bda 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/AbstractMaterialGroup.kt @@ -1,7 +1,8 @@ package xyz.alexcrea.cuanvil.group import org.bukkit.Material -import java.util.* +import org.bukkit.NamespacedKey +import xyz.alexcrea.cuanvil.util.MaterialUtil abstract class AbstractMaterialGroup(private val name: String) { protected val includedMaterial by lazy { createDefaultSet() } @@ -9,12 +10,12 @@ abstract class AbstractMaterialGroup(private val name: String) { /** * Get the group default set */ - protected abstract fun createDefaultSet(): EnumSet + protected abstract fun createDefaultSet(): MutableSet /** * Get if a material is allowed following the group policy */ - open fun contain(mat: Material): Boolean { + open fun contain(mat: NamespacedKey): Boolean { return mat in getMaterials() } @@ -27,13 +28,13 @@ abstract class AbstractMaterialGroup(private val name: String) { * Push a material to this group to follow this group policy * @return this instance. */ - abstract fun addToPolicy(mat: Material): AbstractMaterialGroup + abstract fun addToPolicy(type: NamespacedKey): AbstractMaterialGroup /** * Push a list of material to this group to follow this group policy * @return this instance. */ - fun addAll(vararg materials: Material): AbstractMaterialGroup { + fun addAll(vararg materials: NamespacedKey): AbstractMaterialGroup { for (material in materials) { addToPolicy(material) } @@ -60,19 +61,19 @@ abstract class AbstractMaterialGroup(private val name: String) { /** * Get the group contained material as a set */ - abstract fun getMaterials(): EnumSet + abstract fun getMaterials(): Set /** * Get the group non-inherited material as a set */ - open fun getNonGroupInheritedMaterials(): EnumSet { + open fun getNonGroupInheritedMaterials(): Set { return includedMaterial } /** * Get the group non-inherited material as a set */ - open fun setNonGroupInheritedMaterials(materials: EnumSet) { + open fun setNonGroupInheritedMaterials(materials: Set) { this.includedMaterial.clear() this.includedMaterial.addAll(materials) } @@ -102,8 +103,9 @@ abstract class AbstractMaterialGroup(private val name: String) { // Test inner material val matIterator = includedMaterial.iterator() while (matIterator.hasNext()) { - val material = matIterator.next() - if (material.isAir) continue + val key = matIterator.next() + val material = MaterialUtil.getMatFromKey(key) + if (material == null || material.isAir) continue return material } // Test included group representative material diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictGroup.kt index 403d630..59841ac 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictGroup.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictGroup.kt @@ -2,6 +2,7 @@ package xyz.alexcrea.cuanvil.group import io.delilaheve.CustomAnvil import org.bukkit.Material +import org.bukkit.NamespacedKey import xyz.alexcrea.cuanvil.enchant.CAEnchantment class EnchantConflictGroup( @@ -53,7 +54,7 @@ class EnchantConflictGroup( return canBypassByBeforeLevel(enchants) || canBypassByAfterLevel(enchants) } - fun allowed(enchants: Map, mat: Material): Boolean { + fun allowed(enchants: Map, mat: NamespacedKey): Boolean { if (enchantments.size < minBeforeBlock) { CustomAnvil.verboseLog("Conflicting bc of to many enchantments") return true diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt index f710f76..1dce406 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/EnchantConflictManager.kt @@ -8,6 +8,7 @@ import org.bukkit.inventory.ItemStack import xyz.alexcrea.cuanvil.enchant.AdditionalTestEnchantment import xyz.alexcrea.cuanvil.enchant.CAEnchantment import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry +import xyz.alexcrea.cuanvil.util.MaterialUtil.customType import java.util.* import kotlin.collections.set @@ -211,8 +212,8 @@ class EnchantConflictManager { item: ItemStack, newEnchant: CAEnchantment ): ConflictType { - val mat = item.type - CustomAnvil.verboseLog("Testing conflict for ${newEnchant.key} on ${mat.key}") + val type = item.customType + CustomAnvil.verboseLog("Testing conflict for ${newEnchant.key} on ${type}") val conflictList = newEnchant.conflicts var result = ConflictType.NO_CONFLICT @@ -223,7 +224,7 @@ class EnchantConflictManager { continue } - val allowed = conflict.allowed(appliedEnchants, mat) + val allowed = conflict.allowed(appliedEnchants, type) CustomAnvil.verboseLog("Was against $conflict and conflicting: ${!allowed} ") if (!allowed) { if (conflict.getEnchants().size <= 1) { @@ -239,7 +240,7 @@ class EnchantConflictManager { val immutableEnchants = Collections.unmodifiableMap(appliedEnchants) for (appliedEnchant in appliedEnchants.keys) { if (appliedEnchant is AdditionalTestEnchantment) { - val doConflict = appliedEnchant.isEnchantConflict(immutableEnchants, mat) + val doConflict = appliedEnchant.isEnchantConflict(immutableEnchants, type) if (doConflict) { CustomAnvil.verboseLog("Big conflict by additional test, stopping") return ConflictType.ENCHANTMENT_CONFLICT @@ -251,7 +252,7 @@ class EnchantConflictManager { if ((result != ConflictType.ITEM_CONFLICT) && (newEnchant is AdditionalTestEnchantment)) { val partialItem = createPartialResult(item, immutableEnchants) - if (newEnchant.isItemConflict(immutableEnchants, mat, partialItem)) { + if (newEnchant.isItemConflict(immutableEnchants, type, partialItem)) { return ConflictType.ITEM_CONFLICT } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeGroup.kt index 7684c3f..58ea48c 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeGroup.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ExcludeGroup.kt @@ -1,11 +1,12 @@ package xyz.alexcrea.cuanvil.group -import org.bukkit.Material +import org.bukkit.NamespacedKey import java.util.* class ExcludeGroup(name: String) : AbstractMaterialGroup(name) { - override fun createDefaultSet(): EnumSet { - return EnumSet.allOf(Material::class.java) + + override fun createDefaultSet(): MutableSet { + return NegativeSet(HashSet()) } private var includedGroup: MutableSet = HashSet() @@ -20,9 +21,9 @@ class ExcludeGroup(name: String) : AbstractMaterialGroup(name) { return false } - override fun addToPolicy(mat: Material): ExcludeGroup { - includedMaterial.remove(mat) - groupItems.remove(mat) + override fun addToPolicy(type: NamespacedKey): ExcludeGroup { + includedMaterial.remove(type) + groupItems.remove(type) return this } @@ -60,7 +61,7 @@ class ExcludeGroup(name: String) : AbstractMaterialGroup(name) { } } - override fun getMaterials(): EnumSet { + override fun getMaterials(): MutableSet { return groupItems } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeGroup.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeGroup.kt index 848789f..fc9614b 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeGroup.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/IncludeGroup.kt @@ -1,11 +1,12 @@ package xyz.alexcrea.cuanvil.group import org.bukkit.Material +import org.bukkit.NamespacedKey import java.util.* class IncludeGroup(name: String) : AbstractMaterialGroup(name) { - override fun createDefaultSet(): EnumSet { - return EnumSet.noneOf(Material::class.java) + override fun createDefaultSet(): MutableSet { + return HashSet() } private var includedGroup: MutableSet = HashSet() @@ -20,9 +21,9 @@ class IncludeGroup(name: String) : AbstractMaterialGroup(name) { return false } - override fun addToPolicy(mat: Material): IncludeGroup { - includedMaterial.add(mat) - groupItems.add(mat) + override fun addToPolicy(type: NamespacedKey): IncludeGroup { + includedMaterial.add(type) + groupItems.add(type) return this } @@ -47,7 +48,7 @@ class IncludeGroup(name: String) : AbstractMaterialGroup(name) { } } - override fun setNonGroupInheritedMaterials(materials: EnumSet) { + override fun setNonGroupInheritedMaterials(materials: Set) { super.setNonGroupInheritedMaterials(materials) updateMaterials() @@ -66,7 +67,7 @@ class IncludeGroup(name: String) : AbstractMaterialGroup(name) { } } - override fun getMaterials(): EnumSet { + override fun getMaterials(): MutableSet { return groupItems } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ItemGroupManager.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ItemGroupManager.kt index 65eef34..51b8249 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/group/ItemGroupManager.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/ItemGroupManager.kt @@ -91,7 +91,7 @@ class ItemGroupManager { } continue } - group.addToPolicy(material) + group.addToPolicy(material.key) } // Read group to include in this group policy. diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/group/NegativeSet.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/group/NegativeSet.kt new file mode 100644 index 0000000..386ba5f --- /dev/null +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/group/NegativeSet.kt @@ -0,0 +1,51 @@ +package xyz.alexcrea.cuanvil.group + +class NegativeSet(val negate: MutableSet) : MutableSet { + + override fun iterator(): MutableIterator { + TODO("Not yet implemented") // can't be implemented I guess + } + + override fun add(element: T): Boolean { + return negate.remove(element) + } + + override fun remove(element: T): Boolean { + return negate.add(element) + } + + override fun addAll(elements: Collection): Boolean { + return negate.removeAll(elements) + } + + override fun removeAll(elements: Collection): Boolean { + return negate.addAll(elements) + } + + override fun retainAll(elements: Collection): Boolean { + TODO("Not yet implemented") + } + + override fun clear() { + TODO("Not yet implemented") + } + + override fun isEmpty(): Boolean { + TODO("Not yet implemented") + } + + override val size get() = TODO("Not yet implemented") + + override fun contains(element: T): Boolean { + return !negate.contains(element) + } + + override fun containsAll(elements: Collection): Boolean { + for (elm in elements) { + if(negate.contains(elm)) return false + } + + return true + } + +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt index 0c4d2e7..4fe3034 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/listener/PrepareAnvilListener.kt @@ -24,6 +24,7 @@ import org.bukkit.inventory.meta.ItemMeta import xyz.alexcrea.cuanvil.dependency.DependencyManager import xyz.alexcrea.cuanvil.enchant.CAEnchantment import xyz.alexcrea.cuanvil.util.* +import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir import xyz.alexcrea.cuanvil.util.UnitRepairUtil.getRepair import java.util.concurrent.atomic.AtomicInteger @@ -42,10 +43,6 @@ class PrepareAnvilListener : Listener { var IS_EMPTY_TEST = false } - private fun ItemStack?.isAir(): Boolean { - return this == null || this.type.isAir || this.amount == 0 - } - /** * Event handler logic for when an anvil contains items to be combined */ @@ -121,7 +118,7 @@ class PrepareAnvilListener : Listener { } private fun isImmutable(item: ItemStack?): Boolean { - if (item.isAir()) return false + if (item.isAir) return false val meta = item!!.itemMeta return meta != null && @@ -172,7 +169,7 @@ class PrepareAnvilListener : Listener { if (finalResult == null) return false event.result = finalResult.result - if (finalResult.result.isAir()) return false + if (finalResult.result.isAir) return false AnvilXpUtil.setAnvilInvXp(inventory, event.view, player, finalResult.levelCost, true) return true @@ -198,7 +195,7 @@ class PrepareAnvilListener : Listener { if (finalResult == null) return event.result = finalResult.result - if (finalResult.result.isAir()) return + if (finalResult.result.isAir) return AnvilXpUtil.setAnvilInvXp(inventory, event.view, player, finalResult.levelCost) } @@ -286,7 +283,7 @@ class PrepareAnvilListener : Listener { if (finalResult == null) return event.result = finalResult.result - if (finalResult.result.isAir()) return + if (finalResult.result.isAir) return AnvilXpUtil.setAnvilInvXp(inventory, event.view, player, finalResult.levelCost) } @@ -331,7 +328,7 @@ class PrepareAnvilListener : Listener { if (finalResult == null) return false event.result = finalResult.result - if (finalResult.result.isAir()) return false + if (finalResult.result.isAir) return false AnvilXpUtil.setAnvilInvXp(inventory, event.view, player, finalResult.levelCost) return true @@ -351,7 +348,7 @@ class PrepareAnvilListener : Listener { result = AnvilLoreEditUtil.tryLoreEditByPaper(player, first, second, xpCost) } - if (result.isAir() || first == result) { + if (result.isAir || first == result) { CustomAnvil.log("lore edit, But input is same as output") event.result = null return false diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/recipe/AnvilCustomRecipe.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/recipe/AnvilCustomRecipe.kt index fa1a977..4f83c14 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/recipe/AnvilCustomRecipe.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/recipe/AnvilCustomRecipe.kt @@ -7,6 +7,7 @@ import xyz.alexcrea.cuanvil.config.ConfigHolder import xyz.alexcrea.cuanvil.gui.util.GuiSharedConstant import xyz.alexcrea.cuanvil.util.AnvilUseType import xyz.alexcrea.cuanvil.util.AnvilXpUtil +import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir class AnvilCustomRecipe( val name: String, @@ -80,11 +81,7 @@ class AnvilCustomRecipe( } fun validate(): Boolean { - return (leftItem != null) && !(leftItem!!.type.isAir) && (leftItem!!.amount > 0) && - //(rightItem != null) && !(rightItem!!.type.isAir) && (rightItem!!.amount > 0) && - ((rightItem == null) || (!(rightItem!!.type.isAir) && (rightItem!!.amount > 0))) && - (resultItem != null) && !(resultItem!!.type.isAir) && (resultItem!!.amount > 0) - + return !leftItem.isAir && !rightItem.isAir && !resultItem.isAir } fun saveToFile(writeFile: Boolean, doBackup: Boolean) { diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt new file mode 100644 index 0000000..c4907c8 --- /dev/null +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/MaterialUtil.kt @@ -0,0 +1,61 @@ +package xyz.alexcrea.cuanvil.util + +import org.bukkit.Bukkit +import org.bukkit.Material +import org.bukkit.NamespacedKey +import org.bukkit.inventory.ItemStack +import xyz.alexcrea.cuanvil.dependency.plugins.EcoItemDependencyUtil + +object MaterialUtil { + + val ItemStack?.isAir: Boolean + get() { + return this == null || this.type.isAir || this.amount == 0 + } + + val NamespacedKey?.isAir: Boolean + get() { + return Material.AIR.key == this + } + + private val HasEcoItem = Bukkit.getPluginManager().isPluginEnabled("EcoItems") + + val ItemStack.customType: NamespacedKey + get() { + if(HasEcoItem) { + val result = EcoItemDependencyUtil.ecoItemNamespace(this) + if(result != null) return result + } + + return this.type.key + } + + private fun bukkitMaterialFromKey(key: NamespacedKey): Material? { + //TODO on paper only transition Registry.MATERIAL.get(key) + return Material.matchMaterial(key.toString()) + } + + fun getMatFromKey(key: NamespacedKey): Material? { + if(HasEcoItem) { + val result = EcoItemDependencyUtil.ecoItemMaterialFromKey(key) + if(result != null) return result + } + + return bukkitMaterialFromKey(key) + } + + fun itemFromKey(key: NamespacedKey): ItemStack { + if(HasEcoItem) { + val result = EcoItemDependencyUtil.newEcoItemstack(key) + if(result != null) return result + } + + return ItemStack(bukkitMaterialFromKey(key)!!) + } + + fun materialExist(key: NamespacedKey): Boolean { + return getMatFromKey(key) != null + } + + +} \ No newline at end of file diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt index 2047e79..8463e27 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/util/UnitRepairUtil.kt @@ -3,6 +3,7 @@ package xyz.alexcrea.cuanvil.util import org.bukkit.configuration.ConfigurationSection import org.bukkit.inventory.ItemStack import xyz.alexcrea.cuanvil.config.ConfigHolder +import xyz.alexcrea.cuanvil.util.MaterialUtil.customType object UnitRepairUtil { @@ -22,7 +23,7 @@ object UnitRepairUtil { if (other == null) return null val config = ConfigHolder.UNIT_REPAIR_HOLDER.config // Get configuration section if exist - val otherName = other.type.name.lowercase() + val otherName = other.customType.key.lowercase() var section = config.getConfigurationSection(otherName) if (section == null) { section = config.getConfigurationSection(otherName.uppercase()) @@ -44,7 +45,7 @@ object UnitRepairUtil { * If value is set to less than or equal to 0 then it will be set to default */ private fun getRepairAmount(item: ItemStack, section: ConfigurationSection, default: Double): Double? { - val itemName = item.type.name.lowercase() + val itemName = item.customType.key.lowercase() val repairValue = if (section.isDouble(itemName)) { section.getDouble(itemName) } else if (section.isDouble(itemName.uppercase())) { diff --git a/src/test/java/xyz/alexcrea/cuanvil/api/MaterialGroupApiTests.java b/src/test/java/xyz/alexcrea/cuanvil/api/MaterialGroupApiTests.java index 164bc58..3fcafe7 100644 --- a/src/test/java/xyz/alexcrea/cuanvil/api/MaterialGroupApiTests.java +++ b/src/test/java/xyz/alexcrea/cuanvil/api/MaterialGroupApiTests.java @@ -15,7 +15,7 @@ public class MaterialGroupApiTests extends ConfigResetCustomAnvilTest { void groupAddAndRemove() { String groupName = "group"; IncludeGroup group = new IncludeGroup(groupName); - group.addToPolicy(Material.DIAMOND_PICKAXE); // We do not want it to be empty + group.addToPolicy(Material.DIAMOND_PICKAXE.getKey()); // We do not want it to be empty // Group not being set should not exist assertFalse(doGroupExist(groupName)); @@ -48,7 +48,7 @@ public class MaterialGroupApiTests extends ConfigResetCustomAnvilTest { void writeGroup_Reload() { String groupName = "group"; IncludeGroup group = new IncludeGroup(groupName); - group.addToPolicy(Material.DIAMOND_PICKAXE); // We do not want it to be empty + group.addToPolicy(Material.DIAMOND_PICKAXE.getKey()); // We do not want it to be empty // Group not being set should not exist assertFalse(doGroupExist(groupName));