Skip to content

命令与权限 ​

EmakiStorage 的命令, 权限节点和常见报错列在下面, 可以照着表直接执行

EmakiStorage 的主命令是 /emakistorage, 别名为 /estorage. 文档示例统一使用 /estorage

这些命令不是在 paper-plugin.yml 里声明的, 而是插件启动时通过 CoreLib 注册的, 所以别名只有 /estorage 一个; config.yml 注释里出现的 /storage 是旧写法, 不会被注册

你直接执行 /estorage (不带参数) 就会打开自己的仓库, 需要 emakistorage.use 权限 (emakistorage.admin 也可以). 管理类子命令都要求 emakistorage.admin; reload 和 debug 另外各有专用权限, 但 emakistorage.admin 也能代替

命令列表 ​

命令权限说明
/estorageemakistorage.use打开自己的仓库. 只有玩家能执行
/estorage helpemakistorage.use显示帮助. 整条命令受命令级权限约束, help 分支自己不再额外检查权限, 但仍需要这个权限
/estorage open <player>emakistorage.admin用管理员身份打开目标玩家的仓库. 执行命令的人必须是玩家
/estorage slot grant <player> <amount>emakistorage.admin调整目标玩家的授予槽位数. amount 写负数表示回收槽位
/estorage stacklimit player <player> <limit>emakistorage.admin设置目标玩家的玩家级单槽上限
/estorage stacklimit slot <player> <slot> <limit>emakistorage.admin设置目标玩家某个逻辑槽位的条目级上限
/estorage info <player>emakistorage.admin打印容量是怎么算出来的, 以及页数, stackLimit, 排序模式与总量
/estorage export <player>emakistorage.admin把仓库导出成可读的 YAML, 写到 exports/export-<uuid>.yml
/estorage autopickup [on|off|toggle]emakistorage.autopickup管理自己的自动拾取开关. on (等价于 true / enable) 表示开启; off (等价于 false / disable) 表示关闭; 不写参数或写其他值都按切换处理. 还需要 auto_pickup.enabled: true, 否则会回报未启用
/estorage reloademakistorage.reload 或 emakistorage.admin重载配置, 语言和 GUI 模板, 并回报已加载的模板数量
/estorage debug ...emakistorage.debug 或 emakistorage.admin管理 debug 模块. 可用的模块是 storage 与 chat_input, 具体子命令由 CoreLib 的 DebugCommand 提供

示例 ​

text
/estorage
/estorage help
/estorage open Steve
/estorage slot grant Steve 10
/estorage slot grant Steve -5
/estorage stacklimit player Steve 100000
/estorage stacklimit player Steve max
/estorage stacklimit player Steve 10k
/estorage stacklimit slot Steve 3 5000
/estorage info Steve
/estorage export Steve
/estorage autopickup on
/estorage autopickup
/estorage reload
/estorage debug storage on

参数写法 ​

参数接受的写法说明
<amount> (slot grant)十进制整数, 可为负写负数表示回收授予槽位
<limit> (stacklimit)十进制数字, 紧凑单位 (k m b t p e), max, 0max 会解析成 Long.MAX_VALUE. 0 是明确表示"恢复继承"的写法: 条目级填 0 会落回玩家级, 玩家级填 0 会落回 capacity.default_stack_limit. 其余解析结果只要 <= 0 或者溢出, 都会直接拒绝, 不会截断, 免得手误之后不报错地变成另一个上限
<slot>逻辑槽位索引 (0 起)这个槽位没有条目时, 命令会回报"槽位为空", 不会新建条目

写操作要求目标玩家在线 ​

为什么要求在线: slot grant 和 stacklimit 这两类会改数据的操作, 在目标玩家离线时会直接拒绝, 回报 command.target_offline. 原因是它们要改的是已经载入内存的仓库对象: 如果直接去改一个还没载入的存档, 会和该玩家下次登录时的载入过程撞在一起, 可能把改动覆盖掉或丢掉

注意线程: 针对在线玩家的改数据操作会交给该玩家自己所在区域的线程执行, 不是执行命令的人所在的那个线程. 如果这时该玩家的仓库数据还在载入, 命令会回报 general.data_loading, 请稍后再试

只读命令没有这个限制: info 和 export 走的是快照读取, 需要时可以从磁盘载入数据, 所以对离线玩家也能用. open <player> 也支持离线玩家

权限节点 ​

权限默认覆盖范围
emakistorage.usetrue打开自己的仓库
emakistorage.unlock.purchasetrue在 GUI 里使用付费扩容. 还需要 unlock.purchase_enabled: true
emakistorage.autopickuptrue使用 /estorage autopickup 命令和自动拾取功能
emakistorage.reloadop使用 /estorage reload. 可被 emakistorage.admin 代替
emakistorage.debugop使用 /estorage debug .... 可被 emakistorage.admin 代替
emakistorage.adminop使用 open, slot, stacklimit, info, export, 并可代替 reload/debug 专用权限

数值档位权限 ​

想给某些玩家更多槽位或更高上限, 用下面这两个数值档位权限即可; 它们不在 paper-plugin.yml 里声明, 直接授予带数字后缀的节点

权限前缀作用取值规则
emakistorage.slots.<n>追加 n 个槽位扫描玩家所有生效的权限, 取数字后缀的最大值, 不累加
emakistorage.stacklimit.<n>提供玩家级单槽上限 n同样取最大值

注意: 两者都不支持通配, 写成 emakistorage.slots.* 这种样子会被跳过. 有些权限插件会把通配展开成"持有每一个 n", 那样就会把玩家悄悄推到最高档; 所以实现只接受纯数字后缀, 后缀里有 . 或不是数字的一律忽略

常见 LuckPerms 示例:

text
/lp group default permission set emakistorage.use true
/lp group default permission set emakistorage.unlock.purchase true
/lp group vip permission set emakistorage.slots.100 true
/lp group vip permission set emakistorage.stacklimit.100000 true
/lp group admin permission set emakistorage.admin true

reload 行为 ​

执行 /estorage reload 时, 插件会依次做这几件事:

  1. 释放缺失的默认资源, 受 config.yml > release_default_data 控制
  2. 重新读取 config.yml, lang/*.yml, unlock_costs.yml 与 gui/storage_gui.yml
  3. 按新的 gui.storage_rows 重新换算 GUI 布局
  4. 清理过期流水日志, 并回报已加载的界面模板数量

怎么判断重载真的生效了: 重载会先过 CoreLib 的配置预检, 预检没过 (比如 config.yml 或 gui/ 缺失, 预检服务不可用) 时整次重载会被回滚, 旧配置照旧生效, 控制台会输出预检报告. 这时命令却仍会打印"重载成功"的摘要, 所以到底有没有真正生效, 要看控制台的预检输出和配置键

改完记得看一眼: gui.storage_rows 超出 1–5 时会被收回到范围内, 并在控制台记 warning, 见 配置详解

常见失败原因 ​

场景说明
找不到玩家玩家名对不上, 而且服务器的缓存里也没有这个离线玩家
玩家 ... 当前离线, 无法执行该写操作slot grant / stacklimit 的目标玩家必须在线
仓库数据仍在加载, 请稍后再试目标玩家在线, 但他的仓库还没载入完成
槽位为空stacklimit slot 指定的那个逻辑槽位上现在没有条目
stacklimit 参数被拒绝解析结果 <= 0 (0 本身除外) 或者超出 long 的范围. 请用正整数, 紧凑单位, max 或 0
仓库界面打开失败GUI 模板没加载或者解析失败, 去看控制台的 warning