diff --git a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt index ac059e9e..4be32bc3 100644 --- a/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt +++ b/src/main/kotlin/xyz/alexcrea/cuanvil/command/EditConfigExecutor.kt @@ -1,28 +1,39 @@ package xyz.alexcrea.cuanvil.command -import com.willfp.eco.core.lookup.matches import io.delilaheve.CustomAnvil 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.dependency.util.PlatformUtil +import xyz.alexcrea.cuanvil.enchant.CAEnchantment import xyz.alexcrea.cuanvil.enchant.CAEnchantmentRegistry import xyz.alexcrea.cuanvil.gui.config.MainConfigGui import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions -class EditConfigExecutor: CASubCommand() { +class EditConfigExecutor : CASubCommand() { - override fun executeCommand(sender: CommandSender, - cmd: Command, - cmdstr: String, - args: Array): Boolean { + override fun allowed(sender: CommandSender): Boolean { + return sender.hasPermission(CustomAnvil.editConfigPermission) + } + + override fun description(): String { + return "Gui to edit the plugin's config" + } + + override fun executeCommand( + sender: CommandSender, + cmd: Command, + cmdstr: String, + args: Array + ): Boolean { if (sender !is HumanEntity) return false if (!allowed(sender)) { sender.sendMessage(GuiGlobalActions.NO_EDIT_PERM) return false } - if(PlatformUtil.isFolia){ + if (PlatformUtil.isFolia) { sender.sendMessage("§cIt look like you are using Folia. Sadly Custom Anvil do not support Config gui for Folia.") sender.sendMessage("§eIt is may come in a future version.") sender.sendMessage("") @@ -35,20 +46,54 @@ class EditConfigExecutor: CASubCommand() { sender.sendMessage("§c/ca gui has been moved to /ca config") } - MainConfigGui.getInstance().show(sender) + if (args.isEmpty()) + processOpen(sender) + else when (args[0].lowercase()) { + "open" -> processOpen(sender) + "enchant" -> processEnchant(sender, args) + "item" -> processItem(sender) + else -> sender.sendMessage("Unknown subcommand \"${args[0]}\"") + } return true } - override fun allowed(sender: CommandSender): Boolean { - return sender.hasPermission(CustomAnvil.editConfigPermission) + private fun processEnchant(sender: HumanEntity, args: Array) { + val enchantToFilter: Set + if (args.size <= 1) { + val item = sender.inventory.itemInMainHand + + enchantToFilter = EnchantmentApi.getEnchantments(item).keys + if (enchantToFilter.isEmpty()) { + sender.sendMessage("No enchantment found in the item you are holding") + return + } + } else { + enchantToFilter = HashSet(EnchantmentApi.getListByName(args[1].lowercase())) + + if (enchantToFilter.isEmpty()) { + sender.sendMessage("No enchantment found with the name \"${args[1]}\"") + return + } + } + + // TODO open enchantments edit gui + } - override fun description(): String { - return "Gui to edit the plugin's config" + private fun processItem(sender: HumanEntity) { + // TODO open item edit gui } - private fun allEnchantmentsByName(): Collection{ + private fun processOpen(sender: HumanEntity) { + MainConfigGui.getInstance().show(sender) + } + + // --------------- + // Tab completer + // --------------- + + private fun allEnchantmentsByName(): Collection { val names = mutableSetOf() for (enchantment in CAEnchantmentRegistry.getInstance().values()) { names.add(enchantment.name) @@ -59,16 +104,19 @@ class EditConfigExecutor: CASubCommand() { } override fun tabCompleter(sender: CommandSender, args: Array, list: MutableList) { - list.addAll(when (args.size) { - 1 -> listOf("item", "enchant", "open") - 2 -> { - when(args[0].lowercase()) { - "enchant" -> allEnchantmentsByName() - else -> listOf() + list.addAll( + when (args.size) { + 1 -> listOf("item", "enchant", "open") + 2 -> { + when (args[0].lowercase()) { + "enchant" -> allEnchantmentsByName() + else -> listOf() + } } + + else -> listOf() } - else -> listOf() - }) + ) }