Add option to consider book enchantment as stored enchantment

This commit is contained in:
alexcrea 2025-05-28 18:07:48 +02:00
parent a74470bd0d
commit 27604dbb81
No known key found for this signature in database
GPG key ID: 027DD67D2D3280C5
6 changed files with 38 additions and 19 deletions

View file

@ -16,7 +16,7 @@ plugins {
} }
group = "xyz.alexcrea" group = "xyz.alexcrea"
version = "1.11.2" version = "1.11.3"
repositories { repositories {
// EcoEnchants // EcoEnchants

View file

@ -207,7 +207,6 @@ public interface CAEnchantment {
@NotNull ItemMeta meta, @NotNull ItemMeta meta,
@NotNull Map<CAEnchantment, Integer> enchantments, @NotNull Map<CAEnchantment, Integer> enchantments,
@NotNull Collection<CAEnchantment> enchantmentToTest){ @NotNull Collection<CAEnchantment> enchantmentToTest){
for (CAEnchantment enchantment : enchantmentToTest) { for (CAEnchantment enchantment : enchantmentToTest) {
if(enchantment.isEnchantmentPresent(item, meta)){ if(enchantment.isEnchantmentPresent(item, meta)){
enchantments.put(enchantment, enchantment.getLevel(item, meta)); enchantments.put(enchantment, enchantment.getLevel(item, meta));

View file

@ -1,6 +1,7 @@
package xyz.alexcrea.cuanvil.enchant.bulk; package xyz.alexcrea.cuanvil.enchant.bulk;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import io.delilaheve.util.ConfigOptions;
import io.delilaheve.util.ItemUtil; import io.delilaheve.util.ItemUtil;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
@ -17,11 +18,14 @@ public class BukkitEnchantBulkOperation implements BulkGetEnchantOperation, Bulk
@Override @Override
public void bulkGet(@NotNull Map<CAEnchantment, Integer> enchantmentMap, @NotNull ItemStack item, @NotNull ItemMeta meta) { public void bulkGet(@NotNull Map<CAEnchantment, Integer> 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) -> ((EnchantmentStorageMeta) meta).getStoredEnchants().forEach((enchantment, level) ->
addEnchantment(enchantmentMap, enchantment, level) addEnchantment(enchantmentMap, enchantment, level)
); );
} else { }
if(!isBook || ConfigOptions.INSTANCE.getAddBookEnchantmentAsStoredEnchantment()){
item.getEnchantments().forEach((enchantment, level) -> item.getEnchantments().forEach((enchantment, level) ->
addEnchantment(enchantmentMap, enchantment, level) addEnchantment(enchantmentMap, enchantment, level)
); );
@ -41,7 +45,7 @@ public class BukkitEnchantBulkOperation implements BulkGetEnchantOperation, Bulk
@Override @Override
public void bulkClear(@NotNull ItemStack item) { 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.getEnchantments().forEach((enchantment, level) ->
item.removeEnchantment(enchantment) item.removeEnchantment(enchantment)

View file

@ -1,6 +1,7 @@
package xyz.alexcrea.cuanvil.enchant.wrapped; package xyz.alexcrea.cuanvil.enchant.wrapped;
import io.delilaheve.CustomAnvil; import io.delilaheve.CustomAnvil;
import io.delilaheve.util.ConfigOptions;
import io.delilaheve.util.ItemUtil; import io.delilaheve.util.ItemUtil;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.enchantments.EnchantmentTarget; import org.bukkit.enchantments.EnchantmentTarget;
@ -28,14 +29,14 @@ public class CABukkitEnchantment extends CAEnchantmentBase {
public final @NotNull Enchantment bukkit; public final @NotNull Enchantment bukkit;
public CABukkitEnchantment(@NotNull Enchantment bukkit, @Nullable EnchantmentRarity rarity){ public CABukkitEnchantment(@NotNull Enchantment bukkit, @Nullable EnchantmentRarity rarity) {
super(bukkit.getKey(), super(bukkit.getKey(),
rarity, rarity,
bukkit.getMaxLevel()); bukkit.getMaxLevel());
this.bukkit = bukkit; this.bukkit = bukkit;
} }
public CABukkitEnchantment(@NotNull Enchantment bukkit){ public CABukkitEnchantment(@NotNull Enchantment bukkit) {
this(bukkit, getRarity(bukkit)); this(bukkit, getRarity(bukkit));
} }
@ -52,7 +53,7 @@ public class CABukkitEnchantment extends CAEnchantmentBase {
@Override @Override
public int getLevel(@NotNull ItemStack item, @NotNull ItemMeta meta) { public int getLevel(@NotNull ItemStack item, @NotNull ItemMeta meta) {
if (ItemUtil.INSTANCE.isEnchantedBook(item)) { if (ItemUtil.INSTANCE.isEnchantedBook(item)) {
return ((EnchantmentStorageMeta)meta).getStoredEnchantLevel(this.bukkit); return ((EnchantmentStorageMeta) meta).getStoredEnchantLevel(this.bukkit);
} else { } else {
return meta.getEnchantLevel(this.bukkit); return meta.getEnchantLevel(this.bukkit);
} }
@ -61,10 +62,11 @@ public class CABukkitEnchantment extends CAEnchantmentBase {
@Override @Override
public boolean isEnchantmentPresent(@NotNull ItemStack item, @NotNull ItemMeta meta) { public boolean isEnchantmentPresent(@NotNull ItemStack item, @NotNull ItemMeta meta) {
if (ItemUtil.INSTANCE.isEnchantedBook(item)) { if (ItemUtil.INSTANCE.isEnchantedBook(item)) {
EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta)meta); EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta) meta);
return bookMeta.getStoredEnchants().containsKey(this.bukkit); return bookMeta.getStoredEnchants().containsKey(this.bukkit) ||
}else{ (ConfigOptions.INSTANCE.getAddBookEnchantmentAsStoredEnchantment() && item.containsEnchantment(this.bukkit));
} else {
return item.containsEnchantment(this.bukkit); return item.containsEnchantment(this.bukkit);
} }
} }
@ -72,7 +74,7 @@ public class CABukkitEnchantment extends CAEnchantmentBase {
@Override @Override
public void addEnchantmentUnsafe(@NotNull ItemStack item, int level) { public void addEnchantmentUnsafe(@NotNull ItemStack item, int level) {
if (ItemUtil.INSTANCE.isEnchantedBook(item)) { if (ItemUtil.INSTANCE.isEnchantedBook(item)) {
EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta)item.getItemMeta()); EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta) item.getItemMeta());
assert bookMeta != null; assert bookMeta != null;
bookMeta.addStoredEnchant(this.bukkit, level, true); bookMeta.addStoredEnchant(this.bukkit, level, true);
@ -86,19 +88,20 @@ public class CABukkitEnchantment extends CAEnchantmentBase {
@Override @Override
public void removeFrom(@NotNull ItemStack item) { public void removeFrom(@NotNull ItemStack item) {
if (ItemUtil.INSTANCE.isEnchantedBook(item)) { if (ItemUtil.INSTANCE.isEnchantedBook(item)) {
EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta)item.getItemMeta()); EnchantmentStorageMeta bookMeta = ((EnchantmentStorageMeta) item.getItemMeta());
assert bookMeta != null; assert bookMeta != null;
bookMeta.removeStoredEnchant(this.bukkit); bookMeta.removeStoredEnchant(this.bukkit);
bookMeta.removeEnchant(this.bukkit);
item.setItemMeta(bookMeta); item.setItemMeta(bookMeta);
}else{ } else {
item.removeEnchantment(this.bukkit); item.removeEnchantment(this.bukkit);
} }
} }
@NotNull @NotNull
public static EnchantmentRarity getRarity(Enchantment enchantment){ public static EnchantmentRarity getRarity(Enchantment enchantment) {
try { try {
return EnchantmentProperties.valueOf(enchantment.getKey().getKey().toUpperCase(Locale.ENGLISH)).getRarity(); return EnchantmentProperties.valueOf(enchantment.getKey().getKey().toUpperCase(Locale.ENGLISH)).getRarity();
} catch (IllegalArgumentException ignored) { } catch (IllegalArgumentException ignored) {
@ -112,6 +115,7 @@ public class CABukkitEnchantment extends CAEnchantmentBase {
} }
private static Method getAnvilCostMethod; private static Method getAnvilCostMethod;
static { static {
Class<Enchantment> clazz = Enchantment.class; Class<Enchantment> clazz = Enchantment.class;
try { try {
@ -144,14 +148,14 @@ public class CABukkitEnchantment extends CAEnchantmentBase {
} }
private static EnchantmentRarity findRarity(Enchantment enchantment) { private static EnchantmentRarity findRarity(Enchantment enchantment) {
if(getAnvilCostMethod == null) return EnchantmentRarity.COMMON; if (getAnvilCostMethod == null) return EnchantmentRarity.COMMON;
try { try {
int itemCost = (int) getAnvilCostMethod.invoke(enchantment); int itemCost = (int) getAnvilCostMethod.invoke(enchantment);
return EnchantmentRarity.getRarity(itemCost); return EnchantmentRarity.getRarity(itemCost);
} catch (IllegalAccessException | InvocationTargetException e) { } 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; return EnchantmentRarity.COMMON;
} }
@ -160,7 +164,7 @@ public class CABukkitEnchantment extends CAEnchantmentBase {
@Override @Override
public boolean equals(Object obj) { public boolean equals(Object obj) {
if(!(obj instanceof CABukkitEnchantment other)){ if (!(obj instanceof CABukkitEnchantment other)) {
return false; return false;
} }

View file

@ -20,7 +20,7 @@ import java.util.function.Consumer;
* *
* @param <T> Type of the factory of the type of setting the gui should edit. * @param <T> Type of the factory of the type of setting the gui should edit.
*/ */
public abstract class AbstractEnchantConfigGui<T extends SettingGui.SettingGuiFactory> extends SettingGuiListConfigGui<CAEnchantment, T> implements ValueUpdatableGui { public abstract class AbstractEnchantConfigGui<T extends SettingGui.SettingGuiFactory> extends SettingGuiListConfigGui<CAEnchantment, T>{
/** /**
* Constructor for a gui displaying available enchantment to edit a enchantment setting. * Constructor for a gui displaying available enchantment to edit a enchantment setting.

View file

@ -31,6 +31,7 @@ object ConfigOptions {
const val ITEM_RENAME_COST = "item_rename_cost" const val ITEM_RENAME_COST = "item_rename_cost"
const val SACRIFICE_ILLEGAL_COST = "sacrifice_illegal_enchant_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 // Color related config
const val ALLOW_COLOR_CODE = "allow_color_code" const val ALLOW_COLOR_CODE = "allow_color_code"
@ -78,6 +79,7 @@ object ConfigOptions {
const val DEFAULT_ITEM_RENAME_COST = 1 const val DEFAULT_ITEM_RENAME_COST = 1
const val DEFAULT_SACRIFICE_ILLEGAL_COST = 1 const val DEFAULT_SACRIFICE_ILLEGAL_COST = 1
const val DEFAULT_ADD_BOOK_ENCHANTMENT_AS_STORED_ENCHANTMENT = false;
// Color related config // Color related config
const val DEFAULT_ALLOW_COLOR_CODE = false const val DEFAULT_ALLOW_COLOR_CODE = false
@ -223,6 +225,16 @@ object ConfigOptions {
?: DEFAULT_SACRIFICE_ILLEGAL_COST ?: 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 * Allow usage of color code
*/ */