注册框架
基本信息
| 属性 | 值 |
|---|---|
| 主要类型 | net.bdew.lib.machine.Machine(抽象类) |
| 管理器 | net.bdew.lib.config.MachineManager / BlockManager / ItemManager |
| 注册入口 | MachineManager.registerMachine(machine) |
| 开关字段 | 配置段 Enabled(布尔) |
| 本模组自注册内容 | 0 方块 / 0 物品 / 0 TileEntity |
功能
BD lib 自身不注册内容,GameRegistry.registerBlock / registerItem 等调用只存在于供下游模组调用的框架类中。实测证据:
$ grep -rn 'regBlock\|regItem\|\.regSpecial' --include=*.scala src/
src/main/scala/net/bdew/lib/config/ItemManager.scala:19: regItem(new SimpleItem(name), name)
src/main/scala/net/bdew/lib/config/MachineManager.scala:29: machine.regBlock(creativeTab)
src/main/scala/net/bdew/lib/machine/Machine.scala:26: def regBlock(creativeTab: CreativeTabs) {
以上命中全部落在框架定义里,没有任何一处是 BD lib 在自己加载时注册具体内容。grep -rn 'extends Machine\|new Machine\|extends ItemManager\|new BlockManager' 在全仓仅命中 config/MachineManager.scala:39 的 trait MachineManagerMultiblock extends MachineManager —— 同样是框架类型的继承,而非内容注册。
Machine
Machine[T <: Block](machine/Machine.scala:20)是最上层的机器抽象,字段包括 name(注册名)、block(由 blockConstruct 惰性构造)、tuning(配置段)、enabled(是否启用),以及 modId = Misc.getActiveModId。
regBlock(creativeTab)(Machine.scala:26-43)执行注册:自动选择 ItemBlock 子类(若方块实现 HasItemBlock 则用其指定的类,否则用默认 classOf[ItemBlock])、调用 GameRegistry.registerBlock、设置创造标签,并在方块实现 HasTE[_] 时自动调用 GameRegistry.registerTileEntity,ID 格式为 "%s.%s".format(modId, name)。
MachineManager
MachineManager.registerMachine(config/MachineManager.scala:25-34)是推荐的注册入口,其流程为:
- 用
machine.name从传入的tuning配置段中取出子段赋给machine.tuning - 检查
machine.tuning.getBoolean("Enabled");为 false 则完全不注册,直接返回 - 置
machine.enabled = true并调用machine.regBlock(creativeTab) - 若该机器实现
GuiProvider,额外注册到guiHandler
MachineManagerMultiblock(MachineManager.scala:39-58)在此之上追加多方块逻辑:把实现了 MachineCore 的控制器收进 controllers 集合,并回填 getController.machine;同时提供 getMachinesForBlock,按模块 kind 查得每种控制器允许的 (required, max) 数量对。
BlockManager 与 ItemManager
BlockManager.regBlock(config/BlockManager.scala:31-57)是更细粒度的方块注册器,额外支持 addStack(调用 GameRegistry.registerCustomItemStack 注册一个默认物品堆栈)与 skipTileEntityReg(跳过 TileEntity 注册)。ItemManager.regItem(config/ItemManager.scala:23)对应物品注册,内部有一个 regItem(new SimpleItem(name), name) 的便捷重载。
创造标签
CreativeTabContainer(CreativeTabContainer.scala)提供一个内部类 Tab(name, item) 继承 CreativeTabs,供下游模组创建标签页。本类自身不注册任何标签页 —— 它的 init() 方法体为空,仅在构造时打印一行日志。
数值
| 数值名 | 值 |
|---|---|
GameRegistry.* 调用点总数 |
16 |
| 涉及的不同 GameRegistry 方法 | 10(addRecipe、addShapelessRecipe、addSmelting、findBlock、findItem、findItemStack、registerBlock、registerCustomItemStack、registerItem、registerTileEntity、registerTileEntityWithAlternatives) |
| 机器启用判定字段 | tuning 中的 Enabled 布尔项 |
| TileEntity ID 格式 | <modId>.<name> |
CreativeTabContainer 内置标签页数 |
0(init() 为空方法体) |
交互
本框架没有面向玩家的交互。它的调用方是其他模组的初始化代码:
| 触发 | 行为 |
|---|---|
下游模组调用 registerMachine 且配置 Enabled = true |
方块 + ItemBlock + TileEntity 被注册到该下游 modid 命名空间 |
下游模组调用 registerMachine 且配置 Enabled = false |
静默跳过,不注册任何内容 |
下游模组机器实现 GuiProvider |
自动注册 GUI 处理器 |
配置 addStack = true |
额外注册一个默认 ItemStack,使方块在未破坏时也可被合成/使用 |
相关条目
- BD lib 库本体 - 模组身份、modid 与零注册证据
- 多方块框架 -
MachineCore如何读取Modules/Required配置段 - 配置加载机制 -
Enabled等配置项的来源与覆盖规则