Skip to content

匹配系统

匹配器用于判断物品是否符合某条件。它出现在:

  • 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 物品 IDmm.is("MyWeapon")
mm.any()任何 MM 物品mm.any()

NeigeItems 物品 ni.*

匹配器别名说明示例
ni.is("ID")ni.id()匹配 NI 物品 IDni.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 / mythicmobsni / neigeitemsmc / 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(''丹材'')")'

下一步:阅读 脚本概览

TQ Minecraft Server Plugin Docs