跳到主要内容

子系统

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}")
}