Skip to content

命令与权限

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查看帮助

几个使用细节:

  • listguipointsrewardsclaimquests 都要求执行者必须是玩家。
  • infotoptriggersfunctions 可以从控制台执行。
  • acceptsubmitcancel 既支持玩家自己执行,也支持控制台带玩家名执行。
  • /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参数2arg1arg2:单个参数快捷变量

如果你配了 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.reload
  • achievemaster.give
  • achievemaster.revoke
  • achievemaster.reset
  • achievemaster.admin

也就是说:

  • achievemaster.use
  • achievemaster.gui

这两个虽然已经声明在 plugin.yml,但当前主命令逻辑没有单独拦截检查。

另外还有一类权限来自 commands.yml 自定义命令本身,例如:

  • achieve.command.exchange
  • achieve.command.signin
  • achieve.command.target

这类权限不固定,按你的配置来。

推荐分权方案

普通玩家

如果你只想让玩家正常使用成就系统,当前实现里最省事的做法是:

  • 给默认命令访问权
  • 再按你自己的 commands.yml 给动态命令权限

如果你用的是严格拦截式权限插件,也可以主动给:

  • achievemaster.use
  • achievemaster.gui

任务/活动 GM

建议给:

  • achievemaster.reload

如果还需要手动纠错进度,再补:

  • achievemaster.give
  • achievemaster.revoke
  • achievemaster.reset

核心运维

建议给:

  • achievemaster.admin
  • achievemaster.reload
  • 所有需要的动态命令权限

常见问题

玩家能看到命令,却提示没权限

先检查这几项:

  • 是主命令权限问题,还是 commands.yml 里的动态命令权限问题
  • 执行者有没有自定义命令写的 permission
  • 如果是带目标玩家的动态命令,玩家有没有 achieve.command.target

/ach gui 打不开,但没有报权限

当前源码里 gui 子命令本身没有单独做 achievemaster.gui 判断。

这类问题更常见的原因是:

  • 执行者不是玩家
  • GUI 管理器初始化异常
  • 成就分类为空或图标配置异常

/ach reload 会重载哪些东西

当前实现里会一起刷新这些部分:

  • 主配置
  • 成就与分类
  • 积分奖励
  • GUI 配置
  • 自定义函数
  • JS 函数包装
  • 动态脚本命令
  • 区域配置
  • 消息配置
  • 触发器缓存

下一步阅读

TQ Minecraft Server Plugin Docs