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ơi | Ví dụ |
|---|---|
| Binding item mở menu | Items: ['material:compass'] |
Action give-item / take-item | take-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>
, — 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".mat/material/materials.| Trait | Alias | Ý nghĩa | Ví dụ |
|---|---|---|---|
material: | mat, materials | Loại item (XMaterial name, so sánh không hoa thường) | material:DIAMOND_SWORD |
amount: | amt | Số lượng đúng (một stack có đúng N?) | amount:64 |
data: | datas | Durability/damage (legacy) | data:59 |
model-data: | modeldata | CustomModelData | model-data:15 |
name: | names | Name chứa chuỗi (đã màu hóa) | name:&bSuper |
lore: | lores | Bất kỳ dòng nào chứa chuỗi | lore:OPEN_MENU |
head: | skull, texture | Đầu người chơi theo tên hoặc texture hash | head:Notch |
enchant: | enchantments mới | Phù phép — ench:level (đúng cấp) hoặc ench (có là đủ) | enchant:sharpness:5, enchant:sharpness |
pdc: | pdcs mới | PersistentDataContainer — 3 dạng (xem dưới) | pdc:shinnui:quest:done |
nbt: | nbts mới | NBT 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: và 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ố.
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: và pdc: là Bukkit thuần — chạy được ngay không cần plugin nào.
# 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ố.