From 05b83dd248edd0a8a0515d8e48e704e8f0e8a4c1 Mon Sep 17 00:00:00 2001 From: MiniDay <372403923@qq.com> Date: Fri, 9 Aug 2024 06:07:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/bukkit/command/ChildCommand.java | 4 +++ .../core/bukkit/command/ParentCommand.java | 29 ++++++++++++------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ChildCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ChildCommand.java index 8f5a958..2f196b4 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ChildCommand.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ChildCommand.java @@ -11,6 +11,10 @@ public abstract class ChildCommand implements TabExecutor { @NotNull public abstract String getUsage(); + public int getArgumentCount() { + return 0; + } + @NotNull public abstract String getDescription(); diff --git a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java index 833b575..d75eeb8 100644 --- a/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java +++ b/core-bukkit/src/main/java/cn/hamster3/mc/plugin/core/bukkit/command/ParentCommand.java @@ -14,10 +14,10 @@ import java.util.stream.Collectors; @SuppressWarnings("unused") public abstract class ParentCommand extends ChildCommand { @NotNull - private final List childCommands; + private final Map childCommands; public ParentCommand() { - childCommands = new ArrayList<>(); + childCommands = new LinkedHashMap<>(); } @NotNull @@ -33,8 +33,8 @@ public abstract class ParentCommand extends ChildCommand { } @NotNull - public List getChildCommands() { - return childCommands; + public Collection getChildCommands() { + return childCommands.values(); } @NotNull @@ -78,7 +78,7 @@ public abstract class ParentCommand extends ChildCommand { @NotNull public List getEndChildCommands() { ArrayList list = new ArrayList<>(); - for (ChildCommand command : childCommands) { + for (ChildCommand command : getChildCommands()) { if (command instanceof ParentCommand) { list.addAll(((ParentCommand) command).getEndChildCommands()); } else { @@ -89,13 +89,16 @@ public abstract class ParentCommand extends ChildCommand { } public void addChildCommand(@NotNull ChildCommand command) { - childCommands.add(command); + if (childCommands.containsKey(command.getName())) { + throw new IllegalArgumentException("command " + command.getName() + " already exists!"); + } + childCommands.put(command.getName(), command); } @NotNull public Map getCommandHelp(CommandSender sender) { Map map = new LinkedHashMap<>(); - for (ChildCommand child : childCommands) { + for (ChildCommand child : getChildCommands()) { if (!child.hasPermission(sender)) { continue; } @@ -131,7 +134,7 @@ public abstract class ParentCommand extends ChildCommand { sendHelp(sender); return true; } - for (ChildCommand childCommand : childCommands) { + for (ChildCommand childCommand : getChildCommands()) { if (!childCommand.getName().equalsIgnoreCase(args[0])) { continue; } @@ -139,6 +142,10 @@ public abstract class ParentCommand extends ChildCommand { CoreMessage.COMMAND_NOT_HAS_PERMISSION.show(sender); return true; } + if (args.length - 1 < getArgumentCount()) { + sender.sendMessage(getUsage() + " " + childCommand.getUsage()); + return true; + } return childCommand.onCommand(sender, command, label, Arrays.copyOfRange(args, 1, args.length)); } CoreMessage.COMMAND_NOT_FOUND.show(sender); @@ -148,18 +155,18 @@ public abstract class ParentCommand extends ChildCommand { @Override public List onTabComplete(@NotNull CommandSender sender, @NotNull Command command, @NotNull String alias, String[] args) { if (args.length == 0) { - return childCommands.stream() + return getChildCommands().stream() .filter(o -> o.hasPermission(sender)) .map(ChildCommand::getName) .collect(Collectors.toList()); } - for (ChildCommand child : childCommands) { + for (ChildCommand child : getChildCommands()) { if (args[0].equalsIgnoreCase(child.getName())) { return child.onTabComplete(sender, command, alias, Arrays.copyOfRange(args, 1, args.length)); } } args[0] = args[0].toLowerCase(); - return childCommands.stream() + return getChildCommands().stream() .filter(o -> o.hasPermission(sender)) .map(ChildCommand::getName) .filter(o -> o.toLowerCase().startsWith(args[0].toLowerCase()))