Farm Multiblock
基本信息
| 属性 | 值 |
|---|---|
| 参与方块 | Forestry:ffarm(BlockFarm,metadata 0-5) |
| 控制器 | 虚拟控制器 FarmController,不对应任何特定方块;由检测到邻接的任意 TileFarm* 触发组装 |
| TileEntity | TileFarmPlain / TileFarmGearbox / TileFarmHatch / TileFarmValve / TileFarmControl |
| 形成方式 | 自动检测邻接方块,组成矩形 multiblock |
| 控制器类 | FarmController extends RectangularMultiblockControllerBase(farming/multiblock/FarmController.java:79) |
[!WARNING] 已订正(源码回核)
- 尺寸原文完全缺失/错误。原文写「无明确最小块数限制,但至少需要 BASIC + 至少一个功能 tile」「高度: 任意」。实际硬性限制见下表(
FarmMultiblockSizeLimits)。- 控制器原文写成「BASIC 方块为主体」 —— 错。
FarmController是MultiblockLogicFarm.createNewController动态创建的虚拟控制器(MultiblockLogicFarm.java:32),没有任何一块方块是「控制器方块」。- 核心方块注册名原文写
forestry.farm—— 错,应为Forestry:ffarm。- 原文漏掉两条硬性校验规则:顶层必须是
TileFarmPlain、内部必须是TileFarmPlain、且必须至少有一个TileFarmGearbox。- 原文「参与方块」表只列了 1 行(Farm/TileFarmPlain),与其自己正文矛盾。
结构要求
| 参数 | 值 | 证据 |
|---|---|---|
| 最小 X / Y / Z | 3 / 4 / 3 | FarmMultiblockSizeLimits.getMinimumXSize/YSize/ZSize |
| 最大 X / Y / Z | 5 / 4 / 5 | FarmMultiblockSizeLimits.getMaximumXSize/YSize/ZSize |
| 最小组装方块数 | 36(= 3×3×4) | getMinimumNumberOfBlocksForAssembledMachine() = 3 * 3 * 4 |
| 控制器 | 虚拟 FarmController |
MultiblockLogicFarm.java:32 |
| 可否旋转 | 无旋转概念,矩形体积按实际邻接范围自适应(3~5 × 4 × 3~5) | — |
| 可否拆除 | 可。任意一格被破坏后 multiblock 立即解体(onMachineDisassembled 清空 targets,FarmController.java:228-232) |
FarmController.java:228-232 |
布局规则(逐格校验)
来自 FarmController.isGoodForExteriorLevel / isGoodForInterior / isMachineWhole:
| 位置 | 要求 | 错误提示键 |
|---|---|---|
| 顶层(level == 2) | 必须是 TileFarmPlain |
for.multiblock.farm.error.needPlainBand |
| 内部(不接触外表面,即 X/Y/Z 中心格) | 必须是 TileFarmPlain |
for.multiblock.farm.error.needPlainInterior |
| 整体 | 必须至少含 1 个 TileFarmGearbox,否则不成型 |
for.multiblock.farm.error.needGearbox |
| 其他侧面/底层 | 任意合法 multiblock 部件即可(isGoodForExteriorLevel 只在 level==2 抛异常) |
— |
| 非部件方块 | 一律不允许放在内部/侧面(isBlockGoodForInterior 默认直接抛异常,MultiblockControllerBase.java:487-514) |
for.multiblock.error.invalid.interior |
参与方块
| 方块 | 注册名 | Metadata | TileEntity | 角色 |
|---|---|---|---|---|
| Farm Plain | Forestry:ffarm |
0 / 1 | TileFarmPlain |
唯一允许出现在顶层与内部的填充方块 |
| Farm Gearbox | Forestry:ffarm |
2 | TileFarmGearbox |
动力源,必需至少 1 个 |
| Farm Hatch | Forestry:ffarm |
3 | TileFarmHatch |
输入/输出接口 |
| Farm Valve | Forestry:ffarm |
4 | TileFarmValve |
流体阀 |
| Farm Control | Forestry:ffarm |
5 | TileFarmControl |
电路板插槽 |
功能
Farm 是自动化农业多方块结构,控制器按四个方向(FarmDirection)各挂载一个 IFarmLogic,负责种植、施肥、灌溉、收获。
Farm Logic 类型(PluginFarming.preInit 注册的 Farmables)
| Farmable | 作物 | Farmable 类 |
|---|---|---|
| Arboreal | 原生树苗 + Forestry GE 树苗 | FarmableVanillaSapling, FarmableGE |
| Orchard | 小麦/土豆/胡萝卜(果实) | FarmableBasicFruit(Blocks.wheat/potatoes/carrots, 7) |
| Shroom | 红/棕蘑菇 | FarmableVanillaMushroom |
| Wheat | 小麦 | FarmableGenericCrop(wheat_seeds → wheat, 7) |
| Gourd | 南瓜/西瓜 | FarmableGourd |
| Infernal | 下界疣 | FarmableGenericCrop(nether_wart → nether_wart, 3) |
| Poales | 甘蔗 | FarmableStacked(Blocks.reeds, 3, 0) |
| Succulentes | 仙人掌 | FarmableStacked(Blocks.cactus, 3, 0) |
| Vegetable | 胡萝卜/土豆 | FarmableGenericCrop |
| Peat | 泥炭 | 由 Energy 模块的泥炭引擎关联 |
原文中「Succulent | 仙人掌」对应的枚举实际名为
Succulentes(PluginFarming.java中FarmableReference.Succulentes)。另外 Vegetable / Peat 的具体Farmable绑定见PluginFarming.preInit,IC2 作物由PluginIC2追加FarmableBasicIC2Crop。
电路板
- Managed 插槽:插入电路板后自动管理对应类型作物
- Manual 插槽:半自动,需玩家手动触发
- 电路板配方由
PluginFarming.java:350-403通过ChipsetManager.solderManager注册
数值
| 数值 | 值 | 证据 |
|---|---|---|
| 灌溉水槽容量 | 10000 mB(水) | new FilteredTank(Constants.PROCESSOR_TANK_CAPACITY, FluidRegistry.WATER)(FarmController.java:141) |
| 控制器电路板槽 | 1 | new InventoryAdapter(1, "sockets")(FarmController.java:135) |
| 齿轮箱工作周期 | 4 周期 × 50 RF = 200 RF/次 | TileFarmGearbox.WORK_CYCLES = 4、ENERGY_PER_OPERATION = WORK_CYCLES * 50(TileFarmGearbox.java:21-22) |
| 内部耕地湿度阈值 | 由环境温度/湿度决定(FarmHydrationManager) |
— |
| 肥料消耗 | 由 MultiblockManager.farmFertilizerRegistry 中注册的肥料决定 |
— |
第三方 mod 集成
- IC2:
FarmLogicIC2Crops,电路板Circuit.farmIC2CropsManaged/Manual(PluginIC2.java:340-354) - Arboriculture:GE 树苗通过
FarmableGE集成
相关条目
- Farm - 基础方块