TileEntityElectrolyzer(水电解器)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Water Electrolyzer |
planets/mars/MarsModule.java:248 |
| 所属 modid | GalacticraftMars |
core/Constants.java:8,@Mod 见 planets/GalacticraftPlanets.java:37-38 |
| 注册方法入口 | MarsModule.registerTileEntities(),由 planets/mars/MarsModule.java:153 调用 |
planets/mars/MarsModule.java:241-252 |
| 关联方块 | micdoodle8.mods.galacticraft.planets.mars.blocks.BlockMachineMarsT2 |
planets/mars/blocks/BlockMachineMarsT2.java:218-219 |
| 父类 | TileBaseElectricBlockWithInventory |
core/energy/tile/TileBaseElectricBlockWithInventory.java:10 |
| 实现接口 | ISidedInventory / IDisableableMachine / IFluidHandler / IOxygenStorage / IOxygenReceiver |
planets/mars/tile/TileEntityElectrolyzer.java:37-38 |
| 槽位数 | 4(getSizeInventory() 本类未覆写,继承 core/energy/tile/TileBaseElectricBlockWithInventory.java:46-48,返回 getContainingItems().length) |
同上 |
⚠ 注册不在 GalacticraftCore.java,而在 planets/mars/MarsModule.java:241-252。
modid 来自 Constants.MOD_ID_PLANETS = "GalacticraftMars"(core/Constants.java:8),
不是从目录名 planets/mars 推断的。
槽位与字段
planets/mars/tile/TileEntityElectrolyzer.java:40-56:
| 成员 | 值 / 类型 | 含义 | 来源 |
|---|---|---|---|
tankCapacity |
4000(private final int) |
每个罐的容量 | planets/mars/tile/TileEntityElectrolyzer.java:40 |
waterTank |
FluidTank(4000) |
水罐 | planets/mars/tile/TileEntityElectrolyzer.java:42-43 |
liquidTank |
FluidTank(4000) |
氧气 输出罐 | planets/mars/tile/TileEntityElectrolyzer.java:45-46 |
liquidTank2 |
FluidTank(4000) |
氢气 输出罐 | planets/mars/tile/TileEntityElectrolyzer.java:48-49 |
containingItems |
ItemStack[4] |
物品槽 | planets/mars/tile/TileEntityElectrolyzer.java:56 |
processTimeRequired |
int,初值 3 |
单次电解耗时 | planets/mars/tile/TileEntityElectrolyzer.java:51 |
processTicks |
int,@NetworkedField |
进度 | planets/mars/tile/TileEntityElectrolyzer.java:53-54 |
getContainingItems()(:206-208)返回 containingItems → getSizeInventory() 恒为 4。
3 个罐各有 4000 mB(水、氧、氢),但槽位只有 4 个(下面 2 个是罐口控制件,不是罐)。
| 槽位 | 用途 | 源码 |
|---|---|---|
| 0 | 电池 | planets/mars/tile/TileEntityElectrolyzer.java:255-256 判 ItemElectricBase.isElectricItem |
| 1 | 桶 / 水桶 | planets/mars/tile/TileEntityElectrolyzer.java:257-258 判 Items.bucket || Items.water_bucket |
| 2 | 输出罐 1(liquidTank)口 |
planets/mars/tile/TileEntityElectrolyzer.java:81 放 ItemAtmosphericValve |
| 3 | 输出罐 2(liquidTank2)口 |
planets/mars/tile/TileEntityElectrolyzer.java:82 放 ItemAtmosphericValve |
⚠ isItemValidForSlot(:252-262)对槽 2、3 返回 false,只承认槽 0 和 1;
而 updateEntity 里的 checkFluidTankTransfer(:134-139)照样读槽 2、3。
按 ISidedInventory 走自动化时这两个口拿不到阀门,只能手工放。
getAccessibleSlotsFromSide 返回 {0, 1}(:222-225),
即自动化只能碰电池与桶,罐口阀门不对外开放。
getInventoryStackLimit() 继承基类 = 64(core/energy/tile/TileBaseElectricBlockWithInventory.java:102-104)。
能量与电解速率(本篇核心常量)
| 常量 | 值 | 含义 | 来源 |
|---|---|---|---|
maxExtract |
120(hardMode 150) | 拉取功率 | planets/mars/tile/TileEntityElectrolyzer.java:59 |
| tier | 固定 2 | 构造器无条件 setTierGC(2) |
planets/mars/tile/TileEntityElectrolyzer.java:60 |
| 容量 | 16000 | 本类不调 setCapacity,沿用 STANDARD_CAPACITY |
core/energy/tile/EnergyStorageTile.java:18、:21 |
maxReceive |
25 | 默认值,本类不调 setMaxReceive |
core/energy/tile/EnergyStorageTile.java:21(new EnergyStorage(STANDARD_CAPACITY, 10),两参构造见 core/energy/tile/EnergyStorage.java:19-21,展开为 maxReceive = 2.5F * 10 = 25、maxExtract = 10) |
| 1 级供电耗时 | 3 tick | processTimeRequired = poweredByTierGC == 2 ? 2 : 3 |
planets/mars/tile/TileEntityElectrolyzer.java:87 |
| 2 级供电耗时 | 2 tick | 同上 | planets/mars/tile/TileEntityElectrolyzer.java:87 |
⚠ processTimeRequired 每 tick 重算(:86-88),只在 tierGC == 2 时改写;
本类构造器已固定 tier 2,所以该分支恒成立。
单位是 gJ,不是 RF/t、不是 EU/t。
产气配比
doElectrolysis(:105-114)+ placeIntoFluidTanks(:116-132):
| 步骤 | 量 | 来源 |
|---|---|---|
每次电解调用传入 amountToDrain = 2 |
— | planets/mars/tile/TileEntityElectrolyzer.java:112 |
liquidTank 灌氧 |
2 mB(上限为罐内剩余空间) | planets/mars/tile/TileEntityElectrolyzer.java:119(amountToDrain2 = amountToDrain * 2)、:124 |
liquidTank2 灌氢 |
4 mB(上限为罐内剩余空间) | planets/mars/tile/TileEntityElectrolyzer.java:126-129 |
| 水罐消耗 | 1 mB | planets/mars/tile/TileEntityElectrolyzer.java:113 |
即理论上限 1 mB 水 → 2 mB 氧 + 4 mB 氢(被罐内余量截断)。
出气速率直接引用 TileEntityOxygenStorageModule.OUTPUT_PER_TICK:
getOxygenProvide(:515-520)与 getHydrogenProvide(:522-526)都返回
Math.min(OUTPUT_PER_TICK, 存量),而该常量是 500
(core/tile/TileEntityOxygenStorageModule.java:31)。
阀门放气:槽 2、3 放了 ItemAtmosphericValve 就每 tick 泄 4 mB
(checkFluidTankTransfer,:134-139),且此路径不走 hasEnoughEnergyToRun——
断电也在放气。
输出方向
| 方法 | 行为 | 来源 |
|---|---|---|
getOxygenOutputDirection() |
7 - (metaside ^ (metaside > 3 ? 0 : 1)) ^ 1 |
planets/mars/tile/TileEntityElectrolyzer.java:394-397 |
getHydrogenOutputDirection() |
metaside ^ 1 |
planets/mars/tile/TileEntityElectrolyzer.java:399-402 |
getElectricInputDirection() |
恒 ForgeDirection.DOWN |
planets/mars/tile/TileEntityElectrolyzer.java:274-277 |
canConnect(...) |
氧/氢/电各走各的输出方向 | planets/mars/tile/TileEntityElectrolyzer.java:543-562 |
氧可送进 IOxygenNetwork(:404-438);氢只送进
IHydrogenNetwork 或紧邻的 TileEntityMethaneSynthesizer(:459-469)——
不是任意 IHydrogenReceiver。
receiveOxygen 恒返回 0(:533-536)、getOxygenRequest 恒 0(:538-541)、
shouldPullOxygen 恒 false(:528-531)——本机是纯产气方,不吃氧。
GUI / Container
| GUI 类 | Container 类 | 分派处 |
|---|---|---|
planets.mars.client.gui.GuiWaterElectrolyzer |
planets.mars.inventory.ContainerElectrolyzer |
Container planets/mars/MarsModule.java:322、Gui planets/mars/MarsModuleClient.java:153-154 |
网络封包
waterTank、liquidTank、liquidTank2、processTicks 为 @NetworkedField
(:42-54)。getPacketRange() 覆写为 320.0(:269-272),
远大于基类的 12.0。冷却继承基类 = 3。无独立封包 ID。