API cho developer
ShinnUI exposure một API publique nhỏ — object ShinnUIAPI (Kotlin object,
gọi được từ Kotlin/Java qua package me.ipapervn.shinnui) cho phép mở menu, chạy
Kether và đăng ký action tùy chỉnh từ plugin của bạn.
Phụ thuộc#2>
// build.gradle.kts (Kotlin) hoặc pom.xml (Maven)
repositories {
maven("https://repo.tabooproject.org/repository/releases") // TabooLib
// và repo chứa artifact ShinnUI (jitpack/local)
}
dependencies {
compileOnly("me.ipapervn:ShinnUI:1.0-beta")
}
# plugin.yml
depend: [ShinnUI] # hoặc softdepend để optional
ShinnUIAPI#2>
| Hàm | Chữ ký | Ý nghĩa |
|---|---|---|
getMenuById | (id: String): Menu? | Lấy menu đã nạp theo tên file (không đuôi .yml). |
eval | (player: Player, script: String): Any? | Chạy Kether với namespace shinnui — eval(p, "money *500") trả true/false. |
registerAction | (key: String, action: MenuAction): RegisterResult | Đăng ký action mới cho menu. Trả OK / COLLISION (đã tồn tại) / NEEDS_REPARSE. |
actionHandle | (): ActionHandler | Truy cập handler gốc (chạy reaction, eval action…). |
Trả về NEEDS_REPARSE nghĩa là action của bạn đăng ký sau khi menu đã load —
ShinnUI sẽ tự re-parse các menu dùng action đó (debounce theo tick, không cần gọi gì thêm).
Đăng ký action trong lúc plugin enable, trước khi ShinnUI load menu, để tránh re-parse.
Đăng ký action tùy chỉnh#2>
@Subscribe
fun onEnable() {
val result = ShinnUIAPI.registerAction("give-xp") { session, ctx ->
val amount = ctx.args.joinToString(" ").toIntOrNull() ?: 1
player.giveExp(amount)
}
// result == OK → menu dùng được '- give-xp 100'
}
Sau khi đăng ký, mọi menu dùng action như builtin:
actions:
all:
- 'give-xp 100'
- 'tell: &a+100 XP'
Mở menu từ code#2>
val menu = ShinnUIAPI.getMenuById("Shop")
menu?.let {
// mở với tham số {0} {1}...
it.display(sender, listOf("diamond", "64"))
}
Event API#2>
ShinnUI bắn sự kiện TabooLib (lắng nghe bằng @Subscribe hoặc Bukkit EventManager):
| Event | Khi nào | Đọc được |
|---|---|---|
MenuOpenEvent | Trước khi render frame đầu. | session, reason (RELOAD, PLAYER_COMMAND, CONSOLE, BINDING_COMMANDS, BINDING_ITEMS, BINDING_SHORTCUT, UNKNOWN). |
MenuCloseEvent | Trước khi cleanup session. | session. |
MenuPageChangeEvent | Đổi trang layout. | session, page cũ/mới. |
CustomItemSourceEvent | Icon cần item từ source: lạ. | Tự cấp item — dùng để bổ sung hook item plugin không có sẵn. |
MenuOpenEvent cho phép hủy mở menu (set cancelled) — làm gate quyền phức tạp
(thế giới, faction, thời gian) không viết được bằng condition icon.