界面与展示
本页说明玩家看到的仓库界面:config.yml 的 gui 与 display 两段,gui/storage_gui.yml 模板结构,以及点击语义。
容量与槽位数量见容量与缩容,config.yml 的其余键见配置详解。
gui
gui:
storage_rows: 5
deposit_feedback: actionbar
require_empty_cursor_for_withdraw: false| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
storage_rows | int | 5 | 展示区行数,合法 1–5。功能区永远独占最后一行,所以实际窗口行数 = storage_rows + 1。 |
deposit_feedback | enum | actionbar | 存入成功后的反馈方式:actionbar / message / none。 |
require_empty_cursor_for_withdraw | boolean | false | 取出是否要求光标为空。见下方说明。 |
deposit_feedback 不建议设为 none。混用存入下物品按条目顺序落位,可能落到别的页;关掉反馈后玩家会以为物品消失。
require_empty_cursor_for_withdraw 是防手滑开关。设为 true 时,光标上拿着物品去点展示区槽位不再存入,而是变成无操作并提示 gui.deposit.cursor_guard,用来关掉「本想取出、但光标里还有残留物品」这个误操作窗口;代价是失去「拿着物品点条目即存入」这条快捷路径。设为 false(默认)时保留该快捷存入。要存入仍可用固定投入口或 deposit_all。
storage_rows 换算表
模板文件里的 slots 只是占位值。真实槽位号在加载时按 gui.storage_rows 换算:
storageRows = clamp(gui.storage_rows, 1, 5)
totalRows = storageRows + 1
functionBase = storageRows * 9
展示区槽位 = 0 .. functionBase - 1
功能区槽位 = functionBase + offsetstorage_rows | totalRows | 每页格数 | 展示区槽位 | 功能区槽位(offset 0–8) |
|---|---|---|---|---|
| 1 | 2 | 9 | 0–8 | 9–17 |
| 2 | 3 | 18 | 0–17 | 18–26 |
| 3 | 4 | 27 | 0–26 | 27–35 |
| 4 | 5 | 36 | 0–35 | 36–44 |
| 5 | 6 | 45 | 0–44 | 45–53 |
钳位规则:填 >= 6 时钳到 5 并记 warning;填 <= 0 时钳到 1 并记 warning。totalRows 最大为 6,正好落在 CoreLib 的 1–6 范围内。
storage_gui.yml 模板结构
id: storage_gui
gui_type: CHEST
title: "<gradient:#4DA6FF:#FFD166>绘卷仓库</gradient>"
slots:
storage_slot:
type: storage_slot
slots: [0]
item:
source: "gray_stained_glass_pane"
page_prev:
type: page_prev
offset: 0
slots: [0]
item:
source: "arrow"| 顶层键 | 说明 |
|---|---|
id | 模板 id,必须是 storage_gui,实现按这个 id 取模板。 |
gui_type | 容器类型,CHEST。行数不在此声明,由 gui.storage_rows 推导。 |
title | 窗口标题,支持 MiniMessage。 |
slots | 槽位条目表,键名即条目 key。 |
slots 下可用的 9 个槽位类型:
| 槽位类型 | 作用 |
|---|---|
storage_slot | 展示区原型。必需项,缺失时展示区无法构建,模板整体解析失败。 |
deposit_slot | 固定投入口。光标带物品点击即存入。 |
page_prev | 上一页。 |
page_info | 当前页信息,只做展示。 |
page_next | 下一页。 |
search | 打开搜索输入;搜索中右键清除过滤。 |
sort | 切换排序,Shift 点击反向切换。 |
deposit_all | 一键存入,遍历背包 36 格。 |
unlock | 付费扩容入口。 |
条目的 type 可显式声明;省略时按条目 key 小写推导,因此把条目命名为对应类型名即可。
offset 与 slots 的关系
功能区条目只配 offset(合法 0–8)。模板中的 slots 键仅为通过通用模板解析而保留,加载时会被换算结果覆盖,不能当作真实位置。
offset缺失、非数字或越出 0–8 时,该条目被拒绝并记 warning。- 两个条目占用同一个
offset时,后者被拒绝并记 warning。 - 全部功能条目都被拒绝时记 warning,翻页与存入按钮将不可用。
展示区的 storage_slot 是原型:加载时展开为 0 .. functionBase - 1 整个展示区,其中配置的物品只作为「未解锁槽位」的占位外观来源,不影响已解锁槽位的渲染。
改 gui.storage_rows 后功能区会自动跟随,不需要手改任何槽位号。
GUI 点击语义
| 位置 | 操作 | 效果 |
|---|---|---|
| 展示区槽位 | 光标带物品 + 左键 | 存入整个光标 |
| 展示区槽位 | 光标带物品 + 右键 | 存入 1 个 |
| 展示区槽位 | 光标为空 + 左/右/Shift 左/Shift 右键 | 按 withdraw_amounts 取出 |
| 展示区槽位 | 光标为空 + 中键 | 打开自定义数量输入(受 behavior.withdraw_prompt.enabled 控制,对话框或聊天输入由 behavior.withdraw_prompt.mode 决定) |
deposit_slot | 光标带物品 | 存入整个光标 |
deposit_slot | 光标为空 | 提示投入口为空 |
deposit_all | 点击 | 遍历背包 36 格批量存入 |
sort | 点击 / Shift 点击 | 切换排序 / 反向切换 |
search | 点击 | 打开搜索输入;搜索中右键清除过滤 |
page_prev / page_next | 点击 | 翻页,空页不可翻入 |
| 背包内物品 | Shift 点击 | 重定向到投入口逻辑 |
被拒绝的点击方式:双击、数字键、副手交换键、丢弃键、Ctrl + 丢弃键。这些方式分别会跨槽聚合、绕过光标语义或直接丢弃物品,无法赋予安全含义,点击时统一回报 gui.click.unsupported。
搜索状态下展示区禁止存入(翻页跟随过滤结果,展示区槽位不再对应真实槽位号),但固定投入口仍然可用。
取出数量、排序默认值与存入过滤等行为键见配置详解的 behavior 段。
display
display:
amount_mode: percent
percent_scale: 99
compact_units: ["K", "M", "B", "T", "P", "E"]
compact_decimals: 2
show_exact_amount: true
lore_position: bottom| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
amount_mode | enum | percent | 槽位物品 amount 的表达方式:percent 用 1–99 表示占用百分比,one 恒为 1。 |
percent_scale | int | 99 | percent 模式的刻度上限,实现会钳制到 1–99。 |
compact_units | list | [K, M, B, T, P, E] | 紧凑数量单位,置空则使用精确数字。 |
compact_decimals | int | 2 | 紧凑格式保留的小数位,尾随零会被裁掉。 |
show_exact_amount | boolean | true | 是否在 lore 中额外显示带千分位的精确数量。 |
lore_position | enum | bottom | 生成的展示信息插入 lore 的位置:top / bottom。 |
1–99 刻度规则
max_stack_size 组件的合法范围就是 1–99,因此实现从不使用 100 或更大的值,也不涉及发包技巧。刻度边界是刻意设计的:
| 情形 | 显示的 amount |
|---|---|
amount_mode: one | 恒为 1 |
stackLimit 为不限制(Long.MAX_VALUE)或 <= 0 | 退化为 1,百分比对无限上限没有意义 |
存量 <= 0 | 1 |
存量 >= stackLimit(真正装满) | percent_scale(默认 99) |
| 部分装满 | clamp(round(amount / stackLimit * scale), 1, scale - 1),即默认最多 98 |
没有这些钳位,几乎空的槽位会渲染成 0(不可见),几乎装满的槽位会与真正装满无法区分。
lore 中的百分比文本独立计算于真实 0–100 范围,不继承 1–99 的钳制。
紧凑单位
compact_units 依次对应 10³、10⁶、10⁹、10¹²、10¹⁵、10¹⁸ 六个阈值。Long.MAX_VALUE 约为 9.22E,所以 E 单位覆盖整个 long 范围。小于 1000 或单位列表为空时输出原始数字。