跳到主要内容

注册表系统

Baikiruto 使用通用的 Registry<T> 接口管理各类资源的注册与查询。

Registry<T> 接口

方法返回值说明
register(id: String, value: T)T注册条目
unregister(id: String)T?注销条目
get(id: String)T?根据 id 获取条目
contains(id: String)Boolean检查 id 是否存在
keys()Set<String>获取所有已注册的 id
values()Collection<T>获取所有已注册的值
entries()Map<String, T>获取所有键值对
clear()Unit清空注册表
val api = Baikiruto.api()

// 获取物品注册表
val itemRegistry = api.getItemRegistry()

// 查询所有已注册的物品 ID
val allIds = itemRegistry.keys()
allIds.forEach { println("物品: $it") }

// 检查物品是否存在
if (itemRegistry.contains("my_sword")) {
val item = itemRegistry.get("my_sword")
println("找到物品: ${item?.id}")
}

内置注册表

通过 BaikirutoAPI 获取各类注册表:

方法注册表类型说明
getItemRegistry()Registry<Item>物品注册表
getModelRegistry()Registry<ItemModel>模型注册表
getDisplayRegistry()Registry<ItemDisplay>显示注册表
getGroupRegistry()Registry<ItemGroup>分组注册表
getMetaFactoryRegistry()Registry<MetaFactory>元数据工厂注册表
getScriptTypeRegistry()Registry<BaikirutoScriptType>脚本类型注册表
val api = Baikiruto.api()

// 物品注册表
val items = api.getItemRegistry()
println("已注册物品数: ${items.keys().size}")

// 模型注册表
val models = api.getModelRegistry()
println("已注册模型数: ${models.keys().size}")

// 显示注册表
val displays = api.getDisplayRegistry()

// 分组注册表
val groups = api.getGroupRegistry()

// 脚本类型注册表(默认至少包含 fluxon)
val scriptTypes = api.getScriptTypeRegistry()
println("脚本类型: ${scriptTypes.keys()}")

MetaFactory 管理

MetaFactory 用于定义物品的元数据处理逻辑。Baikiruto 提供便捷方法管理 MetaFactory:

方法返回值说明
registerMetaFactory(factory: MetaFactory)MetaFactory注册元数据工厂
unregisterMetaFactory(id: String)MetaFactory?注销元数据工厂
getMetaFactory(id: String)MetaFactory?获取元数据工厂
val api = Baikiruto.api()

// 注册自定义 MetaFactory
api.registerMetaFactory(MyMetaFactory())

// 获取已注册的 MetaFactory
val factory = api.getMetaFactory("my_meta")
if (factory != null) {
println("MetaFactory: ${factory.id}")
}

// 注销
api.unregisterMetaFactory("my_meta")

脚本类型管理

脚本子系统现在同样走注册表模型。BaikirutoAPI 提供了便捷方法管理脚本类型:

方法返回值说明
registerScriptType(scriptType: BaikirutoScriptType)BaikirutoScriptType注册脚本类型
unregisterScriptType(scriptTypeId: String)BaikirutoScriptType?注销脚本类型
getScriptType(scriptTypeId: String)BaikirutoScriptType?获取单个脚本类型
getScriptTypeRegistry()Registry<BaikirutoScriptType>获取脚本类型注册表
val api = Baikiruto.api()

api.registerScriptType(MyScriptType())

val fluxon = api.getScriptType("fluxon")
val allTypes = api.getScriptTypeRegistry().entries()
println("已注册脚本类型: ${allTypes.keys}")

api.unregisterScriptType("my_engine")

如果你还在维护旧接口,BaikirutoLegacyAPI 也同步暴露了:

  • registerScriptType(...)
  • unregisterScriptType(...)
  • getScriptType(...)
  • registeredScriptType
提示

注册表操作应在插件启用阶段完成。运行时动态注册/注销可能导致已加载的物品出现异常。