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。

相关条目