跳到正文
烈焰甘蔗Wiki

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;                      // :128

Binnie 的 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 纯被动组件」的描述方向合理。

⚠️ 已订正(原文两处过度断言):

  1. 原文「每种有独立 GUI」——RainShield / Lighting / Unlighting 在 Binnie 侧明确无 GUI(原文自己在后文也这么说,前文「内部填充 8 种组件方块(每种有独立 GUI)」自相矛盾)。
  2. 原文「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
浏览全部模组