尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
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),仅供参考
RELATED

相关推荐

如何参与TetraForce开发:贡献流程、风格指南与Mod化扩展清单

如何参与TetraForce开发:贡献流程、风格指南与Mod化扩展清单

如何参与TetraForce开发:贡献流程、风格指南与Mod化扩展清单 【免费下载链接】TetraForce GBC Zelda-inspired game with online multiplayer. Built with Godot Engine 项目地址: https://gitcode.com/gh_mirrors/te/TetraForce TetraForce 是一款基于 Godo…

📅 2026/9/15 11:54:40
Qwen3.8-27B-Uncensored-FP8权重结构深度剖析:7个分片、1606个张量与safetensors索引的秘密

Qwen3.8-27B-Uncensored-FP8权重结构深度剖析:7个分片、1606个张量与safetensors索引的秘密

Qwen3.8-27B-Uncensored-FP8权重结构深度剖析:7个分片、1606个张量与safetensors索引的秘密 【免费下载链接】Qwen3.8-27B-Uncensored-FP8 项目地址: https://ai.gitcode.com/hf_mirrors/orcarouter/Qwen3.8-27B-Uncensored-FP8 🔍 本文带你逐层拆解 Qwen3.…

📅 2026/10/26 11:39:55
C++可变参数模板类继承:从递归模式到现代Concepts实战

C++可变参数模板类继承:从递归模式到现代Concepts实战

1. 项目概述:可变参数模板类继承的实战价值在C的现代演进中,可变参数模板(Variadic Templates)无疑是一个里程碑式的特性。它从C11引入,并在后续的C17、20乃至23标准中不断得到增强和完善。这个项目标题“C 17/20/23可…

📅 2026/10/26 3:08:36
MORE NEWS

更多资讯

📰

二叉搜索树平衡化方法与工程实践

1. 问题背景与需求分析1382题"将二叉搜索树变平衡"是LeetCode上一道典型的中等难度树结构题目。这道题考察的核心能力是对二叉搜索树(BST)和平衡二叉搜索树(AVL树)的理解与转换技巧。在实际工程中,我们经常会…

📰

企业级Linux发行版选型指南与核心考量

1. 企业级Linux发行版选型核心考量当IT负责人面临企业服务器操作系统选型时,Linux发行版的选择往往让人陷入"选择困难症"。与个人用户不同,企业环境需要特别关注长期支持周期、安全更新机制、硬件兼容性等关键指标。根据我过去十年为不同规模企…

📰

Oracle 26AI下载安装与AI功能配置全指南

1. Oracle 26AI官方下载指南与技术解析作为数据库领域的技术老兵,我注意到近期Oracle 26AI的讨论热度持续攀升。这个融合了AI能力的新版本确实带来了不少突破性改变,但官方下载过程中存在不少技术细节需要注意。本文将基于我十五年的Oracle实战经验&…

📰

分布式系统权限校验:OAuth2.0与Spring Cloud实战

1. 为什么分布式系统需要专门的权限校验方案?在传统单体架构中,权限控制通常通过Session或简单的拦截器就能实现。但随着微服务架构的普及,一个业务请求往往需要跨越多个服务节点,传统的权限校验方式暴露出三个致命缺陷&#xff1…

📰

光电行业展会战略:OFC与上海光博会的双展联动价值

1. 展会背景与行业定位作为光电行业年度盛事,美国OFC(Optical Fiber Communication Conference & Exhibition)与上海光博会(中国国际光电博览会)分别代表着全球东西半球最具影响力的光电技术交流平台。前者创办于1…

📰

不吃显存的语音输入法:轻量级本地语音识别技术解析

1. 为什么“不吃显存”是语音输入法真正的分水岭最近在嵌入式开源项目圈子里,一个叫VoiceIME的项目突然被反复提起——不是因为它有多炫酷的UI,也不是因为支持多少种语言,而是它在一台只有2GB内存、没有独立显卡的老旧Intel Celeron N3350笔记…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬