From 497a3e84bc665a7df16992208f2f6f120f65fb7e Mon Sep 17 00:00:00 2001 From: alexcrea Date: Wed, 8 Jul 2026 17:36:47 +0200 Subject: [PATCH] fix /ca enchant --- .../alexcrea/cuanvil/api/EnchantmentApi.java | 2 +- .../cuanvil/enchant/CAEnchantment.java | 2 +- .../enchant/CAEnchantmentRegistry.java | 2 +- .../cuanvil/command/EnchantExecutor.kt | 37 +++++++++++++------ 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/EnchantmentApi.java b/src/main/java/xyz/alexcrea/cuanvil/api/EnchantmentApi.java index 965d7495..3e8bb8af 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/api/EnchantmentApi.java +++ b/src/main/java/xyz/alexcrea/cuanvil/api/EnchantmentApi.java @@ -128,7 +128,7 @@ public class EnchantmentApi { * @return The custom anvil enchantment of this key. null if not found. */ @Nullable - public static CAEnchantment getByKey(@NotNull NamespacedKey key) { + public static CAEnchantment getByKey(@Nullable NamespacedKey key) { return CAEnchantment.getByKey(key); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java index 1d1aca46..95f3001b 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantment.java @@ -230,7 +230,7 @@ public interface CAEnchantment { * @param key The enchantment key * @return Array of enchantment. */ - static @Nullable CAEnchantment getByKey(@NotNull NamespacedKey key){ + static @Nullable CAEnchantment getByKey(@Nullable NamespacedKey key){ return CAEnchantmentRegistry.getInstance().getByKey(key); } diff --git a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java index 854ed55c..0b2b34dd 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java +++ b/src/main/java/xyz/alexcrea/cuanvil/enchant/CAEnchantmentRegistry.java @@ -151,7 +151,7 @@ public class CAEnchantmentRegistry { * @return Registered enchantment. null if absent. */ @Nullable - public CAEnchantment getByKey(@NotNull NamespacedKey key) { + public CAEnchantment getByKey(@Nullable NamespacedKey key) { return byKeyMap.get(key); } diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EnchantExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EnchantExecutor.kt index dd2957fa..1bdf56a1 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EnchantExecutor.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EnchantExecutor.kt @@ -2,10 +2,14 @@ package xyz.alexcrea.cuanvil.command import io.delilaheve.CustomAnvil import io.delilaheve.util.ConfigOptions +import io.delilaheve.util.ItemUtil.isEnchantedBook +import org.bukkit.Material +import org.bukkit.NamespacedKey import org.bukkit.command.Command import org.bukkit.command.CommandSender import org.bukkit.entity.HumanEntity import xyz.alexcrea.cuanvil.api.EnchantmentApi +import xyz.alexcrea.cuanvil.enchant.CAEnchantment import xyz.alexcrea.cuanvil.util.MaterialUtil.isAir class EnchantExecutor : CASubCommand() { @@ -37,22 +41,18 @@ class EnchantExecutor : CASubCommand() { sender.sendMessage("Missing enchantment parameter") return true } - - 1 -> { - sender.sendMessage("Missing level parameter") - return true - } } - val enchants = EnchantmentApi.getListByName(args[0].lowercase()) - if (enchants.isEmpty()) { + val enchant = firstEnchantment(args[0]) + if (enchant == null) { sender.sendMessage("Enchantment not found: ${args[0]}") return true } - val enchant = enchants.iterator().next() + val level = if (args.size > 1) + args[1].toIntOrNull()?.coerceIn(0, ConfigOptions.ENCHANT_LIMIT) + else 1 - val level = args[1].toIntOrNull()?.coerceIn(0, ConfigOptions.ENCHANT_LIMIT) if (level == null) { sender.sendMessage("Invalid number: ${args[1]}") return true @@ -66,8 +66,15 @@ class EnchantExecutor : CASubCommand() { if (level == 0) { enchant.removeFrom(inHand) + + if (inHand.isEnchantedBook() && EnchantmentApi.getEnchantments(inHand).isEmpty()) + inHand.type = Material.BOOK + sender.sendMessage("${enchant.prettyName} removed") } else { + if (Material.BOOK == inHand.type) + inHand.type = Material.ENCHANTED_BOOK + enchant.addEnchantmentUnsafe(inHand, level) sender.sendMessage("${enchant.prettyName} set to level $level") } @@ -92,10 +99,8 @@ class EnchantExecutor : CASubCommand() { sender: HumanEntity, name: String ): Collection { - val enchants = EnchantmentApi.getListByName(name.lowercase()) - if (enchants.isEmpty()) return listOf() + val enchant = firstEnchantment(name) ?: return listOf() - val enchant = enchants.iterator().next() val limit = ConfigOptions.enchantLimit(enchant) val result = mutableListOf() @@ -110,4 +115,12 @@ class EnchantExecutor : CASubCommand() { return result } + private fun firstEnchantment(name: String): CAEnchantment? { + val enchants = EnchantmentApi.getListByName(name.lowercase()) + if (!enchants.isEmpty()) + return enchants.iterator().next() + + return EnchantmentApi.getByKey(NamespacedKey.fromString(name)) + } + }