槽位、按钮与物品信息
containerBinding 是替换页面与当前原版容器之间的连接。它写在组件根级,值是语义槽位 ID。相同页面可以让多个组件绑定同一格:一个绘制物品图标,一个显示名称,一个显示 Lore,另一个作为实际点击按钮。
箱子槽位编号
箱子顶部槽位写作 container_0、container_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 各行用换行连接后的文字。 |
按固定槽位读取:
{vals.container.slots.container_13.name}
{vals.container.slots.container_13.loreText}按组件当前绑定读取:
{vals.container.components.menu_button.name}
{vals.container.components.menu_button.loreText}按组件读取更适合动态改绑。menu_button 从 container_13 改到 container_22 后,同一段文字会自动显示新槽位的信息。
原版物品提示
绑定组件默认 containerTooltip: true。鼠标悬浮时会显示当前物品的原版完整提示,包括名称、Lore 和客户端能够显示的其他信息。
提示优先级固定为:
- 组件显式
tooltip; - 原版物品提示;
- 不显示提示。
显式 tooltip 与原版提示不会叠加。若页面已经把名称和 Lore 完整绘制出来,可以设置:
containerTooltip: false脚本动态改绑
先在页面默认变量中准备目标槽位:
vars:
selectedSlot: container_13按钮点击脚本可以把另一个组件切换到当前变量指定的槽位:
component("detail_item").containerBinding = vars.selectedSlot也可以复制另一个组件的当前绑定:
component("detail_item").containerBinding = component("menu_button").containerBinding解除绑定使用真正的 null,不要写成字符串:
component("detail_item").containerBinding = null中文写法同样可用:
组件("详情物品").容器绑定 = 组件("菜单按钮").容器绑定脚本修改只影响当前打开的容器会话,不会写回页面 yml。关闭后重新打开会恢复保存的 containerBinding。
若脚本给出非法 ID、当前容器不存在的槽位或会形成不支持的绑定,这条赋值会被拒绝,组件保留旧绑定,后续独立脚本仍会继续执行。
按下期间改绑
鼠标按下时,ChaUI 会记住当时命中的组件与槽位。即使 Press 或其他脚本在松开前修改绑定,本次点击仍使用按下时捕获的槽位;新绑定从下一次点击开始生效。这样可以避免按下一个按钮、松开却意外点击另一格。
猹件开发组