Skip to content
iPlugin

物品交互面板

查阅真实物品区域、变化动作、局部槽位、锁定和关闭返还。

crafting 开放玩家存取真实物品,不会自动添加合成配方。展示图标与存取物品是两类内容:图标用于按钮和装饰,存取区用于玩家放入的物品。

storage-demo.yml配置效果示意 · 非游戏截图
图示状态打开时为空
窗口槽位 4窗口坐标 4x0字符 空格

两侧为固定装饰,中间五格用于真实物品存取。

物品交互示例

把文件放到 plugins/Invero/workspace/storage-demo.yml,重载后执行 /invero menu open storage-demo。

plugins/Invero/workspace/storage-demo.yml
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' refresh

listener 不保证带有当前点击图标的上下文。单个图标按 ID 刷新时明确选择所在面板;若状态显示在另一面板,选择那一面板的实际索引。同一级存在多个物品交互面板时,storage 优先找到其中第一个,不能只凭 panel select 可靠指定另一个存储区;本页示例只有一个物品交互面板。不要把 storage 写成任意多区域的独立存储访问指令。

已知交互限制

  • 支持普通点击、同一物品面板内拖拽,以及背包与存取区之间的 Shift 快捷移动;跨多个面板的一次拖拽不会自动分配。
  • 带 locate 偏移的物品面板在拖拽和从存取区 Shift 取出时有坐标限制。示例保留顶层左上角位置,不将它宣称为任意偏移下都等价的存储方案。
  • 嵌套在 pages 中的物品面板不能得到完整的背包交互和关闭返还处理。实际存取使用独立顶层区域。
  • 双击收集不提供完整的专门处理,不能据此设计批量收集操作。

窗口模式、背包显示及布局范围见窗口设置。

Last updated on