Alveary(蜂房)
基本信息
| 属性 | 值 |
|---|---|
| 结构规模 | 3 × 3 × 3(固定立方体,27 格) |
| 组成方块 | 27 格全部必须是 Alveary 类多方块方块(IMultiblockComponent) |
| Binnie 提供的组件方块 | ExtraBees:alveary,metadata 0-7 对应 8 种组件 |
| 必用的 Forestary 方块 | forestry:alveary metadata 0(Plain)—— 顶面 9 格 + 正中心 1 格 |
| TileEntity | TileExtraBeeAlveary(Binnie 侧) / AlvearyController(Forestry 侧控制器) |
| 结构逻辑 | Forestry IMultiblockLogicAlveary(MultiblockLogicAlveary) |
| 控制器 | 不固定位置——见下方「控制器」小节 |
| 可否旋转 | 不可旋转(Forestry 多方块系统完全没有 rotate 代码) |
| 可否拆除 | 可。破坏任一组件即解体,组件内物品掉落在原位 |
| 依赖 | Forestry(必需)、CoFH Energy、IC2(诱变剂,可选) |
规模来源(逐项)
Alveary 的尺寸不在 Binnie 源码里定义——Binnie 只调 API:
structureLogic = MultiblockManager.logicFactory.createAlvearyLogic(); // TileExtraBeeAlveary.java:34
尺寸由 Forestry 定义(ForestryMC/src/main/java/forestry/apiculture/multiblock/AlvearyMultiblockSizeLimits.java):
| 项 | 值 | 行号 |
|---|---|---|
| 装配所需最少方块数 | 27 | :20-22 |
| 最小 X / Y / Z | 3 / 3 / 3 | :40-51 |
| 最大 X / Y / Z | 3 / 3 / 3 | :25-37 |
✅ 已复核正确:原文「最小规模: 3×3×3 立方体(27 方块)」数值正确。补充:min 与 max 都是 3,所以这不是「最小 3×3×3」,而是唯一合法尺寸就是 3×3×3。
⚠️ 已订正(布局规则写错):原文写「以
BlockMachine为基础框架,内部填充 8 种组件方块」。不准确——3×3×3 的 27 格没有「框架/内部」之分,27 格每格都是 Alveary 组件方块;8 种组件也不是「内部」限定。真实布局见下。
布局规则(逐格)
AlvearyController.isMachineWhole() 覆写了基类的逐格校验:
| 位置 | 数量 | 要求 | 证据 |
|---|---|---|---|
| 任意非组件方块 | — | 一律拒绝(基类实现无条件抛异常) | MultiblockControllerBase.java:487-511 |
| 顶面整层(level 2,9 格) | 9 | 必须是 TileAlvearyPlain |
AlvearyController.java:210-215 |
| 正中心(内部格) | 1 | 必须是 TileAlvearyPlain |
AlvearyController.java:218-223 |
| 顶面上一层(maxY+1,3×3) | 9 | 必须是木板台阶,且 metadata 的 bit 8 必须为 0(即单台阶) | AlvearyController.java:173-188 |
| 顶面四周一圈(5×5 去掉 3×3) | 16 | 不得有不透明方块 | AlvearyController.java:192-203 |
关键跨 mod 事实:Binnie 组件不能充当 Plain 格
⚠️ 本条最容易被忽略的坑。
AlvearyController用instanceof TileAlvearyPlain判定顶面与中心格。而TileAlvearyPlain只由 Forestry 的方块产出:case PLAIN: default: return new TileAlvearyPlain(); // forestry/apiculture/blocks/BlockAlveary.java:117-120 public static final int PLAIN = 0; // :128Binnie 的
AlvearyMachine枚举(extrabees/apiary/machine/AlvearyMachine.java:21-29)只有 8 个常量:Mutator、Frame、RainShield、Lighting、Stimulator、Hatchery、Transmission、Unlighting——没有 Plain。因此顶面 9 格 + 中心 1 格必须用forestry:alveary(meta 0),Binnie 只能填其余 17 格。
此外两端的 TileEntity 控制器类型相同(AlvearyController),所以 forestry:alveary 与 ExtraBees:alveary 可以混用;校验只比对 getController().getClass()(RectangularMultiblockControllerBase.java:78-86)。
⚠️ 已订正(顶盖材料在 Binnie 下不可用):
ExtraTrees:slab不能做顶盖。extratrees/block/ModuleBlocks.java:81那条注册被注释掉了:// FMLInterModComms.sendMessage("Forestry", "add-alveary-slab", "ExtraTrees:slab");顶盖只能用 Forestry 自带的台阶(或其它已向 Forestry 报备的台阶 mod)。
控制器
⚠️ 已订正(原文未说明控制器机制):原文只说「TileExtraBeeAlveary 在形成后作为主控 tile」,这不准确。Forestry 的 Alveary 没有固定控制器方块:
- 每个组件各自持有
structureLogic(TileExtraBeeAlveary.java:31)- 结构由第一个通过
validate()且isMachineWhole()成功的方块创建控制器(MultiblockLogic.java:63-65→MultiblockRegistry.onPartAdded)- 控制器创建后由
onMachineAssembled(controller, min, max)把 min/max 记到该 tile(TileExtraBeeAlveary.java:105-108)- 拆解时
onMachineBroken()清空 min/max(:110-113)结论:拆掉中心格不会必然让控制器消失,控制器会转移到下一个成功校验的组件。Binnie’s
TileExtraBeeAlveary只是所有组件共用的 TileEntity 类,不是「主控 tile」。
形成机制
自动检测。Forge 放置方块 → TileExtraBeeAlveary.validate()(:116-118)→ structureLogic.validate(worldObj, this) → 加入 MultiblockRegistry → 达到 27 个连通组件且全部校验通过时自动组装。无需手动激活。
8 种组件(Binnie 提供)
全部为 ExtraBees:alveary,metadata = AlvearyMachine.ordinal()(AlvearyMachine.java:45-47),物品由 AlvearyMachine.get(size) 生成(:45-47)。
| metadata | 组件 | 功能 | 源码 |
|---|---|---|---|
| 0 | Mutator |
突变室:槽位放诱变剂,提高后代突变率 | apiary/machine/mutator/ |
| 1 | Frame |
框架室:槽位放 蜂框,修饰产量/寿命/变异 | apiary/machine/frame/ |
| 2 | RainShield |
防雨罩:抵消雨天对蜜蜂的影响 | apiary/machine/rainShield/ |
| 3 | Lighting |
照明室:提高内部光照条件 | apiary/machine/lighting/ |
| 4 | Stimulator |
刺激室:消耗电路板 + RF 加速蜂群活动 | apiary/machine/stimulator/ |
| 5 | Hatchery |
孵化室:放置幼虫加速孵化 | apiary/machine/hatchery/ |
| 6 | Transmission |
传输室:CoFH Energy(RF)能量接口 | apiary/machine/transmission/ |
| 7 | Unlighting |
熄光室:降低内部光照 | apiary/machine/unlighting/ |
✅ 已复核正确:原文的 8 个组件名与 metadata 映射完全正确(
AlvearyMachine.java:21-29枚举顺序即 ordinal 0-7)。原文「RainShield/Lighting/Unlighting 为无 GUI 纯被动组件」的描述方向合理。
⚠️ 已订正(原文两处过度断言):
- 原文「每种有独立 GUI」——
RainShield/Lighting/Unlighting在 Binnie 侧明确无 GUI(原文自己在后文也这么说,前文「内部填充 8 种组件方块(每种有独立 GUI)」自相矛盾)。- 原文「Stimulator 槽位 1 个(ICircuitBoard)」与「Hatchery 槽位 5 个(幼虫槽位)」的具体槽位数无法从
AlvearyMachine.java证实——该文件只给出 Package 类名,槽位数定义在各*AlvearyPackage子类内。本条目不写具体槽位数,避免编造。
Mutator 诱变剂倍率(可核实)
extrabees/apiary/ModuleApiary.java:36-45:
| 诱变剂 | 倍率 |
|---|---|
| 下界之星 | 50.0 |
IC2 钚(itemPlutonium) |
15.0 |
IC2 铀 235(itemUran235) |
10.0 |
IC2 小钚(itemPlutoniumSmall) |
9.0 |
IC2 铀 235 小颗粒(itemUran235small) |
5.5 |
IC2 铀(itemUran) |
8.0 |
IC2 铀 238(itemUran238) |
2.0 |
| 灵魂沙 | 1.5 |
| 末影之眼 | 4.0 |
| 末影珍珠 | 2.0 |
✅ 原文列出的诱变剂种类(灵魂沙、下界之星、IC2 铀/钚/铀-235)正确,此处补齐源码里的完整倍率表。
数值
| 数值 | 值 | 证据 |
|---|---|---|
| 结构体积 | 27 格 | AlvearyMultiblockSizeLimits.java:20-22 |
| 蜂房库存槽位 | 9 | AlvearyController.java:73(new InventoryBeeHousing(9, ...)) |
| Binnie 组件种类 | 8 | AlvearyMachine.java:21-29 |
| 顶盖材料 | 3×3 木板台阶(单台阶) | AlvearyController.java:173-188 |
| RF 消耗 / 能量存储 | 无法核实——Binnie 侧未给固定数值,取决于电路板类型与组件配置 | — |
⚠️ 已订正(数值表删除):原文的「默认 RF 消耗(Stimulator)= 由电路板类型决定」「最大能量存储 = 由组件配置决定」两句没有源码依据支撑任何数字,属于占位式表述。已改为明确的「无法核实」。
限制
- 必须恰好 3×3×3 且 27 格全部为 Alveary 组件方块,否则
for.multiblock.error.small/invalid.part - 顶面与中心必须是 Forestry 的
forestry:alveary(meta 0) - 顶面上一层必须铺满 3×3 单台阶
- 顶面四周一圈必须无遮挡
- 不可旋转——方块朝向与组件位置需自行按 Forestry 规则摆放
- Mutator 无诱变剂 / Stimulator 无电路板或无 RF 时不生效
参与方块
- Machine -
ExtraBees:alveary组件方块(见该条目「实际注册的 6 个机器方块」) - Item Hive Frame - Frame 组件的消耗品
- Ectoplasm - ExtraBees 效果方块(
LIGHTNING效果会生成 Entity Bee Lightning) forestry:alveary(meta 0)— Forestry 自有方块,跨 mod,不在本 wiki 分类内;Forestry 分类条目若不存在则此处不链接
mod 自身缺陷
TileExtraBeeAlveary.getWorld()被覆写为return null(TileExtraBeeAlveary.java:82-84)。该方法实现了 Forestry 的IBeeHousing.getWorld()契约,返回 null 违反约定(同类的getAlvearyBlocks()用的是getWorldObj(),绕开了它)。属遗留缺陷。- 文件末尾有约 300 行被注释掉的旧
makeMaster()/isMaster()/setCentralTE()自制主控实现(TileExtraBeeAlveary.java:123起,注释// TODO why its commented?),正是原文误以为「Binnie 有主控 tile」的来源。已核实为注释代码,不构成注册。
源码引用
- Binnie:
binnie/extrabees/apiary/TileExtraBeeAlveary.java、binnie/extrabees/apiary/ModuleApiary.java、binnie/extrabees/apiary/machine/AlvearyMachine.java及machine/下 8 个组件目录 - Forestry:
ForestryMC/src/main/java/forestry/apiculture/multiblock/AlvearyMultiblockSizeLimits.java、AlvearyController.java、MultiblockLogicAlveary.java、forestry/core/multiblock/RectangularMultiblockControllerBase.java