Skip to content
iPlugin

物品、背包与交互槽位

完整查询 item、inventory、storage/crafting、element 及物品匹配参数。

取得物品

item 内容 [source 来源] [amount 数量],根别名 itemstack。返回 ItemStack,不自动发到背包。

item 'PAPER' amount 1
item 'example_item' source itemtools amount 1
字段类型必填省略行为说明
内容可求值参数是无法取得物品求值后转成文字,例如原版材料名或外部物品 ID
source(by)后的来源可求值文字否materialmaterial、head 或已注册的物品来源,见下方限制
amount(amt)后的数量可求值参数否1转整数并限制在 0~64,位于来源参数之后

物品来源名称不区分大小写;外部来源需要相应插件及可用的物品 ID,具体名称与前提见物品来源。

这里的取得方式只使用可立即获得的物品:source head 虽然可解析,但目前不能完成头颅的生成;source kether、source headdatabase / hdb 这类需要动态生成的来源同样不能通过这条语句取得有效物品。图标的 head 或 texture.source 是另一条配置路径,不能把那里的支持情况直接当成 item 语句的支持情况。

如果内容仍含未解析的占位符,也不能保证返回物品;先把所需业务值求值为实际材料名或 ID。需要将物品发到背包时,交给下节的 inventory give。

物品数量属性

Invero 还为 ItemStack 注册了可读写属性 amount,别名 amt、count:读取当前数量,写入时转整数。属性写入本身没有 item ... amount 的 0~64 限制。这是物品对象属性,不是新的根语句;通用 Kether 属性读写语法见 TabooLib Kether 列表。

玩家背包

以下 inventory 语句作用于执行玩家的真实背包或装备,不是菜单的装饰图标。需要玩家上下文,不需要物品交互面板。

语句子命令别名、参数与结果
inventory close关闭玩家当前背包窗口
inventory count 'minecraft:stone'amount;返回全部匹配物品的数量总和
inventory has 'minecraft:stone' amount 1have、check;返回匹配物品总数是否满足数量
inventory take 'minecraft:stone' amount 1remove;移除匹配数量,返回是否成功
inventory give item 'PAPER' amount 1add;后接一个返回 ItemStack 的可求值参数,交给玩家背包
inventory slot 9槽位参数可求值,返回该背包槽位的 ItemStack 或空值
inventory slot is 9 'minecraft:stone' amount 1is 可写 match;检查指定槽位的类型与数量,返回布尔值
inventory head装备名称见下表,返回对应装备物品
inventory head is 'minecraft:stone' amount 1is 可写 match;检查该装备的类型与数量

检查、移除及装备匹配中的 amount 可省略,省略为 1,数量可以求值。物品匹配规则是原样文字参数,不会自动把其内容当作 Kether 脚本执行。

注意槽位匹配的真实顺序是 slot is 槽位 规则,不是 slot 槽位 is 规则。装备匹配则是 装备名 is 规则。槽位数字采用玩家背包槽位编号,不是图标布局槽位;传入有效编号。

全部装备名称

装备可用名称,不区分大小写
主手hand、mainhand、0
头部head、helmet、1
胸甲chest、chestplate、2
护腿legs、leggings、3
靴子feet、boots、4
副手offhand、5、-1

这些数字是装备名称别名,不是 inventory slot 的数字含义。off_hand 不是此处的装备别名。

物品匹配规则

材料名使用小写,例如 stone、minecraft:stone、material:stone。其他命名空间需要对应的物品匹配扩展实际提供支持,不能仅因为物品来源支持某个插件,就假定它的同名匹配规则也存在。

材料模式匹配方式
stone材料名完全相等
*任意材料
^diamond材料名以 diamond 开头
sword$材料名以 sword 结尾
(sword)材料名包含 sword

%...% 材料标签匹配目前没有启用,不把它当成物品标签查询。

材料后可附元数据规则,例如 'minecraft:stone[name=纪念石,lore=活动]',多个规则用英文逗号分隔,全部满足才匹配。

元数据键别名与真实判断
name物品名称包含所填文字;此项按包含判断,不按比较符强制精确相等
loreLore 的文字表示包含所填文字,同样按包含判断
damagedurability;物品损耗值
modelcustom-model-data;自定义模型数据,未设置时为 0
enchenchant、enchants、enchantment;匹配附魔名称
potionpotions;匹配药水基础类型或自定义效果类型
ench.名称enchant.名称、enchantment.名称;能识别该键,但目前附魔等级读取不能可靠取得整数,不用作可靠等级比较
nbt.路径tag.路径;匹配对应深层 NBT 值,缺失时不匹配

附加规则识别 =、!=、>、>=、<、<= 和 键(候选一|候选二)(分隔符也可用 /)。数字大小比较目前以规则值为左值、物品值为右值,例如 damage>10 实际检查的是 10 > 物品损耗值,不要按通常书写方向理解。名称/Lore 的包含判断和附魔等级限制如上表所示;未知元数据键不会自动扩展成功。

物品交互区域

根语句 storage,别名 crafting。用于物品交互面板,槽位按该面板的局部位置从 0 计数。查找当前面板同级组中的第一个物品交互面板,缺少上下文时从窗口顶层寻找;panel ... select 不保证命中同级第二个目标,不能把它当作多个物品交互面板的精确存取选择器。真实物品交互明确使用 menu.virtual: false,完整面板配置见上述链接。

语法:storage at 槽位 操作 [to 物品]。at 可用 by,槽位为必填可求值整数。

语句别名与返回或可见效果
storage at 2 get返回该交互槽位中的 ItemStack 或空值
storage at 2 existexists;返回是否有非空气物品
storage at 2 empty返回是否为空
storage at 2 deletedel;删除槽位物品,并触发面板物品变化回调,不是发还玩家
storage at 2 set to item 'PAPER' amount 1to 后必须为能立即返回 ItemStack 的参数;放入物品并触发回调;无值时返回 NULLED ITEM
storage at 2 isFree返回槽位是否允许物品交互
storage at 2 isLocked返回槽位是否不在开放交互集合中
storage at 2 free开放该槽位
storage at 2 lock锁定该槽位,不自动删除其物品
storage at -1 lock负槽位的锁定操作会清空开放集合,即锁定全部;free 没有对应的负数“全部解锁”语义

set 的物品参数可以求值,但不会等待尚未完成的物品生成。操作名按表中大小写填写;不存在 storage take / storage give 这样的库存增减子命令。lock / free 只调整玩家可交互集合,不等于重建图标、刷新筛选或更换容器。关闭时只返还开放槽位中的物品;锁定非空槽位后,里面的物品不会自动返还。脚本的 set / delete 本身不会因槽位已锁定而拒绝修改,操作时仍应使用合法的面板局部槽位。嵌套与偏移的真实物品交互边界另查物品交互面板。

当前生成器元素

element [字段名] 用于生成器 output 图标的显示或点击上下文。省略字段名返回当前元素的整个内容映射,填写时返回该字段值;字段名可以求值。

# 位于 generator.output 中
name: '&f{{element title}}'
action: "mmsg '&a已选择:{{element title}}'"

这里使用元素的原始字段名 title,对应的普通变量是 element_title。没有当前元素时会失败;普通固定按钮、菜单打开事件以及不继承该图标上下文的节点不能直接靠 element 取得某个列表项。

Last updated on