Skip to content
On this page

槽位、按钮与物品信息

containerBinding 是替换页面与当前原版容器之间的连接。它写在组件根级,值是语义槽位 ID。相同页面可以让多个组件绑定同一格:一个绘制物品图标,一个显示名称,一个显示 Lore,另一个作为实际点击按钮。

箱子槽位编号

箱子顶部槽位写作 container_0container_1……,按从左到右、从上到下排列。数字从 0 开始:

人类看到的位置语义 ID
第 1 格container_0
第 9 格container_8
第 2 行中央(第 14 格)container_13
三行箱子最后一格container_26
六行箱子最后一格container_53

container_N 只能落在当前箱子的真实范围内。三行箱子绑定 container_30 会被判定越界,脚本改绑也会拒绝这次赋值并保留旧值。

玩家背包、主副手、盔甲与合成槽的 ID 请查看替换玩家背包

不同组件的行为

组件绑定后的作用
button点击时代理对应原版槽位,适合第三方插件用菜单物品充当按钮的页面。
item_slot显示真实物品,并保留拖拽、拆分、Shift、数字键和双击等原版槽位操作。
item_display只显示真实物品,不主动提供槽位操作。
文本、图片、矩形等可以读取绑定物品信息和显示提示,但不会自动获得槽位点击行为。

绑定按钮的有效左键点击顺序是:先点击原版槽位,再更新按钮选中变量,最后执行按钮自己的 events.leftClick。第三方插件改变物品或 Lore 后,界面会在原版同步到达时自动刷新。

读取名称与 Lore

每个绑定位置和绑定组件都会提供四个只读字段:

字段说明
itemId物品命名空间 ID,空槽为 minecraft:air
count物品数量,空槽为 0
name当前显示名称。
loreText把原 Lore 各行用换行连接后的文字。

按固定槽位读取:

text
{vals.container.slots.container_13.name}
{vals.container.slots.container_13.loreText}

按组件当前绑定读取:

text
{vals.container.components.menu_button.name}
{vals.container.components.menu_button.loreText}

按组件读取更适合动态改绑。menu_buttoncontainer_13 改到 container_22 后,同一段文字会自动显示新槽位的信息。

原版物品提示

绑定组件默认 containerTooltip: true。鼠标悬浮时会显示当前物品的原版完整提示,包括名称、Lore 和客户端能够显示的其他信息。

提示优先级固定为:

  1. 组件显式 tooltip
  2. 原版物品提示;
  3. 不显示提示。

显式 tooltip 与原版提示不会叠加。若页面已经把名称和 Lore 完整绘制出来,可以设置:

yaml
containerTooltip: false

脚本动态改绑

先在页面默认变量中准备目标槽位:

yaml
vars:
  selectedSlot: container_13

按钮点击脚本可以把另一个组件切换到当前变量指定的槽位:

javascript
component("detail_item").containerBinding = vars.selectedSlot

也可以复制另一个组件的当前绑定:

javascript
component("detail_item").containerBinding = component("menu_button").containerBinding

解除绑定使用真正的 null,不要写成字符串:

javascript
component("detail_item").containerBinding = null

中文写法同样可用:

javascript
组件("详情物品").容器绑定 = 组件("菜单按钮").容器绑定

脚本修改只影响当前打开的容器会话,不会写回页面 yml。关闭后重新打开会恢复保存的 containerBinding

若脚本给出非法 ID、当前容器不存在的槽位或会形成不支持的绑定,这条赋值会被拒绝,组件保留旧绑定,后续独立脚本仍会继续执行。

按下期间改绑

鼠标按下时,ChaUI 会记住当时命中的组件与槽位。即使 Press 或其他脚本在松开前修改绑定,本次点击仍使用按下时捕获的槽位;新绑定从下一次点击开始生效。这样可以避免按下一个按钮、松开却意外点击另一格。