CommandTree / CommandTreeNode

基本信息

属性 值
类 mypermissions.command.core.entities.CommandTree(继承 myessentials.entities.api.Tree<CommandTreeNode>)
节点 CommandTreeNode(继承 myessentials.entities.api.TreeNode<CommandTreeNode>)

CommandTree 功能

保存一棵命令树 + 本地化 + 自定义 Bridge。提供命令分发、节点查找、权限校验与按 String perm 递归搜索节点。

接口

方法 行为
commandCall(ICommandSender, List<String> args) 从根向下按 getChild 匹配,命中后 hasPermission(...) 校验,通过则调 node.commandCall(sender, 剩余 args)
getNodeFromArgs(List<String>) 与 commandCall 同流程,但只返回定位到的节点
getArgumentNumber(List<String>) 把 args 消耗完毕前停下,返回剩余参数个数减一(即当前待补全的位置)
hasCommandNode(String perm) / hasCommandNode(root, perm) 递归按 getAnnotation().permission() 匹配
hasPermission(sender, node) 拒绝:!console && (sender is MinecraftServer/RConConsoleSource/CommandBlockLogic) 抛 commands.generic.permission;玩家:通过 PermissionProxy 与可选 customManager 任一 hasPermission(uuid, perm) 通过即可

CommandTreeNode 功能

包装 @Command 注解方法 + 反射 Method,执行命令并负责 help / syntax / tab completion。

构造

  • 传入 parent(可能 null)、commandAnnot、method,构造里建立 localizationKey = perm + ".help",并在 parent.getLocal() 上检查是否存在该本地化(如缺失记 Missing help ERROR)。
  • name / syntax 是带 5 分钟过期的 Suppliers.memoize(懒求值 + 本地化缓存)。

关键方法

方法 行为
commandCall(sender, args) 通过反射调 method.invoke(null, sender, args) 拿 CommandResponse;SEND_HELP_MESSAGE 走 sendHelpMessage(首个数字参数作页码),SEND_SYNTAX 走 sendSyntax;InvocationTargetException 的 Cause 是 CommandException → 用 ChatManager.send,是其它 RuntimeException → 重抛;其它打 ERROR
getTabCompletionList(argumentNumber, argumentStart) 若该节点的 completionKeys 为空则按子节点 localized name 前缀匹配;否则把 argumentNumber 当索引从 completionKeys 查 CommandCompletion.getCompletionList(key) 前缀匹配
sendHelpMessage(sender, page) 首次按 maxComponentsPerPage=9 构造 ChatComponentHelpMenu,之后走分页
sendSyntax(sender) 用 EnumChatFormatting.DARK_AQUA + getLocalizedSyntax() 发到 sender
getLocalizedSyntax() / getLocalizedName() 通过 memoized supplier 取本地化后的字符串
getChild(name) 在子节点里按 localized name 或 alias 查找
getCommandLine() 拼接到根:/name [subname ...]
getCommandTree() 一路向上找到 root,再通过 CommandManager.getTree(rootAnnotation.permission) 反查当前所在 tree

相关条目