diff --git a/build.gradle.kts b/build.gradle.kts index d83775a..63d5673 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,7 @@ plugins { } group = "xyz.alexcrea" -version = "1.11.2" +version = "1.11.3" repositories { // EcoEnchants diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java index 1d94ba2..ea657ac 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java @@ -207,7 +207,6 @@ public interface CAEnchantment { @NotNull ItemMeta meta, @NotNull Map enchantments, @NotNull Collection enchantmentToTest){ - for (CAEnchantment enchantment : enchantmentToTest) { if(enchantment.isEnchantmentPresent(item, meta)){ enchantments.put(enchantment, enchantment.getLevel(item, meta)); diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/bulk/BukkitEnchantBulkOperation.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/bulk/BukkitEnchantBulkOperation.java index c5bd07d..73e4185 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/bulk/BukkitEnchantBulkOperation.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/bulk/BukkitEnchantBulkOperation.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.enchant.bulk; import io.delilaheve.CustomAnvil; +import io.delilaheve.util.ConfigOptions; import io.delilaheve.util.ItemUtil; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -17,11 +18,14 @@ public class BukkitEnchantBulkOperation implements BulkGetEnchantOperation, Bulk @Override public void bulkGet(@NotNull Map enchantmentMap, @NotNull ItemStack item, @NotNull ItemMeta meta) { - if (ItemUtil.INSTANCE.isEnchantedBook(item)) { + boolean isBook = ItemUtil.INSTANCE.isEnchantedBook(item); + + if (isBook) { ((EnchantmentStorageMeta) meta).getStoredEnchants().forEach((enchantment, level) -> addEnchantment(enchantmentMap, enchantment, level) ); - } else { + } + if(!isBook || ConfigOptions.INSTANCE.getAddBookEnchantmentAsStoredEnchantment()){ item.getEnchantments().forEach((enchantment, level) -> addEnchantment(enchantmentMap, enchantment, level) ); @@ -41,7 +45,7 @@ public class BukkitEnchantBulkOperation implements BulkGetEnchantOperation, Bulk @Override public void bulkClear(@NotNull ItemStack item) { - if (item.getType() != Material.ENCHANTED_BOOK) { + if (item.getType() != Material.ENCHANTED_BOOK || ConfigOptions.INSTANCE.getAddBookEnchantmentAsStoredEnchantment()) { item.getEnchantments().forEach((enchantment, level) -> item.removeEnchantment(enchantment) diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CABukkitEnchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CABukkitEnchantment.java index 1a72458..0e630ea 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CABukkitEnchantment.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/wrapped/CABukkitEnchantment.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.enchant.wrapped; import io.delilaheve.CustomAnvil; +import io.delilaheve.util.ConfigOptions; import io.delilaheve.util.ItemUtil; import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.EnchantmentTarget; @@ -28,14 +29,14 @@ public class CABukkitEnchantment extends CAEnchantmentBase { public final @NotNull Enchantment bukkit; - public CABukkitEnchantment(@NotNull Enchantment bukkit, @Nullable EnchantmentRarity rarity){ + public CABukkitEnchantment(@NotNull Enchantment bukkit, @Nullable EnchantmentRarity rarity) { super(bukkit.getKey(), rarity, bukkit.getMaxLevel()); this.bukkit = bukkit; } - public CABukkitEnchantment(@NotNull Enchantment bukkit){ + public CABukkitEnchantment(@NotNull Enchantment bukkit) { this(bukkit, getRarity(bukkit)); } @@ -52,7 +53,7 @@ public class CABukkitEnchantment extends CAEnchantmentBase { @Override public int getLevel(@NotNull ItemStack item, @NotNull ItemMeta meta) { if (ItemUtil.INSTANCE.isEnchantedBook(item)) { - return ((EnchantmentStorageMeta)meta).getStoredEnchantLevel(this.bukkit); + return ((EnchantmentStorageMeta) meta).getStoredEnchantLevel(this.bukkit); } else { return meta.getEnchantLevel(this.bukkit); } @@ -61,10 +62,11 @@ public class CABukkitEnchantment extends CAEnchantmentBase { @Override public boolean isEnchantmentPresent(@NotNull ItemStack item, @NotNull ItemMeta meta) { if (ItemUtil.INSTANCE.isEnchantedBook(item)) { - EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta)meta); + EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta) meta); - return bookMeta.getStoredEnchants().containsKey(this.bukkit); - }else{ + return bookMeta.getStoredEnchants().containsKey(this.bukkit) || + (ConfigOptions.INSTANCE.getAddBookEnchantmentAsStoredEnchantment() && item.containsEnchantment(this.bukkit)); + } else { return item.containsEnchantment(this.bukkit); } } @@ -72,7 +74,7 @@ public class CABukkitEnchantment extends CAEnchantmentBase { @Override public void addEnchantmentUnsafe(@NotNull ItemStack item, int level) { if (ItemUtil.INSTANCE.isEnchantedBook(item)) { - EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta)item.getItemMeta()); + EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta) item.getItemMeta()); assert bookMeta != null; bookMeta.addStoredEnchant(this.bukkit, level, true); @@ -86,19 +88,20 @@ public class CABukkitEnchantment extends CAEnchantmentBase { @Override public void removeFrom(@NotNull ItemStack item) { if (ItemUtil.INSTANCE.isEnchantedBook(item)) { - EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta)item.getItemMeta()); + EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta) item.getItemMeta()); assert bookMeta != null; bookMeta.removeStoredEnchant(this.bukkit); + bookMeta.removeEnchant(this.bukkit); item.setItemMeta(bookMeta); - }else{ + } else { item.removeEnchantment(this.bukkit); } } @NotNull - public static EnchantmentRarity getRarity(Enchantment enchantment){ + public static EnchantmentRarity getRarity(Enchantment enchantment) { try { return EnchantmentProperties.valueOf(enchantment.getKey().getKey().toUpperCase(Locale.ENGLISH)).getRarity(); } catch (IllegalArgumentException ignored) { @@ -112,6 +115,7 @@ public class CABukkitEnchantment extends CAEnchantmentBase { } private static Method getAnvilCostMethod; + static { Class clazz = Enchantment.class; try { @@ -144,14 +148,14 @@ public class CABukkitEnchantment extends CAEnchantmentBase { } private static EnchantmentRarity findRarity(Enchantment enchantment) { - if(getAnvilCostMethod == null) return EnchantmentRarity.COMMON; + if (getAnvilCostMethod == null) return EnchantmentRarity.COMMON; try { int itemCost = (int) getAnvilCostMethod.invoke(enchantment); return EnchantmentRarity.getRarity(itemCost); } catch (IllegalAccessException | InvocationTargetException e) { - CustomAnvil.instance.getLogger().log(Level.SEVERE, "could not find cost for enchantment "+enchantment.getKey(), e); + CustomAnvil.instance.getLogger().log(Level.SEVERE, "could not find cost for enchantment " + enchantment.getKey(), e); return EnchantmentRarity.COMMON; } @@ -160,7 +164,7 @@ public class CABukkitEnchantment extends CAEnchantmentBase { @Override public boolean equals(Object obj) { - if(!(obj instanceof CABukkitEnchantment other)){ + if (!(obj instanceof CABukkitEnchantment other)) { return false; } 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 a65b54b..6bd7ea3 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 @@ -20,7 +20,7 @@ import java.util.function.Consumer; * * @param Type of the factory of the type of setting the gui should edit. */ -public abstract class AbstractEnchantConfigGui extends SettingGuiListConfigGui implements ValueUpdatableGui { +public abstract class AbstractEnchantConfigGui extends SettingGuiListConfigGui{ /** * Constructor for a gui displaying available enchantment to edit a enchantment setting. diff --git a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt index 980999f..a35901c 100644 --- a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt +++ b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt @@ -31,6 +31,7 @@ object ConfigOptions { const val ITEM_RENAME_COST = "item_rename_cost" const val SACRIFICE_ILLEGAL_COST = "sacrifice_illegal_enchant_cost" + const val ADD_BOOK_ENCHANTMENT_AS_STORED_ENCHANTMENT = "add_book_enchantment_as_stored_enchantment" // Color related config const val ALLOW_COLOR_CODE = "allow_color_code" @@ -78,6 +79,7 @@ object ConfigOptions { const val DEFAULT_ITEM_RENAME_COST = 1 const val DEFAULT_SACRIFICE_ILLEGAL_COST = 1 + const val DEFAULT_ADD_BOOK_ENCHANTMENT_AS_STORED_ENCHANTMENT = false; // Color related config const val DEFAULT_ALLOW_COLOR_CODE = false @@ -223,6 +225,16 @@ object ConfigOptions { ?: DEFAULT_SACRIFICE_ILLEGAL_COST } + /** + * Consider book enchantment as book stored enchantment + */ + val addBookEnchantmentAsStoredEnchantment : Boolean + get(){ + return ConfigHolder.DEFAULT_CONFIG + .config + .getBoolean(ADD_BOOK_ENCHANTMENT_AS_STORED_ENCHANTMENT, DEFAULT_ADD_BOOK_ENCHANTMENT_AS_STORED_ENCHANTMENT) + } + /** * Allow usage of color code */