mirror of
https://github.com/alexcrea/CustomAnvil.git
synced 2026-06-24 00:26:16 +02:00
prepare generic command
This commit is contained in:
parent
196392e206
commit
4023eda3e3
6 changed files with 148 additions and 8 deletions
|
|
@ -6,6 +6,7 @@ import org.bukkit.configuration.file.YamlConfiguration
|
|||
import org.bukkit.plugin.java.JavaPlugin
|
||||
import xyz.alexcrea.cuanvil.api.event.CAConfigReadyEvent
|
||||
import xyz.alexcrea.cuanvil.api.event.CAEnchantRegistryReadyEvent
|
||||
import xyz.alexcrea.cuanvil.command.CustomAnvilCmd
|
||||
import xyz.alexcrea.cuanvil.command.EditConfigExecutor
|
||||
import xyz.alexcrea.cuanvil.command.ReloadExecutor
|
||||
import xyz.alexcrea.cuanvil.config.ConfigHolder
|
||||
|
|
@ -290,6 +291,8 @@ open class CustomAnvil : JavaPlugin() {
|
|||
|
||||
command = getCommand(commandConfigName)
|
||||
command?.setExecutor(EditConfigExecutor())
|
||||
|
||||
CustomAnvilCmd(this)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
40
src/main/kotlin/xyz/alexcrea/cuanvil/command/CASubCommand.kt
Normal file
40
src/main/kotlin/xyz/alexcrea/cuanvil/command/CASubCommand.kt
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
package xyz.alexcrea.cuanvil.command
|
||||
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
import org.bukkit.command.CommandSender
|
||||
|
||||
abstract class CASubCommand: CommandExecutor {
|
||||
|
||||
private var alreadySaid = false;
|
||||
override fun onCommand(
|
||||
sender: CommandSender,
|
||||
cmd: Command,
|
||||
cmdstr: String,
|
||||
args: Array<out String>
|
||||
): Boolean {
|
||||
if(!alreadySaid){
|
||||
sender.sendMessage(ChatColor.RED.toString() +
|
||||
"Please not that this command will be replaced as a subcommand of `/customanvil`")
|
||||
alreadySaid = true
|
||||
}
|
||||
|
||||
return executeCommand(sender, cmd, cmdstr, args)
|
||||
}
|
||||
|
||||
abstract fun executeCommand(
|
||||
sender: CommandSender,
|
||||
cmd: Command,
|
||||
cmdstr: String,
|
||||
args: Array<out String>): Boolean
|
||||
|
||||
open fun allowed(sender: CommandSender): Boolean {
|
||||
return true
|
||||
}
|
||||
|
||||
open fun tabCompleter(list: MutableList<String>) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
package xyz.alexcrea.cuanvil.command
|
||||
|
||||
import com.google.common.collect.ImmutableMap
|
||||
import io.delilaheve.CustomAnvil
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.command.TabCompleter
|
||||
import java.util.ArrayList
|
||||
import java.util.Arrays
|
||||
|
||||
class CustomAnvilCmd(plugin: CustomAnvil) : CommandExecutor, TabCompleter {
|
||||
|
||||
// Name of the generic command
|
||||
companion object {
|
||||
private const val genericCommandName = "customanvil"
|
||||
}
|
||||
|
||||
private val editConfigCommand = EditConfigExecutor()
|
||||
private val commands: ImmutableMap<String, CASubCommand>
|
||||
|
||||
init {
|
||||
commands = ImmutableMap.of<String, CASubCommand>(
|
||||
"gui", editConfigCommand,
|
||||
"reload", ReloadExecutor()
|
||||
)
|
||||
|
||||
val self = plugin.getCommand(genericCommandName)!!
|
||||
self.setExecutor(this)
|
||||
self.tabCompleter = this
|
||||
}
|
||||
|
||||
override fun onCommand(
|
||||
sender: CommandSender,
|
||||
cmd: Command,
|
||||
cmdstr: String,
|
||||
args: Array<out String>
|
||||
): Boolean {
|
||||
// Find sub command to execute based on the provided command name
|
||||
val subcmd: CASubCommand? = if(args.isEmpty()) {
|
||||
editConfigCommand
|
||||
}else {
|
||||
commands[args[0].lowercase()]
|
||||
}
|
||||
|
||||
if(subcmd == null) {
|
||||
sender.sendMessage("Invalid subcommand. run `$cmdstr help` to see available commands")
|
||||
return true
|
||||
}
|
||||
|
||||
val newargs = args.copyOfRange(1, args.size)
|
||||
return subcmd.executeCommand(sender, cmd, cmdstr, newargs)
|
||||
}
|
||||
|
||||
override fun onTabComplete(
|
||||
sender: CommandSender,
|
||||
cmd: Command,
|
||||
cmdstr: String,
|
||||
args: Array<out String>
|
||||
): MutableList<String> {
|
||||
val result = ArrayList<String>()
|
||||
if(args.isEmpty()) {
|
||||
for (cmd in commands) {
|
||||
result.add(cmd.key)
|
||||
}
|
||||
} else {
|
||||
val subcmd = commands[args[0].lowercase()]
|
||||
subcmd?.tabCompleter(result)
|
||||
}
|
||||
|
||||
//assumed all provided tab completed string are lowercase
|
||||
return result.stream()
|
||||
.filter { it.startsWith(args[args.size - 1]) }
|
||||
.sorted()
|
||||
.toList()
|
||||
}
|
||||
}
|
||||
|
|
@ -2,17 +2,21 @@ package xyz.alexcrea.cuanvil.command
|
|||
|
||||
import io.delilaheve.CustomAnvil
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.HumanEntity
|
||||
import xyz.alexcrea.cuanvil.dependency.util.PlatformUtil
|
||||
import xyz.alexcrea.cuanvil.gui.config.MainConfigGui
|
||||
import xyz.alexcrea.cuanvil.gui.util.GuiGlobalActions
|
||||
|
||||
class EditConfigExecutor : CommandExecutor {
|
||||
class EditConfigExecutor: CASubCommand() {
|
||||
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
|
||||
if (!sender.hasPermission(CustomAnvil.editConfigPermission)) {
|
||||
override fun executeCommand(sender: CommandSender,
|
||||
cmd: Command,
|
||||
cmdstr: String,
|
||||
args: Array<out String>): Boolean {
|
||||
if (sender !is HumanEntity) return false
|
||||
|
||||
if (!allowed(sender)) {
|
||||
sender.sendMessage(GuiGlobalActions.NO_EDIT_PERM)
|
||||
return false
|
||||
}
|
||||
|
|
@ -25,10 +29,13 @@ class EditConfigExecutor : CommandExecutor {
|
|||
return false
|
||||
}
|
||||
|
||||
if (sender !is HumanEntity) return false
|
||||
MainConfigGui.getInstance().show(sender)
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun allowed(sender: CommandSender): Boolean {
|
||||
return sender.hasPermission(CustomAnvil.editConfigPermission)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,9 +11,13 @@ import xyz.alexcrea.cuanvil.dependency.DependencyManager
|
|||
import xyz.alexcrea.cuanvil.gui.config.global.*
|
||||
import xyz.alexcrea.cuanvil.update.UpdateHandler
|
||||
|
||||
class ReloadExecutor : CommandExecutor {
|
||||
override fun onCommand(sender: CommandSender, cmd: Command, cmdstr: String, args: Array<out String>): Boolean {
|
||||
if (!sender.hasPermission(CustomAnvil.commandReloadPermission)) {
|
||||
class ReloadExecutor : CASubCommand() {
|
||||
|
||||
override fun executeCommand(sender: CommandSender,
|
||||
cmd: Command,
|
||||
cmdstr: String,
|
||||
args: Array<out String>): Boolean {
|
||||
if (!allowed(sender)) {
|
||||
sender.sendMessage("§cYou do not have permission to reload the config")
|
||||
return false
|
||||
}
|
||||
|
|
@ -31,6 +35,10 @@ class ReloadExecutor : CommandExecutor {
|
|||
return commandSuccess
|
||||
}
|
||||
|
||||
override fun allowed(sender: CommandSender): Boolean {
|
||||
return sender.hasPermission(CustomAnvil.commandReloadPermission)
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the command, return true if success or false otherwise
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ authors: [ DelilahEve, alexcrea ]
|
|||
libraries: [${libraries}]
|
||||
|
||||
commands:
|
||||
customanvil:
|
||||
description: Generic command for custom anvil
|
||||
anvilconfigreload:
|
||||
description: Reload every config of this plugin
|
||||
permission: ca.command.reload
|
||||
|
|
@ -36,6 +38,9 @@ permissions:
|
|||
ca.command.reload:
|
||||
default: op
|
||||
description: Allow administrator to reload the plugin's configs
|
||||
ca.command.debug:
|
||||
default: op
|
||||
description: Get debug information about the plugin and server
|
||||
ca.config.edit:
|
||||
default: op
|
||||
description: Allow administrator to edit the plugin's config in game
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue