ShinnUI wiki
Trang chủ/Menu/Condition

Condition

"Biểu thức điều kiện" là một chuỗi trả về true/false, dùng ở:

  • Tham số action: {condition=...}
  • Điều kiện reaction: condition: trong actions/Events
  • Điều kiện sub-icon
  • Lore inline: 'Dòng VIP {condition=perm *vip.user}'
  • Shiny động, hide_tooltip động, slot động…

Mặc định là Kether — chuỗi điều kiện được chạy bằng Kether luôn, trừ khi thêm prefix js: cho JavaScript. Nếu condition bắt đầu bằng $ (như $ sender.isOp()) thì đó là viết tắt của JavaScript trong cấu hình cũ.

Kether condition#2>

Kether là ngôn ngữ script của TabooLib, cú pháp dạng hàm *tham-số. Các node do ShinnUI đăng ký trong namespace shinnui:

NodeCú phápÝ nghĩa
permperm *shinnui.useKiểm tra permission của người chơi.
money / ecomoney *1000Kiểm tra số dư (Vault) ≥ số tiền.
pointspoints *10Kiểm tra điểm (PlayerPoints).
itemitem *material:DIAMOND,amount:5Kiểm tra người chơi có item khớp matcher.
metameta get/set/del/has [key] [to value]Đọc/ghi meta trong Kether.
datadata get/set/del/has [key] [to value]Đọc/ghi data trong Kether.
vars / varvars *"1000"Parse chuỗi qua hệ biến của ShinnUI (trả về giá trị thay thế).
mathcheck / mtcmtc 10 > 5So sánh toán học (tham số dạng chuỗi cũng được).
menumenu open *"Shop" / menu page *1 / menu closeĐiều khiển menu từ script.
mecomeco *has *100MeowEco balance check.

Kết hợp với node chuẩn của Kether:

# AND / OR / NOT
all [ perm *vip.user money *1000 ]
any [ perm *admin perm *moderator ]

# So sánh
check %player_health% > 10
check &{meta:myMeta} is *true

# Nhân bản chuỗi, phép tính
math 1 + 2 * 3
# Điều kiện dạng khối if-then-else (thường dùng trong Events.Open)
Events:
  Open: |-
    if perm *shinnui.use then {
      tell *"You have permission"
    } else {
      tell *"You dont have permission"
      return
    }

JavaScript condition#2>

Thêm prefix js: (hoặc $ trong cấu hình cũ). Toàn bộ đối tượng/hàm xem chi tiết ở trang JavaScript:

js: player.hasPermission("vip.user")
js: player.hasPermission("vip.user") || utils.hasMoney(player, 1000.0)
js: varInt("%player_ping%") < 60
js: funInt("meta:input_taken") >= 10
js: utils.isBedrockPlayer(player)

Vì JS được pre-compile và cache, bạn không parse biến trực tiếp trong mã — dùng hàm vars("...") / varInt("...") / varDouble("...") khi cần giá trị biến tại thời điểm chạy. Ví dụ varInt("%player_ping%").

Ví dụ thực tế#2>
# Chỉ admin mới thấy icon này
- condition: 'perm *admin'
  priority: 1
  display: { material: TNT }

# Kết hợp nhiều điều kiện
condition: 'all [ perm *vip.user money *5000 ]'

# JS phức tạp: giờ server trong giờ vàng
condition: 'js: varInt("%server_time_H%") >= 19 && varInt("%server_time_H%") <= 21'

# So sánh meta số học
condition: 'check {meta:kills} >= *10'

# Người nhận catcher có online không (từ Catcher-Validation-Demo)
- condition: 'js: utils.isPlayerOnline(vars("{meta:input-target}"))'
  actions: [ ... ]
  deny: [ ... ]