物品交互面板
查阅真实物品区域、变化动作、局部槽位、锁定和关闭返还。
crafting 开放玩家存取真实物品,不会自动添加合成配方。展示图标与存取物品是两类内容:图标用于按钮和装饰,存取区用于玩家放入的物品。
两侧为固定装饰,中间五格用于真实物品存取。
物品交互示例
把文件放到 plugins/Invero/workspace/storage-demo.yml,重载后执行 /invero menu open storage-demo。
menu:
title: '&8物品交互测试'
rows: 1
virtual: false
panels:
- layout:
- '## ##'
crafting:
listener: "mmsg '&7物品区域发生变化'"
icons:
'#':
material: GRAY_STAINED_GLASS_PANE
name: ' '下载 storage-demo.yml。图示为配置效果示意:局部槽位 0、1、7、8 是灰色玻璃,中间 2~6 初始为空,可放入物品再取回。内容变化会发送“物品区域发生变化”。关闭窗口时,仍在这些开放存取槽位中的物品返还玩家;这不是跨菜单保存的仓库。
面板字段
字段写在 panels 中包含 crafting 的那一项。
| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
layout | 文字列表 | 是 | 无布局则不能加载 | 空格清楚标示存取位置,图标用于固定按钮和装饰 |
scale | 两项整数列表 | 否 | 使用 layout 的尺寸 | 面板宽度、高度 |
locate | 两项整数列表 | 否 | 在父容器中自动寻找未占用起点 | 相对于父容器的位置;偏移区域的拖拽、快捷取出有坐标限制,见下文 |
icons(icon、item、items) | 图标映射 | 是 | 缺少整个字段不能加载 | 固定显示图标,不是玩家存入的物品 |
crafting | 物品交互设置对象 | 是 | 不选择物品交互面板 | 可包含 listener,见下表 |
字段写在 crafting 内:
| 字段 | 类型 | 必填 | 省略行为 | 说明 |
|---|---|---|---|---|
listener | 动作、动作列表或结构动作 | 否 | 不执行内容变化动作 | 玩家存取或脚本修改存储后执行;不是合成配方、输入过滤条件或打开事件 |
开放位置与窗口模式
存取区域初始开放未被图标占据的格子,布局中的空格也会开放;一个未绑定图标的其他字符不会自动锁住该格。因此示例用实际玻璃图标围住存取区,而不是仅在布局中写几个字符。
真实物品交互必须在 menu 中设置 virtual: false。顶层包含 crafting 时会保持显示玩家背包;不会顺带关闭虚拟模式,也不会把 override-player-inventory 自动改为 false。本例沿用默认可见背包,让玩家从下方放入、取出物品。
普通面板即使留空,也不会因此允许玩家放物品。不要把图标的 material: APPLE 当作存储区已经有一个真实苹果。
局部槽位与存储操作
storage(别名 crafting)的 at(别名 by)参数是物品交互面板的局部槽位。本例宽九格,storage at 2 表示中间存取区的第一格;不是“第几个存取格”的重新编号,也不是通用的窗口槽位。
| 语句 | 作用 |
|---|---|
storage at 2 exists、storage at 2 exist | 该槽位有非空气物品时返回真 |
storage at 2 empty | 该槽位无物品或为空气时返回真 |
storage at 2 get | 读取物品,不取走它 |
storage at 2 set to item 'APPLE' amount 1 | 用一个真实苹果替换存储内容,不是发放展示图标 |
storage at 2 delete、storage at 2 del | 删除真实物品,不返还玩家 |
storage at 2 lock、storage at 2 free | 锁定或开放该局部槽位,不移动物品 |
storage at 2 isLocked、storage at 2 isFree | 查询是否允许存取,与是否有物品无关 |
storage at -1 lock | 关闭该面板全部开放存取槽位 |
只对真实存在且预留作存取的位置读写,不对装饰槽位或越界位置执行 set。set 是替换,不自动返还旧物品;它的 to 参数接收物品值。需要兑换、消耗或返还时,在按钮动作中明确处理这些步骤。
lock 不会先清空或返还物品。关闭时只返还仍然开放的存取槽位;锁定非空格之前先把其中物品移走或返还,再锁定该格。storage at -1 free 不表示开放全部,开放多个格子需逐格执行 free。
变化动作
玩家普通存取和拖拽结束后,内容在随后一 tick 更新;同一 tick 的多次交互可能合并为一次变化通知。脚本 set、delete 会主动触发变化动作;不要依赖 listener 的精确调用次数统计物品。
需要在变化后更新状态图标时,将下面片段放入 crafting.listener,并把 S 替换为你实际配置的图标 ID:
crafting:
listener: |-
panel at 0 select
icon by 'S' refreshlistener 不保证带有当前点击图标的上下文。单个图标按 ID 刷新时明确选择所在面板;若状态显示在另一面板,选择那一面板的实际索引。同一级存在多个物品交互面板时,storage 优先找到其中第一个,不能只凭 panel select 可靠指定另一个存储区;本页示例只有一个物品交互面板。不要把 storage 写成任意多区域的独立存储访问指令。
已知交互限制
- 支持普通点击、同一物品面板内拖拽,以及背包与存取区之间的 Shift 快捷移动;跨多个面板的一次拖拽不会自动分配。
- 带
locate偏移的物品面板在拖拽和从存取区 Shift 取出时有坐标限制。示例保留顶层左上角位置,不将它宣称为任意偏移下都等价的存储方案。 - 嵌套在
pages中的物品面板不能得到完整的背包交互和关闭返还处理。实际存取使用独立顶层区域。 - 双击收集不提供完整的专门处理,不能据此设计批量收集操作。
窗口模式、背包显示及布局范围见窗口设置。
Last updated on