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"
version = "1.11.2"
version = "1.11.3"
repositories {
// EcoEnchants

View file

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

View file

@ -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<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) ->
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)

View file

@ -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<Enchantment> 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;
}

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.
*/
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.

View file

@ -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
*/