注册表
2024年12月7日小于 1 分钟
注册表
华夏核心提供了一个加载器无关的注册表系统。
使用方法
通过 RegistryManager#create(String modId, ResourceKey<Registry<T>> key) 方法获取 SinoCore 注册表(IRegistry)。
使用 IRegistry#register(String name, Supplier<? extends R> supplier) 进行注册。
一些提供额外方法的注册表
- Tab 注册表
ITabRegistryRegistryManager#createTab(String modId)- 提供了
ITabRegistry#registerForRef(String name)便于获取IRegRef<CreativeModeTab>。
- Menu 注册表
IMenuRegistryRegistryManager#createMenu(String modId)- 提供了
IMenuRegistry#register(String name, MenuFactory<T> factory)以解决私有的MenuSupplier带来的不便。
- Screen 注册表
IScreenRegistryRegistryManager#createScreen(String modId)- 提供了和
IMenuRegistry对应的IScreenRegistry#register(IRegRef<MenuType<?>> menuType, IScreenFactory<T> screenFactory)。
- Command 注册表
ICommandRegistryRegistryManager#createMenu(String modId)- 提供了
ICommandRegistry#registerCommand(Command command)来注册Command。
- DataProvider 注册表
IDataProviderRegistryRegistryManager#createDataProvider(String modId)- 提供了
<T extends DataProvider> IDataProviderRegistry#put(Function<IDataGenContext, ? extends T> builder, boolean run)来添加DataProvider。
- 自定义统计信息注册表
ICustomStatRegistryRegistryManager#createCustomStat(String modId)- 提供了
ICustomStatRegistry#register(String name, StatFormatter statFormatter)及其重载ICustomStatRegistry#register(String name)。
示例
IRegistry<Block> REGISTRIES = RegistryManager.create("modid", Registries.BLOCK);
IRegRef<Block> PEACH_WOOD = REGISTRIES.register("peach_wood", () -> new Block(BlockBehaviour.Properties.of());