命令与权限
AchieveMaster 的主命令是:
text
/achievement常见别名:
text
/ach
/acm
/cj
/成就这一页主要给服主、策划和运维看。你可以先用它确认三件事:
- 玩家平时会用到哪些命令
- 哪些权限是源码当前真的在检查的
commands.yml里的动态脚本命令应该怎么分权
一页看懂
玩家平时最常用的是这几类:
- 看成就:
/ach list、/ach info、/ach progress、/ach gui - 看积分和奖励:
/ach points、/ach rewards、/ach claim - 看任务:
/ach quests、/ach accept、/ach submit、/ach cancel - 看榜单和帮助:
/ach top、/ach triggers、/ach functions
管理侧最常用的是这几类:
- 重载:
/ach reload - 直接改状态:
/ach give、/ach revoke、/ach reset - 直接改进度:
/ach setprogress、/ach addprogress - 查标记 / 改标记:
/ach flag add|remove|list
还有一类命令不是写死在 plugin.yml 里的,而是从 commands.yml 动态注册出来的脚本命令,比如 /签到、/兑换、/查询积分。
玩家常用命令
| 命令 | 说明 | 当前源码权限检查 |
|---|---|---|
/ach list [分类] | 查看成就列表 | 无 |
/ach info <成就ID> | 查看成就详情 | 无 |
/ach progress <成就ID> | 查看成就进度 | 无 |
/ach gui | 打开成就 GUI | 无 |
/ach points [分类] | 查看总成就分或分类成就分 | 无 |
/ach rewards | 查看可领取奖励和已领取奖励 | 无 |
/ach claim <奖励ID> | 领取成就分奖励 | 无 |
/ach quests | 查看已接取任务 | 无 |
/ach accept <成就ID> | 接取任务 | 无 |
/ach submit <成就ID> | 提交任务 | 无 |
/ach cancel <成就ID> | 取消任务 | 无 |
/ach top [分类] | 查看总榜或分类榜 | 无 |
/ach triggers [关键词] | 查看或搜索可用触发器 | 无 |
/ach functions [分类/关键词/函数名] | 查看内置函数帮助 | 无 |
/ach help | 查看帮助 | 无 |
几个使用细节:
list、gui、points、rewards、claim、quests都要求执行者必须是玩家。info、top、triggers、functions可以从控制台执行。accept、submit、cancel既支持玩家自己执行,也支持控制台带玩家名执行。/ach functions先查函数名,再查分类,再做关键词搜索,适合拿来反查当前服务器实际注册的函数。
任务命令的控制台写法
玩家自己执行时:
text
/ach accept <成就ID>
/ach submit <成就ID>
/ach cancel <成就ID>控制台执行时:
text
/ach accept <成就ID> <玩家名>
/ach submit <成就ID> <玩家名>
/ach cancel <成就ID> <玩家名>这三条命令本身没有独立权限判断,能不能成功主要取决于:
- 这个成就是不是任务模式
- 玩家当前有没有接取
- 任务是否已经完成
- 是否允许取消
- 是否满足提交条件
管理员命令
| 命令 | 说明 | 当前源码权限检查 |
|---|---|---|
/ach reload | 重载配置、成就、函数、区域、动态命令、消息 | achievemaster.reload |
/ach give <玩家> <成就ID> | 直接给予成就 | achievemaster.give |
/ach revoke <玩家> <成就ID> | 撤销成就 | achievemaster.revoke |
/ach reset <玩家> [成就ID] | 重置一个或全部成就进度 | achievemaster.reset |
/ach setprogress <玩家> <成就ID> <数值> | 直接设置进度 | achievemaster.admin |
/ach addprogress <玩家> <成就ID> <数值> | 直接增加进度 | achievemaster.admin |
/ach flag add <玩家> <成就ID> <标记名> | 手动加标记 | achievemaster.admin |
/ach flag remove <玩家> <成就ID> <标记名> | 手动删标记 | achievemaster.admin |
/ach flag list <玩家> <成就ID> | 查看玩家在某个成就上的标记 | achievemaster.admin |
动态脚本命令
commands.yml 里的命令会在运行时注册到 Bukkit 的 CommandMap。这意味着:
- 你不需要重启服务器
- 执行
/ach reload后,旧命令会先注销,再按新配置重新注册 - 一个命令既可以有别名,也可以单独配置权限和冷却
最小配置示例:
yaml
commands:
签到:
permission: ""
aliases: ["qd", "checkin"]
description: "每日签到领取奖励"
cooldown: 0
player-only: true脚本命令执行时,会把这些上下文注入到成就触发器里:
command:当前命令名args:参数数组参数1、参数2、arg1、arg2:单个参数快捷变量
如果你配了 target-player-arg,命令还能把某个参数位当成“目标玩家”:
yaml
commands:
发任务:
permission: "achieve.command.quest"
player-only: false
target-player-arg: 1
args: ["玩家名", "任务ID"]这时有一个额外权限要记住:
achieve.command.target
控制台默认可以指定目标玩家;玩家想指定别人时,需要这个权限。
权限节点总表
plugin.yml 里声明了这些官方权限:
| 权限节点 | 用途 |
|---|---|
achievemaster.admin | 管理总权限 |
achievemaster.use | 基础使用权限 |
achievemaster.gui | 打开 GUI |
achievemaster.reload | 重载 |
achievemaster.give | 给予成就 |
achievemaster.revoke | 撤销成就 |
achievemaster.reset | 重置进度 |
但按当前命令处理器源码,真正被强校验的只有:
achievemaster.reloadachievemaster.giveachievemaster.revokeachievemaster.resetachievemaster.admin
也就是说:
achievemaster.useachievemaster.gui
这两个虽然已经声明在 plugin.yml,但当前主命令逻辑没有单独拦截检查。
另外还有一类权限来自 commands.yml 自定义命令本身,例如:
achieve.command.exchangeachieve.command.signinachieve.command.target
这类权限不固定,按你的配置来。
推荐分权方案
普通玩家
如果你只想让玩家正常使用成就系统,当前实现里最省事的做法是:
- 给默认命令访问权
- 再按你自己的
commands.yml给动态命令权限
如果你用的是严格拦截式权限插件,也可以主动给:
achievemaster.useachievemaster.gui
任务/活动 GM
建议给:
achievemaster.reload
如果还需要手动纠错进度,再补:
achievemaster.giveachievemaster.revokeachievemaster.reset
核心运维
建议给:
achievemaster.adminachievemaster.reload- 所有需要的动态命令权限
常见问题
玩家能看到命令,却提示没权限
先检查这几项:
- 是主命令权限问题,还是
commands.yml里的动态命令权限问题 - 执行者有没有自定义命令写的
permission - 如果是带目标玩家的动态命令,玩家有没有
achieve.command.target
/ach gui 打不开,但没有报权限
当前源码里 gui 子命令本身没有单独做 achievemaster.gui 判断。
这类问题更常见的原因是:
- 执行者不是玩家
- GUI 管理器初始化异常
- 成就分类为空或图标配置异常
/ach reload 会重载哪些东西
当前实现里会一起刷新这些部分:
- 主配置
- 成就与分类
- 积分奖励
- GUI 配置
- 自定义函数
- JS 函数包装
- 动态脚本命令
- 区域配置
- 消息配置
- 触发器缓存