晶体催生仓

基本信息

属性 值
注册名 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)。

两种产出:

  1. 晶体催生:槽内每个 IGrowableCrystal 实例被 triggerGrowth 推进一次
  2. 水晶合成:若同时存在 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),即使催生没有推进(已达满阶种子)也会扣掉整周期电费。