晶体催生仓
基本信息
| 属性 | 值 |
|---|---|
| 注册名 | ae2stuff:Grower |
| 英文名 | Crystal Growth Chamber |
| 中文名 | 晶体催生仓 |
| TileEntity | net.bdew.ae2stuff.machines.grower.TileGrower |
| 硬度 | 1(BlockGrower.scala:31) |
| 材质 | MachineMaterial(MapColor.ironColor) |
| GUI ID | 2(MachineGrower.scala:24) |
| 可旋转 | 否 |
| 升级槽 | 3(仅 AE2 速度卡) |
| 可自动化 | 是(SidedInventory) |
功能
晶体催生仓把 AE2 的种子类物品(IGrowableCrystal)当作可批量催生的作物,同时兼职福鲁伊克斯水晶合成器。它是一个 AE 缓冲型机器:内部有独立储能,缺电时进入休眠,通电后自动唤醒(grid/SleepableTile.scala)。
两种产出:
- 晶体催生:槽内每个
IGrowableCrystal实例被triggerGrowth推进一次 - 水晶合成:若同时存在 1 个充能赛特斯石英 + 1 个红石粉 + 1 个下界石英,消耗三者产出 2 个福鲁伊克斯水晶(
TileGrower.scala:71-93),直接写入第一个空槽或未满的福鲁伊克斯槽
两种产出在同一周期内共享一次电费:无论实际处理了多少堆物品,每周期只扣一次 needPower(TileGrower.scala:95-99)。
槽位
getSizeInventory = 3 * 9 = 27(TileGrower.scala:35),另加 3 格升级槽(UpgradeInventory,不占 getSizeInventory,随 TileEntity 的 upgrades 字段持久化)。
接受与输出
isItemValidForSlot(TileGrower.scala:122-128)接受 4 类物品:
| 物品 | 判定方式 |
|---|---|
| AE2 种子类 | stack.getItem.isInstanceOf[IGrowableCrystal] |
| 下界石英 | GameRegistry.findItem("minecraft", "quartz") |
| 红石粉 | GameRegistry.findItem("minecraft", "redstone") |
| 充能赛特斯石英 | AE2Defs.materials.certusQuartzCrystalCharged().isSameAs(stack) |
canExtractItem 是 !isItemValidForSlot(TileGrower.scala:130-131)——产出的福鲁伊克斯水晶可以被自动化抽出,而 4 类原料不能。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 待机功耗 | 0 AE/t | tuning.cfg Machines/Grower/IdlePower |
| 周期长度 | 1 tick | tuning.cfg Machines/Grower/CycleTicks |
| 每周期耗电 | 100 AE | tuning.cfg Machines/Grower/CyclePower |
| 内部容量 | 10000 AE | tuning.cfg Machines/Grower/PowerCapacity |
| 升级槽数 | 3 | TileGrower.scala:39 |
| 速度卡最高等级 | 3 | MachineGrower.scala:34 Upgrades.SPEED.registerItem(new ItemStack(BlockGrower), 3) |
| 槽位总数 | 27 | TileGrower.scala:35 |
触发条件是 getTotalWorldTime % cycleTicks == 0 && isAwake(TileGrower.scala:50)。默认 cycleTicks = 1,意味着每个 tick 都会检查并扣电。
升级影响
needPower = CyclePower * (1 + 速度卡数)(TileGrower.scala:53-54),即插满 3 张卡时每周期耗电 100 → 400 AE。
meta 与外观
onWake→ meta 1(main_on),onSleep→ meta 0(main_off),见TileGrower.scala:143-150- WAILA 展示储能 / 容量与休眠状态(
waila/WailaPoweredDataProvider.scala)
配方
3×3 合成,中心与四角为 AE2 的 tile.BlockQuartzGrowthAccelerator,上/左/右为箱子(T),下/左/右为漏斗(H),共 1 个产出(recipes.cfg:11-21):
G H G
G T G
G H G
已知缺陷:速度卡不生效
TileGrower.scala:62-68:
var ns = stack
for (i <- 0 to upgrades.cards(Upgrades.SPEED)
if stack.getItem.isInstanceOf[IGrowableCrystal])
ns = stack.getItem.asInstanceOf[IGrowableCrystal].triggerGrowth(stack)
setInventorySlotContents(slot, ns)
循环体每次都对原始的 stack 调用 triggerGrowth,而不是上一轮的 ns。因此 N 轮循环产生 N 次丢弃的结果,只保留最后一次——净生长步数恒为 1,与速度卡数量无关;但电费按 100 × (1 + N) 扣除,插卡反而更亏。同一行的守卫条件检查的也是 stack 而非 ns,无法拦截。
同时 hadWork 在存在任意 IGrowableCrystal 时即置 true(TileGrower.scala:69),即使催生没有推进(已达满阶种子)也会扣掉整周期电费。