mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-23 08:14:00 +02:00
Add option to consider book enchantment as stored enchantment
This commit is contained in:
parent
a74470bd0d
commit
27604dbb81
6 changed files with 38 additions and 19 deletions
|
|
@ -16,7 +16,7 @@ plugins {
|
|||
}
|
||||
|
||||
group = "xyz.alexcrea"
|
||||
version = "1.11.2"
|
||||
version = "1.11.3"
|
||||
|
||||
repositories {
|
||||
// EcoEnchants
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue