拓冰建站拓冰建站
首页 / 资讯中心 / 正文

CommandAPI树形命令指南:CommandTree与可选参数完全教程

CommandAPI树形命令指南CommandTree与可选参数完全教程【免费下载链接】CommandAPIA Bukkit/Spigot API for the command UI introduced in Minecraft 1.13项目地址: https://gitcode.com/gh_mirrors/co/CommandAPI本文面向新手带你快速掌握CommandAPI 树形命令通过CommandTree注册 Minecraft 命令树以及为 Bukkit/Spigot 插件正确添加可选参数optional arguments。CommandAPI 是一个基于 Minecraft 1.13 命令 UI 的插件开发 API无需在plugin.yml中注册命令也无需引入 Brigadier 依赖。 什么是 CommandAPI 树形命令CommandAPI 提供两种命令注册风格适合不同规模的插件注册方式风格适用场景CommandAPICommand线性链式withArgumentswithSubcommand结构简单的单层/双层命令CommandTree树形链式用then一层层向下延伸类似 Brigadier 的多层级命令树CommandTree的核心思想是每个参数都是树上的一个节点节点可以再挂子节点直到某个节点调用executes(...)才真正执行逻辑。这样/perm group add xxx 玩家这类多段命令就能用一条链式表达式写完而不必手动嵌套子命令对象。 树形命令的最大好处路径即结构。玩家输入命令时游戏会按树逐层匹配天然杜绝了非法参数问题。⚡ 三步搭建你的 CommandTree以README.md中的官方示例为例创建一个权限命令new CommandTree(perm) .then(new MultiLiteralArgument(group, user)) .then(new MultiLiteralArgument(add, remove)) .then(new StringArgument(permission)) .then(new StringArgument(groupName)) .executes((sender, args) - { // args [group 或 user, add 或 remove, permission, groupName] }) .register();第 1 步创建根节点——new CommandTree(perm)表示命令为/perm。第 2 步用then串起参数链—— 每个.then(参数)代表命令的一个词位。MultiLiteralArgument(group, user)表示这一位只接受group或user两个值输入时玩家还能看到自动补全提示。第 3 步注册命令—— 调用.register()按插件名作为命名空间或.register(yournamespace)指定命名空间。树形命令不需要在plugin.yml里声明。Bukkit 平台的树形命令入口源码见commandapi-platforms/commandapi-bukkit/commandapi-bukkit-core/src/main/java/dev/jorel/commandapi/CommandTree.java 可选参数Optional Arguments三种写法可选参数就是玩家可以不填的参数比如/heal [玩家名]——不填时默认作用于自己。写法 1对参数调用setOptional(true)new CommandAPICommand(heal) .withArguments(new PlayerArgument(target).setOptional(true)) .executesPlayer((player, args) - { /* ... */ });写法 2使用withOptionalArguments批量追加new CommandAPICommand(heal) .withOptionalArguments(new PlayerArgument(target)) .executesPlayer((player, args) - { /* ... */ });withOptionalArguments内部会自动对每个参数调用setOptional(true)是更不容易出错的写法。相关实现在commandapi-core/src/main/java/dev/jorel/commandapi/AbstractCommandAPICommand.java写法 3Kotlin DSL推荐 Kotlin 开发者commandAPICommand(heal) { playerArgument(target, optional true) playerExecutor { player, args - /* ... */ } }Kotlin DSL 中几乎每个参数构建器都带optional开关见commandapi-kotlin/commandapi-kotlin-bukkit/src/main/kotlin/dev/jorel/commandapi/kotlindsl/CommandAPICommandDSL.kt 运行时如何获取可选参数的值可选参数没被填写时参数值是null所以取值后必须判空并给默认值Object target args.get(target); Player p (target ! null) ? (Player) target : player; // 没填就作用于自己这是新手最常踩的坑直接强转使用会导致空指针崩溃。⚠️ 常见错误可选参数必须排在必选参数之后CommandAPI 要求必选参数不能出现在可选参数后面否则会抛出OptionalArgumentException提示 non-optional argument after optional。例如 ❌ 错误name [count]之后再接一个必选参数。 ✅ 正确所有必选参数在前可选参数统一放在最后。异常类定义在commandapi-core/src/main/java/dev/jorel/commandapi/exceptions/OptionalArgumentException.java 核心源码与模块路径速查模块路径树形命令BukkitCommandTree.java命令构建基类含可选参数逻辑AbstractCommandAPICommand.java可选参数校验异常OptionalArgumentException.javaKotlin DSL 扩展CommandAPICommandDSL.kt更多完整示例README.md 获取 CommandAPI 项目git clone https://gitcode.com/gh_mirrors/co/CommandAPI✅ 小结一条命令树 可选参数的心法简单命令用CommandAPICommand多层结构用CommandTreethen链。可选参数三选一setOptional(true)、withOptionalArguments(...)、Kotlinoptional true。取值必判空默认值给玩家最友好的行为。必选参数永远放在可选参数前面否则注册时直接抛异常。按这四条走你的插件命令就能拥有 Minecraft 1.13 的原生命令体验逐词补全、错误拦截、/execute兼容全部开箱即用。【免费下载链接】CommandAPIA Bukkit/Spigot API for the command UI introduced in Minecraft 1.13项目地址: https://gitcode.com/gh_mirrors/co/CommandAPI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门