简体中文
命令与权限
EmakiStorage 的命令, 权限节点和常见报错列在下面, 可以照着表直接执行
EmakiStorage 的主命令是 /emakistorage, 别名为 /estorage. 文档示例统一使用 /estorage
这些命令不是在 paper-plugin.yml 里声明的, 而是插件启动时通过 CoreLib 注册的, 所以别名只有 /estorage 一个; config.yml 注释里出现的 /storage 是旧写法, 不会被注册
你直接执行 /estorage (不带参数) 就会打开自己的仓库, 需要 emakistorage.use 权限 (emakistorage.admin 也可以). 管理类子命令都要求 emakistorage.admin; reload 和 debug 另外各有专用权限, 但 emakistorage.admin 也能代替
命令列表
| 命令 | 权限 | 说明 |
|---|---|---|
/estorage | emakistorage.use | 打开自己的仓库. 只有玩家能执行 |
/estorage help | emakistorage.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 reload | emakistorage.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, 0 | max 会解析成 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.use | true | 打开自己的仓库 |
emakistorage.unlock.purchase | true | 在 GUI 里使用付费扩容. 还需要 unlock.purchase_enabled: true |
emakistorage.autopickup | true | 使用 /estorage autopickup 命令和自动拾取功能 |
emakistorage.reload | op | 使用 /estorage reload. 可被 emakistorage.admin 代替 |
emakistorage.debug | op | 使用 /estorage debug .... 可被 emakistorage.admin 代替 |
emakistorage.admin | op | 使用 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 truereload 行为
执行 /estorage reload 时, 插件会依次做这几件事:
- 释放缺失的默认资源, 受
config.yml > release_default_data控制 - 重新读取
config.yml,lang/*.yml,unlock_costs.yml与gui/storage_gui.yml - 按新的
gui.storage_rows重新换算 GUI 布局 - 清理过期流水日志, 并回报已加载的界面模板数量
怎么判断重载真的生效了: 重载会先过 CoreLib 的配置预检, 预检没过 (比如 config.yml 或 gui/ 缺失, 预检服务不可用) 时整次重载会被回滚, 旧配置照旧生效, 控制台会输出预检报告. 这时命令却仍会打印"重载成功"的摘要, 所以到底有没有真正生效, 要看控制台的预检输出和配置键
改完记得看一眼: gui.storage_rows 超出 1–5 时会被收回到范围内, 并在控制台记 warning, 见 配置详解
常见失败原因
| 场景 | 说明 |
|---|---|
找不到玩家 | 玩家名对不上, 而且服务器的缓存里也没有这个离线玩家 |
玩家 ... 当前离线, 无法执行该写操作 | slot grant / stacklimit 的目标玩家必须在线 |
仓库数据仍在加载, 请稍后再试 | 目标玩家在线, 但他的仓库还没载入完成 |
槽位为空 | stacklimit slot 指定的那个逻辑槽位上现在没有条目 |
stacklimit 参数被拒绝 | 解析结果 <= 0 (0 本身除外) 或者超出 long 的范围. 请用正整数, 紧凑单位, max 或 0 |
仓库界面打开失败 | GUI 模板没加载或者解析失败, 去看控制台的 warning |