ShinnUI wiki
Trang chủ/Tích hợp/API cho dev

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àmChữ 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 shinnuieval(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(): ActionHandlerTruy 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):

EventKhi nàoĐọc được
MenuOpenEventTrước khi render frame đầu.session, reason (RELOAD, PLAYER_COMMAND, CONSOLE, BINDING_COMMANDS, BINDING_ITEMS, BINDING_SHORTCUT, UNKNOWN).
MenuCloseEventTrước khi cleanup session.session.
MenuPageChangeEventĐổi trang layout.session, page cũ/mới.
CustomItemSourceEventIcon 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.

Đọc trạng thái session#2>
// Session của người chơi đang mở menu
val session = MenuSession.sessionOf(player) ?: return
session.page          // trang hiện tại
session.args          // tham số {0}...
session.getMeta("input_taken") // meta Input
session.agent         // agent của icon đang xử lý (trong action)