读取槽位物品
想把玩家放入槽位的物品名称、数量或 Lore 显示在旁边,可以直接读取 ChaUI 提供的槽位数据。取值使用 itemSlot.bind,不是画布上的组件 id;多个组件绑定同一个槽位时,读到的是同一份物品。
选择读取哪个槽位
| 槽位模式 | 函数参数写法 | 常量前缀 |
|---|---|---|
| 持久槽 | "persistent:reward",也可简写为 "reward" | vals.slots.persistent.reward |
| 临时槽 | "temporary:offer" | vals.slots.temporary.offer |
| 背包映射槽 | "mapped:backpack_0" | vals.slots.mapped.backpack_0 |
不带模式前缀时默认读取持久槽。临时槽和映射槽应明确写出模式,即使它们与持久槽恰好同名,也不会自动串用数据。持久槽还必须先在槽位注册表登记;背包映射 ID 见背包映射表。
三个读取函数
| 英文写法 | 中文写法 | 返回值 |
|---|---|---|
getItemName("temporary:offer") | 获取物品名("temporary:offer") | 当前物品显示名称,空槽返回空字符串 |
getItemLore("temporary:offer", 0) | 获取物品Lore("temporary:offer", 0) | 第 1 行 Lore,不存在时返回空字符串 |
getItemCount("temporary:offer") | 获取物品数量("temporary:offer") | 当前逻辑数量,空槽返回 0 |
槽位参数必须是加引号的固定字符串。Lore 行号从 0 开始,填写非负整数;也可以使用结果为非负整数的数字表达式。读取超出已有行数的位置会得到空字符串。函数用于页面脚本、响应式文字、数字公式和条件;其中名称与 Lore 是字符串,不能直接当成宽高等数字使用。
常量:随物品变化刷新
以 vals.slots.temporary.offer 为例,继续追加以下字段:
| 字段 | 类型 | 空槽结果 |
|---|---|---|
itemId / id | 字符串,例如 minecraft:diamond | minecraft:air |
name | 物品名称字符串 | 空字符串 |
count | 逻辑数量 | 0 |
loreText | 用换行连接的完整 Lore | 空字符串 |
lore | Lore 行列表,可读取 lore[0] | 空列表,越界索引为 null |
中文根前缀可以写为 常量.槽位,例如 常量.槽位.temporary.offer.count。这些数据只读,会随客户端收到的槽位同步刷新。未收到物品快照时先显示空槽结果;它们不能作为服务端扣物品、发奖励的权威依据。
完整示例:查看临时槽物品
把下面页面保存为 plugins/ChaUI/pages/slot_info_demo.yml,按指令说明重新载入并打开。它不需要注册持久槽或启用数据库。
yaml
id: slot_info_demo
version: 1
title: 槽物品信息
size:
width: 360
height: 180
coordinateMode: absolute
display:
mode: screen
vars:
summary: "点击按钮读取一次物品信息"
elements:
- id: offer_slot
type: item_slot
layout:
x: 20
y: 20
width: 18
height: 18
itemSlot:
bind: offer
mode: temporary
closePolicy: return_to_player
- id: live_info
type: text
layout:
x: 50
y: 20
text:
value: "当前:{vals.slots.temporary.offer.name} × {vals.slots.temporary.offer.count}"
- id: inspect
type: button
layout:
x: 20
y: 55
width: 120
height: 20
button:
label: 读取一次
events:
leftClick: |
vars.summary = 获取物品名("temporary:offer") + " × " + 获取物品数量("temporary:offer") + "\n" + 获取物品Lore("temporary:offer", 0)
- id: inspected_info
type: text
layout:
x: 20
y: 90
text:
value: "{vars.summary}"把物品放进左上角的槽位,旁边的文字会自动更新。点击“读取一次”后,下方显示当时的名称、数量和第 1 行 Lore;它保存到页面变量里,之后取出物品不会自动改写这段摘要。文字宽高由实际内容和换行自动计算。
常见错误
- 读到空值:先核对
bind与模式。示例的绑定是offer,不能传入组件 IDoffer_slot,也不能省略temporary:。 - 把槽位函数写进服务端通用方法:这些读取依赖当前客户端页面的槽位数据,不能在
global-scripts.yml中当作服务器库存查询使用。 - 给
vals.slots.*赋值:它只提供信息。修改物品需要正常槽位交互或物品 API。 - 想读取替换箱子里的菜单物品:根级
containerBinding使用原版容器的数据,应改用容器槽位与组件物品视图,不要把容器绑定 ID 当作这里的虚拟槽 ID。
猹件开发组