匹配系统
匹配器用于判断物品是否符合某条件。它出现在:
match参数(槽位级、配方级)accept参数(槽位级动态接受)filter等其他需要过滤物品的地方
匹配器语法
统一格式:类别.方法(参数)。大部分匹配器还有简写版本:
yaml
# 完整
match: "type.is(DIAMOND_SWORD)"
match: "name.contains('神剑')"
match: "lore.contains('可强化')"
# 简写(适用于 name / lore / nbt)
match: "name('神剑')" # 等同 name.is('神剑')
match: "lore('可强化')" # 等同 lore.contains('可强化')
match: "nbt('CustomData')" # 等同 nbt.has('CustomData')类型匹配 type.*
| 匹配器 | 说明 | 示例 |
|---|---|---|
type.is(材质) | 精确匹配材质 | type.is(DIAMOND_SWORD) |
type.in(材质…) | 匹配多个材质或类型组 | type.in(IRON_SWORD, GOLD_SWORD) |
type.isWeapon() | 是否为武器 | — |
type.isArmor() | 是否为护甲 | — |
type.isTool() | 是否为工具 | — |
type.isSword() | 是否为剑 | — |
type.isAxe() | 是否为斧 | — |
type.isPickaxe() | 是否为镐 | — |
type.isShovel() | 是否为铲 | — |
type.isHoe() | 是否为锄 | — |
type.isBow() | 是否为弓 | — |
type.in() 支持材质组别名:
yaml
type.in(SWORD) # 所有剑
type.in(AXE) # 所有斧
type.in(PICKAXE) # 所有镐
type.in(ARMOR) # 所有护甲
type.in(HELMET) # 所有头盔
type.in(CHESTPLATE) # 所有胸甲
type.in(LEGGINGS) # 所有护腿
type.in(BOOTS) # 所有靴子名称匹配 name.*
| 匹配器 | 别名 | 说明 | 示例 |
|---|---|---|---|
name.is() | name.equals() | 精确匹配 | name.is("&6传说之剑") |
name.contains() | — | 包含文本 | name.contains("神") |
name.regex() | name.matches() | 正则匹配 | name.regex(".*\\+\\d+") |
name.starts() | name.startswith() | 前缀匹配 | name.starts("&6") |
name.ends() | name.endswith() | 后缀匹配 | name.ends("之剑") |
yaml
match: 'name("神剑")' # 简写:= name.is("神剑")
match: 'name.regex(".*\\+\\d+")'Lore 匹配 lore.*
| 匹配器 | 别名 | 说明 | 示例 |
|---|---|---|---|
lore.contains() | — | Lore 含有某文本 | lore.contains("可强化") |
lore.regex() | lore.match() / lore.matches() | 正则匹配 | lore.regex("攻击力.*\\d+") |
lore.line(N, 文本) | — | 指定行(从 0 开始)包含文本 | lore.line(0, "传说装备") |
yaml
match: 'lore("可强化")' # 简写
match: 'lore.regex("品质:.*传说")'
match: 'lore.line(0, "【装备】")' # 仅匹配第 1 行含此文本NBT 匹配 nbt.*
| 匹配器 | 别名 | 说明 | 示例 |
|---|---|---|---|
nbt.has(路径) | — | NBT 路径存在 | nbt.has("CustomData.Level") |
nbt.is(路径, 值) | nbt.equals() | 值相等 | nbt.is("Type", "weapon") |
nbt.contains(路径, 文本) | — | 值包含文本 | nbt.contains("Tag", "rare") |
yaml
match: 'nbt("CustomData")' # 简写:= nbt.has("CustomData")
match: 'nbt.is("CustomData.Type", "weapon")'数量匹配 amount.*
| 匹配器 | 别名 | 说明 | 示例 |
|---|---|---|---|
amount.is(n) | amount.equals() | 精确数量 | amount.is(64) |
amount.min(n) | amount.atleast() | 至少 n 个 | amount.min(10) |
amount.max(n) | amount.atmost() | 至多 n 个 | amount.max(32) |
耐久匹配 durability.*
| 匹配器 | 别名 | 说明 | 示例 |
|---|---|---|---|
durability.is(n) | durability.equals() | 精确耐久 | durability.is(100) |
durability.min(n) | — | 最少耐久 | durability.min(50) |
durability.max(n) | — | 最多耐久 | durability.max(200) |
MythicMobs 物品 mm.*
| 匹配器 | 别名 | 说明 | 示例 |
|---|---|---|---|
mm.is("ID") | mm.id() | 匹配 MM 物品 ID | mm.is("MyWeapon") |
mm.any() | — | 任何 MM 物品 | mm.any() |
NeigeItems 物品 ni.*
| 匹配器 | 别名 | 说明 | 示例 |
|---|---|---|---|
ni.is("ID") | ni.id() | 匹配 NI 物品 ID | ni.is("Gem_Ruby") |
ni.any() | — | 任何 NI 物品 | ni.any() |
通用来源匹配 provider.* / item.*
| 匹配器 | 别名 | 说明 | 示例 |
|---|---|---|---|
provider.is("前缀:ID") | provider.id()、item.is()、item.id() | 匹配指定来源物品 | provider.is("mm:Sword") |
provider.from("来源") | item.from() | 匹配来源类型 | provider.from("neigeitems") |
provider.from 支持:mm / mythicmobs、ni / neigeitems、mc / minecraft。
逻辑组合
所有匹配表达式都支持 &&、||、!、括号:
yaml
match: "type.isSword() && lore.contains('可强化')"
match: "type.is(DIAMOND_SWORD) || type.is(IRON_SWORD)"
match: "!type.isArmor()"
match: "(type.isSword() || type.isAxe()) && lore.contains('可强化')"
match: "type.isWeapon() && lore.contains('可强化') && !nbt.has('MaxLevel')"常见写法
只接受特定 Lore 的武器
yaml
I: input(id=input, match="type.isWeapon() && lore.contains('可强化')")只接受外部插件的物品
yaml
I: input(id=input, match='mm.is("LegendarySword")')
I: input(id=input, match='ni.is("CustomGem")')
I: input(id=input, match='provider.from("neigeitems")')只接受已强化过的装备
yaml
I: input(id=input, match="lore.regex('强化等级: \\\\d+/\\\\d+')")特殊标记装备(NBT)
yaml
I: input(id=input, match='nbt.has("CustomData.CanEnhance")')配合 accept 做动态限制
match 是静态的,accept 可以用 variables 中的变量和 @cursor(待放入物品)做动态判断:
yaml
variables: |
最低等级要求 = 50
slots:
I: input(id=input,
match="type.isSword()",
accept="@cursor.attr('等级') >= 最低等级要求")详见 槽位类型 - input。
匹配器中的字符串转义
当匹配表达式里需要字符串(尤其是带单引号或双引号的内容),记得参考 YAML 注意事项 - 引号嵌套 中的规则:
yaml
# ✓ 外层单引号包住整个槽位定义,match 表达式用双引号,字符串字面量用两个单引号
'A': 'input(id=材料, match="lore.contains(''丹材'')")'下一步:阅读 脚本概览。