ShinnUI wiki
Trang chủ/Fork/Item Matcher

Item Matcher

Item Matcher là "đặc trưng vật phẩm" — mô tả một item bằng chuỗi trait để nhận diện / trừ / cho / bind item. Fork này bổ sung 3 trait mới: enchant:, pdc: (namespace mặc định shinnui) và nbt:.

Được dùng ở đâu?#2>
NơiVí dụ
Binding item mở menuItems: ['material:compass']
Action give-item / take-itemtake-item: material:DIAMOND,amount:64
Kether item *...item *material:DIAMOND,amount:5
JS utils.hasItem(player, "...")utils.hasItem(player, "material:EMERALD")
Slot Input (fork)matcher: 'enchant:sharpness'
Shortcuts, conditions tuỳ ý

Cú pháp#2>
material:DIAMOND,amount:64 ; material:EMERALD,amount:32
└─ trait 1   └─ trait 2    │   └── Match thứ 2
                            └── Match thứ 1 (các trait trong 1 match AND với nhau)
  • , — tách các trait trong một match: item phải thỏa tất cả.
  • ; — tách nhiều match: người chơi cần đủ từng match (khi trừ item thì trừ theo từng match).
  • ! — đặt trước trait để phủ định: !lore:rusty = item không có dòng lore "rusty".
  • Tên trait không phân biệt hoa thường, chấp nhận số nhiều: mat/material/materials.
  • Matcher được cache theo chuỗi — cùng chuỗi dùng nhiều nơi không tốn chi phí parse lại.

Danh sách trait#2>
TraitAliasÝ nghĩaVí dụ
material:mat, materialsLoại item (XMaterial name, so sánh không hoa thường)material:DIAMOND_SWORD
amount:amtSố lượng đúng (một stack có đúng N?)amount:64
data:datasDurability/damage (legacy)data:59
model-data:modeldataCustomModelDatamodel-data:15
name:namesName chứa chuỗi (đã màu hóa)name:&bSuper
lore:loresBất kỳ dòng nào chứa chuỗilore:OPEN_MENU
head:skull, textureĐầu người chơi theo tên hoặc texture hashhead:Notch
enchant:enchantments mớiPhù phép — ench:level (đúng cấp) hoặc ench (có là đủ)enchant:sharpness:5, enchant:sharpness
pdc:pdcs mớiPersistentDataContainer — 3 dạng (xem dưới)pdc:shinnui:quest:done
nbt:nbts mớiNBT tag qua NBTAPI — path (tồn tại) hoặc path:value (bằng chuỗi)nbt:custom:rarity:legendary

Chi tiết trait mới#3>

enchant

# Có Sharpness bất kỳ cấp
matcher: 'enchant:sharpness'
# Đúng Sharpness 5
matcher: 'enchant:sharpness:5'
# Kết hợp phủ định: có Sharpness nhưng KHÔNG có lore "rusty"
matcher: 'enchant:sharpness ; !lore:rusty'

pdc (PersistentDataContainer)

pdc:quest                    # key `shinnui:quest` tồn tại (namespace mặc định = shinnui)
pdc:myplugin:quest           # key `myplugin:quest` tồn tại
pdc:myplugin:quest:done      # key `myplugin:quest` có giá trị STRING = "done"

nbt (cần plugin NBTAPI)

nbt:custom:rarity            # NBT path `custom.rarity` tồn tại
nbt:custom:rarity:legendary  # NBT path `custom.rarity` = "legendary"

Degrade an toàn: nếu NBTAPI chưa cài, matcher nbt: không phủ định không nhận item nào (không crash). Tương tự nexo-id không cài Nexo → không nhận gì. Còn enchant:pdc: là Bukkit thuần — chạy được ngay không cần plugin nào.

Ví dụ thực dụng#2>
# Menu mở bằng đồng hồ có lore OPEN_MENU
Bindings:
  Items:
    - 'material:clock,lore:OPEN_MENU'

# Trừ 1 kiếm có Mending
- 'take-item: material:DIAMOND_SWORD,enchant:mending,amount:1'

# Kiểm tra người chơi có item sự kiện trong condition
condition: 'item *material:NETHER_STAR,name:EVENT_TOKEN,amount:1'

# Slot Input nhận "kim cương không phải của quest"
Input:
  - slot: 14
    matcher: 'material:DIAMOND,!pdc:shinnui:quest'
    required: 2

amount trong matcher so sánh với số lượng của từng stack — khi dùng cho take-item/give-item, TabooLib sẽ tự cộng dồn các stack khớp cho tới đủ số.