Skip to content

物品 / JSON 函数

物品构造与识别

函数参数返回说明
item(@slot)槽位引用ItemStack克隆槽位物品
item(id)StringItemStack从外部来源获取物品
getItem(source)StringItemStackitem
itemid(@slot)槽位引用String物品提供者 ID(如 mm:Sword
isMM(@slot)槽位引用Boolean是否为 MythicMobs 物品
isNI(@slot)槽位引用Boolean是否为 NeigeItems 物品
item.create(material)StringItemStack按材质创建空物品
item.create(material, amount)String, IntegerItemStack按材质和数量创建

来源格式

格式说明示例
mm:物品IDMythicMobs 物品item("mm:LegendarySword")
ni:物品IDNeigeItems 物品item("ni:强化石")
MATERIAL原版材质item("DIAMOND")
@槽位ID槽位物品克隆item(@input)
yaml
原物品 = item(@input)                    # 克隆输入槽物品
新剑 = item("mm:LegendarySword")         # 从 MM 取
钻石 = item.create("DIAMOND", 64)        # 64 个钻石
是 MM = isMM(@input)

item(@slot) vs @slot — 核心区别

表达式说明用途
@input槽位引用,指向原物品读属性、判断 filled、with 块
item(@input)创建克隆副本要修改物品时必须用它
yaml
# ✓ 正确:先克隆再改再写回
装备 = item(@input)
装备.lore.attr("攻击力", "+10")
slot.set("input", 装备)

# 或者用 with(自动克隆 + 自动写回)
with @input {
  装备.lore.attr("攻击力", "+10")
}

动态创建物品

yaml
variables: |
  # 三元嵌套 + item()
  强化材料 = 阶段1 ? item("ni:赤铁精屑")
          : (阶段2 ? item("ni:月华玄晶")
          : (阶段3 ? item("ni:道纹金晶")
          : item("ni:鸿蒙仙晶")))

  if @input.filled {
    slot.set("材料展示", 强化材料)
  }

execute: |
  奖励物品 = 成功 ? item("ni:强化成功券") : item("ni:强化失败券")
  item.give(奖励物品, 1)

JSON 函数

函数参数返回说明
json_get(json, path)String×2Any按路径提取 JSON 值
json_has(json, path)String×2Boolean路径是否存在
json_unescape(str)StringString解码 JSON 转义字符
yaml
序列化 = @input.serialize()            # 物品 → JSON 字符串
物品ID = json_get(序列化, "NeigeItems.id")
有字段 = json_has(序列化, "NeigeItems")

路径语法支持 . 取对象属性,[i] 取数组元素,例如 NeigeItems.data.attrs[0].name

NeigeItems 数据字段

函数参数返回说明
nidata(@item, key)槽位引用, StringAny读取 NI 物品的 data 字段
nidata_debug(@item)槽位引用String调试输出 data 内容
yaml
额外lore = nidata(@input, "额外lore")
第一个 = nidata(@input, "额外lore[0]")

key 支持数组索引 [n] 和嵌套点路径,和 json_get 的路径语法一致。

外部集成的完整用法见 外部集成

TQ Minecraft Server Plugin Docs