From f6b01422389c0ccaf57c7781e785874badb9e747 Mon Sep 17 00:00:00 2001 From: 502647092 Date: Fri, 25 Nov 2016 20:11:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=B8=BB=E5=91=BD=E4=BB=A4=E5=B8=AE?= =?UTF-8?q?=E5=8A=A9=E9=A1=B5=E9=9D=A2=E7=94=9F=E6=88=90=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 502647092 --- .../pw/yumc/YumCore/commands/CommandHelp.java | 2 +- .../pw/yumc/YumCore/commands/CommandMain.java | 25 ++++++++++++++++--- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/main/java/pw/yumc/YumCore/commands/CommandHelp.java b/src/main/java/pw/yumc/YumCore/commands/CommandHelp.java index 9122ef0..9e11e24 100644 --- a/src/main/java/pw/yumc/YumCore/commands/CommandHelp.java +++ b/src/main/java/pw/yumc/YumCore/commands/CommandHelp.java @@ -87,7 +87,7 @@ public class CommandHelp { int page = 1; try { page = Integer.parseInt(args[1]); - page = page == 0 ? 1 : page; + page = page < 1 ? 1 : page; } catch (Exception ignored) { } String helpkey = label + page; diff --git a/src/main/java/pw/yumc/YumCore/commands/CommandMain.java b/src/main/java/pw/yumc/YumCore/commands/CommandMain.java index 5644832..2f822a2 100644 --- a/src/main/java/pw/yumc/YumCore/commands/CommandMain.java +++ b/src/main/java/pw/yumc/YumCore/commands/CommandMain.java @@ -6,8 +6,10 @@ import org.bukkit.command.CommandSender; import org.bukkit.command.PluginCommand; import pw.yumc.YumCore.bukkit.Log; import pw.yumc.YumCore.bukkit.P; +import pw.yumc.YumCore.commands.annotation.Help; import pw.yumc.YumCore.commands.info.CommandInfo; import pw.yumc.YumCore.commands.interfaces.Executor; +import pw.yumc.YumCore.commands.interfaces.HelpGenerator; import java.lang.reflect.Method; import java.util.*; @@ -32,6 +34,10 @@ public class CommandMain implements CommandExecutor { * 命令帮助处理 */ private CommandHelp help; + /** + * 帮助页生成 + */ + private HelpGenerator helpGenerator = new MainHelpGenerator(); /** * 主类命令管理类 @@ -58,6 +64,7 @@ public class CommandMain implements CommandExecutor { } } help = new CommandHelp(cmds); + help.setHelpGenerator(helpGenerator); return this; } @@ -70,7 +77,6 @@ public class CommandMain implements CommandExecutor { try { Class sender = params[0]; cmds.add(ci); - cmdCache.put(ci.getName(), ci); return true; } catch (ArrayIndexOutOfBoundsException | ClassCastException ignored) { } @@ -84,7 +90,6 @@ public class CommandMain implements CommandExecutor { if (cmd == null) { if ((cmd = CommandKit.create(ci.getName(), ci.getAliases().toArray(new String[] {}))) == null) { throw new IllegalStateException("未找到命令 必须在plugin.yml先注册 " + ci.getName() + " 命令!"); } } - cmd.setAliases(ci.getAliases()); cmd.setExecutor(this); } @@ -99,6 +104,7 @@ public class CommandMain implements CommandExecutor { if (!cmdCache.containsKey(cmd)) { for (CommandInfo cmdinfo : cmds) { if (cmdinfo.isValid(cmd)) { + Log.d("匹配命令: %s => %s 已缓存...", cmd, cmdinfo); cmdCache.put(cmd, cmdinfo); break; } @@ -110,11 +116,24 @@ public class CommandMain implements CommandExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { - if (args.length > 1 && args[0].equalsIgnoreCase("help")) { + Log.d("执行者: %s 触发主命令: %s 参数: %s", sender.getName(), label, Arrays.toString(args)); + if (args.length > 0 && args[0].equalsIgnoreCase("?")) { help.send(sender, label, args); return true; } CommandInfo manager = getByCache(label); return manager != null && manager.execute(sender, label, args); } + + private class MainHelpGenerator extends CommandHelp.DefaultHelpGenerator { + private String helpBody = "§6/%1$s §e%2$s §6- §b%3$s"; + + @Override + public String body(String label, CommandInfo ci) { + String aliases = Arrays.toString(ci.getCommand().aliases()); + String cmd = ci.getName() + (aliases.length() == 2 ? "" : "§7" + aliases); + Help help = ci.getHelp(); + return String.format(helpBody, cmd, help.possibleArguments(), parse(help.value())); + } + } }