Skip to content

命令与权限 ​

EmakiAccessory 的全部命令如下, 每条命令要什么权限, 管理员指令怎么用, 以及为什么同一个玩家的饰品数据同时只能由一个窗口改写

EmakiAccessory 的命令在运行时注册, 所以你不会在 paper-plugin.yml 里看到 commands: 段

主命令是 /emakiaccessory, 别名 /eaccessory, /eacc. 你不带参数, 或输入了无法识别的子命令时, 会打印帮助

子命令 ​

用法权限说明
/eacc, /eacc helpemakiaccessory.use打印帮助
/eacc open [页]emakiaccessory.use打开自己的饰品栏; 省略页时打开当前启用页
/eacc listemakiaccessory.use列出当前启用页的饰品槽与占用情况
/eacc pagesemakiaccessory.use列出所有饰品页, 当前启用页, 各页占用数量与无权限页
/eacc retrieve <页>emakiaccessory.use取回该页全部饰品 (已声明槽位与孤儿槽一并取出, 放回背包, 放不下的掉在脚下)
/eacc reloademakiaccessory.reload重载配置, 部位, 饰品页与套装, 并回显槽位数, 套装数与问题数
/eacc debugemakiaccessory.debug转发给 CoreLib 的调试子命令; 调试功能不可用时提示 command.debug_unavailable
/eacc admin <...>emakiaccessory.admin管理指令, 见下文

无法识别的子命令与空参数都会打印帮助. help 不是独立分支, 而是未命中任何子命令时的默认行为 (补全列表里会列出它)

你可以在控制台执行 reload 与 debug; open, list, pages, retrieve 以及 admin view, admin edit 只能由玩家执行, 在控制台执行会收到"只能由玩家执行"提示. 玩家数据尚未加载完成时, 这些命令会提示稍后再试 (general.data_loading), 而不是返回空结果

注册根命令时声明了 emakiaccessory.use, 这是命令入口的权限要求; 各子命令在此之上再按上表校验自己的权限节点. 该权限默认 true, 所以默认配置下不影响使用

管理指令 ​

用法额外权限说明
/eacc admin view <玩家>无只读查看饰品; 目标不在缓存中时会异步读档再打开, 读档失败提示 command.admin_load_failed
/eacc admin edit <玩家>emakiaccessory.admin.edit可写编辑饰品, 仅限在线 (已加载) 目标; 目标不在缓存中提示 command.admin_target_offline
/eacc admin clear <玩家>无清空该玩家全部页的饰品, 不可撤销, 逐条记入日志 (页, 槽位, 材质, 数量, 名称); 目标未加载时提示 command.admin_target_offline
/eacc admin save无立刻保存所有还没写到文件的改动, 并回显保存份数

四个管理子命令都先要求 emakiaccessory.admin. edit 在此之上额外要求 emakiaccessory.admin.edit -- 这样把"能看"与"能改"分成两个节点, 你可以只给客服查看权而不给修改权

view 与 edit 要由玩家执行; clear 与 save 可以在控制台执行. <玩家> 先按在线名精确匹配, 再按离线缓存名查找, 都找不到时提示 command.unknown_player

view 支持离线玩家: 目标不在缓存中时会异步读档, 再以只读窗口打开. edit 只允许在线目标, 因为可写窗口需要一个活着的数据会话; 目标已被别的观察者取得写入租约 (同一玩家同时只能有一个可写窗口的占用许可) 时提示 command.admin_target_busy

clear 不发还物品, 只清数据; 它同样要求目标当前没有其他写入者

页面与取回 ​

饰品栏有多页, 你要先分清每条命令的作用范围:

命令作用范围
open [页]打开指定页的界面; 页不存在或没有该页权限时打不开
list只列出当前启用页的槽位
pages列出所有页, 并标出启用页与无权限页
retrieve <页>取回该页全部饰品 (含已声明槽位与孤儿槽)

孤儿槽是"该页数据里存在, 但该页 parts 已不再声明"的槽位. retrieve 不管槽位是否还被声明, 会逐格取出该页所有物品, 经由背包发还 (放不下时掉在脚下), 然后从数据里删除; 取出的物品不能再放回孤儿槽. retrieve 需要取得该玩家的写入租约, 租约被占用时会提示稍后再试

玩家失去某页权限时, 该页数据不会被清除, 系统也不会自动切换启用页; 该页打不开, 它的饰品停止生效, 你可以用 retrieve 自行取回

权限节点 ​

paper-plugin.yml 声明的权限及默认值:

权限默认作用
emakiaccessory.usetrue命令入口权限, 同时用于打开自己的饰品栏, 列出槽位与页, 取回饰品
emakiaccessory.reloadop重载配置
emakiaccessory.debugop调试子命令
emakiaccessory.adminop进入管理指令
emakiaccessory.admin.editop编辑他人饰品
emakiaccessory.page.secondaryop默认副饰品页 secondary 的页权限示例

本模块没有按槽位数量分级的权限. 饰品槽数量完全由 parts.yml 的部位与 count 决定, 不受权限影响

你要分清页权限与命令权限: pages/*.yml 的 permission 只决定某一页能否打开与生效, 逐字使用该权限串, 不参与命令入口判定. 默认资源只为 secondary 页声明了权限串, 自建页需要自行选择权限名

写入租约 ​

同一个玩家的饰品数据同时只允许一个可写窗口. 这条租约是提醒性质的: 第二个观察者取不到租约时会转成只读窗口, 仍然能看, 但你的所有修改都会被拒绝

租约是在真正提交改动时检查的, 不是在刷新画面时检查, 所以失去租约的观察者仍能看完当前画面, 只是改不动