子系统
BaikirutoAPI 提供多个子系统访问器,每个子系统负责特定的功能领域。
子系统一览
| 访问器 | 返回类型 | 说明 |
|---|---|---|
getScriptHandler() | ScriptHandler | 脚本处理器 |
getItemManager() | ItemManager | 物品管理器 |
getItemHandler() | ItemHandler | 物品读取器 |
getItemSerializer() | ItemSerializer | 物品序列化器 |
getItemUpdater() | ItemUpdater | 物品版本更新器 |
getItemLoader() | ItemLoader | 物品加载器 |
getItemEventBus() | ItemEventBus | 事件总线 |
ScriptHandler — 脚本处理器
管理 Baikiruto 内置脚本的执行与缓存。
| 方法 | 返回值 | 说明 |
|---|---|---|
invoke(script: String, context: Any?) | Any? | 执行脚本 |
preheat(scripts: List<String>) | Unit | 预热脚本(提前编译缓存) |
invalidate(script: String) | Unit | 使脚本缓存失效 |
cacheStats() | CacheStats | 获取脚本缓存统计信息 |
val script = api.getScriptHandler()
// 执行脚本
val result = script.invoke("my_script", player)
// 预热脚本(服务器启动时批量编译)
script.preheat(listOf("script_a", "script_b", "script_c"))
// 查看缓存命中率
val stats = script.cacheStats()
println("缓存命中率: ${stats.hitRate()}")
// 清除特定脚本缓存
script.invalidate("my_script")
ItemManager — 物品管理器
物品的生成、给予和注册管理。
| 方法 | 返回值 | 说明 |
|---|---|---|
generateItem(itemId: String, context: Any?) | ItemStack? | 生成物品 |
generateItemStack(itemId: String, amount: Int, context: Any?) | ItemStack? | 生成指定数量的物品 |
giveItem(player: Player, itemId: String, amount: Int) | Boolean | 给予玩家物品 |
register(item: Item) | Item | 注册物品 |
registerAll(items: List<Item>) | List<Item> | 批量注册物品 |
val manager = api.getItemManager()
// 生成物品
val item = manager.generateItem("my_sword", player)
// 生成指定数量
val items = manager.generateItemStack("my_potion", 5, player)
// 直接给予玩家(自动处理背包满的情况)
val success = manager.giveItem(player, "my_sword", 1)
if (success) {
player.sendMessage("物品已发放")
}
ItemHandler — 物品读取器
从 ItemStack 中读取 Baikiruto 数据。
| 方法 | 返回值 | 说明 |
|---|---|---|
read(itemStack: ItemStack) | ItemStream? | 读取物品数据流 |
getItem(itemStack: ItemStack) | Item? | 获取物品定义 |
getItemId(itemStack: ItemStack) | String? | 获取物品 ID |
getItemData(itemStack: ItemStack) | Map<String, Any>? | 获取公共数据 |
val handler = api.getItemHandler()
val held = player.inventory.itemInMainHand
val stream = handler.read(held)
if (stream != null) {
println("物品 ID: ${stream.id}")
println("物品源: ${stream.source}")
}
ItemSerializer — 物品序列化器
物品与数据格式之间的转换。
| 方法 | 返回值 | 说明 |
|---|---|---|
serialize(itemStack: ItemStack) | Map<String, Any> | 序列化为 Map |
deserialize(data: Map<String, Any>) | ItemStack? | 从 Map 反序列化 |
val serializer = api.getItemSerializer()
// 序列化
val data = serializer.serialize(itemStack)
// 可存入数据库或配置文件
// 反序列化
val restored = serializer.deserialize(data)
ItemUpdater — 物品版本更新器
检查并更新玩家持有的旧版本物品。
| 方法 | 返回值 | 说明 |
|---|---|---|
checkUpdate(itemStack: ItemStack) | UpdateResult | 检查物品是否需要更新 |
val updater = api.getItemUpdater()
// 检查玩家背包中的物品是否需要更新
val result = updater.checkUpdate(player.inventory.itemInMainHand)
if (result.needsUpdate) {
println("物品需要更新: ${result.reason}")
}
ItemLoader — 物品加载器
管理物品配置文件的加载与重载。
| 方法 | 返回值 | 说明 |
|---|---|---|
reloadItems() | Unit | 重载所有物品配置 |
loadedIds() | Set<String> | 获取所有已加载的物品 ID |
loadItemFromFile(file: File) | Item? | 从文件加载单个物品 |
val loader = api.getItemLoader()
// 重载所有物品
loader.reloadItems()
// 查看已加载的物品
val ids = loader.loadedIds()
println("已加载 ${ids.size} 个物品")
// 从文件加载
val item = loader.loadItemFromFile(File("plugins/Baikiruto/items/my_item.yml"))
ItemEventBus — 事件总线
详见 事件系统。
val bus = api.getItemEventBus()
bus.subscribe(ItemBuildPostEvent::class.java) { event ->
println("物品构建完成: ${event.itemId}")
}