TileEntityMethaneSynthesizer(甲烷合成器)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Methane Synthesizer |
planets/mars/MarsModule.java:247 |
| 所属 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 |
| 关联方块 | MarsBlocks.machineT2 = new BlockMachineMarsT2().setBlockName("marsMachineT2") |
planets/mars/blocks/MarsBlocks.java:36 |
| 方块→TE 分派 | metadata &= 12 后 case METHANE_SYNTHESIZER(=4) |
planets/mars/blocks/BlockMachineMarsT2.java:210-217、:38 |
| 父类 | TileBaseElectricBlockWithInventory(→ TileBaseElectricBlock → … → EnergyStorageTile) |
planets/mars/tile/TileEntityMethaneSynthesizer.java:36-37 |
| 实现接口 | ISidedInventory / IDisableableMachine / IFluidHandler(父类另带 IInventory / IConnector / IWrenchable) |
planets/mars/tile/TileEntityMethaneSynthesizer.java:36-37 |
| 槽位数 | 5 | 见下节 |
槽位与流体罐
planets/mars/tile/TileEntityMethaneSynthesizer.java:55:
private ItemStack[] containingItems = new ItemStack[5];
getSizeInventory() 本类未覆写,继承
core/energy/tile/TileBaseElectricBlockWithInventory.java:46-48 → 恒为 5
(getContainingItems() 见 planets/mars/tile/TileEntityMethaneSynthesizer.java:253-256)。
| 槽位 | 用途 | 源码 |
|---|---|---|
| 0 | 电池槽 | planets/mars/tile/TileEntityMethaneSynthesizer.java:303-304 |
| 1 | 永远无效(isItemValidForSlot 直接 return false) |
planets/mars/tile/TileEntityMethaneSynthesizer.java:305-307 |
| 2 | 大气阀 ItemAtmosphericValve——抽 CO2 入罐 |
planets/mars/tile/TileEntityMethaneSynthesizer.java:84-98、:308 |
| 3 | MarsItems.carbonFragments(碳碎片)——替代 CO2 的碳源 |
planets/mars/tile/TileEntityMethaneSynthesizer.java:156-157、:310 |
| 4 | 液态甲烷容器(AsteroidsItems.methaneCanister) |
planets/mars/tile/TileEntityMethaneSynthesizer.java:124-135、:312 |
| 流体罐 | 容量 | 装的东西 | 源码 |
|---|---|---|---|
gasTank |
4000 | 氢气 | planets/mars/tile/TileEntityMethaneSynthesizer.java:39-42、:366-372 |
gasTank2 |
2000(tankCapacity / 2) |
二氧化碳 | planets/mars/tile/TileEntityMethaneSynthesizer.java:45、:94-95 |
liquidTank |
2000(tankCapacity / 2) |
甲烷(输出) | planets/mars/tile/TileEntityMethaneSynthesizer.java:48、:207 |
⚠ canFill 只认流体名 "hydrogen",且只从电力输入面进(:366-373);
canDrain / drain 只从输入面的对面出货甲烷(:333-364)。
能量
| 项目 | 值 | 来源 |
|---|---|---|
| 缓冲容量 | 16000 gJ(STANDARD_CAPACITY,本类未覆写) |
core/energy/tile/EnergyStorageTile.java:18、:21 |
| 最大输入 | 25 gJ/t——new EnergyStorage(STANDARD_CAPACITY, 10) 两参构造展开为 maxReceive = 2.5F * 10 |
core/energy/tile/EnergyStorageTile.java:21、core/energy/tile/EnergyStorage.java:19-21 |
| 最大输出 | 30 gJ/t(困难模式 ConfigManagerCore.hardMode 下 60) |
planets/mars/tile/TileEntityMethaneSynthesizer.java:60-63 |
| 电网接入口 | 固定 ForgeDirection.DOWN——不跟 metadata 朝向 |
planets/mars/tile/TileEntityMethaneSynthesizer.java:328-331 |
构造还调 this.setTierGC(2)(:62),即本机是 2 级机器。
tick / 特殊机制(本篇核心)
processTimeRequired 是动态的:
| 条件 | 单次耗时 | 源码 |
|---|---|---|
| 默认 / 字段初值 | 3 tick | planets/mars/tile/TileEntityMethaneSynthesizer.java:50 |
tierGC == 2 且 poweredByTierGC == 2(T2 电网供电) |
2 tick(源码注释自称「50% extra speed boost」) | planets/mars/tile/TileEntityMethaneSynthesizer.java:104-108 |
processTicks 初值 −8,停机时逐 tick 递减到 −8 后停住(:53、:116-120)。
配方
| 步骤 | 细节 | 源码 |
|---|---|---|
| 起始条件 | gasTank(氢)有量、未被扳手禁用、liquidTank 未满 |
planets/mars/tile/TileEntityMethaneSynthesizer.java:151-165 |
| 二氧化碳来源 | 槽 2 的 ItemAtmosphericValve + 头顶是空气 + 不在氧气泡内 → 每 tick 向 gasTank2 灌 4 mB |
planets/mars/tile/TileEntityMethaneSynthesizer.java:86-97 |
| 维度检查 | hasCO2 由 getAirProducts() 读当前 WorldProviderSpace 的大气列表,只在首次 tick 缓存(hasCO2 == -1) |
planets/mars/tile/TileEntityMethaneSynthesizer.java:69-71、:167-181 |
| 无 CO2 维度 | 若 hasCO2 == 0 但 gasTank2 里有东西,直接排空 |
planets/mars/tile/TileEntityMethaneSynthesizer.java:75-77 |
| 碳碎片路径 | 无 CO2 时改为消耗槽 3:每 40 次液化才真正扣 1 个(coalPartial 累加到 40 归零) |
planets/mars/tile/TileEntityMethaneSynthesizer.java:183-198 |
| 产出比 | gasTank.drain(placeIntoFluidTanks(2) * 8)——消耗的氢气是产出甲烷的 8 倍 |
planets/mars/tile/TileEntityMethaneSynthesizer.java:197、:200-213 |
| 装罐 | 槽 4 是有效容器时 FluidUtil.tryFillContainer;放进去大气阀会每 tick 排 4 mB |
planets/mars/tile/TileEntityMethaneSynthesizer.java:124-135 |
⚠ placeIntoFluidTanks(2) 单次最多往 liquidTank 灌 2 mB 甲烷,但氢气却扣 2 × 8 = 16 mB
(:197、:200-213)——氢消耗远大于甲产出。
getPacketRange()= 320.0(:323-326)——本批里范围最大的机器。canConnect显式拒绝NetworkType.OXYGEN(:410-421),非电力连接走氢气支路。
GUI / Container
| GUI 类 | Container 类 | 分派处 |
|---|---|---|
planets.mars.client.gui.GuiMethaneSynthesizer |
planets.mars.inventory.ContainerMethaneSynthesizer |
Container planets/mars/MarsModule.java:326-327、Gui planets/mars/MarsModuleClient.java:157-158 |
挂在 GuiIdsPlanets.MACHINE_MARS 下(planets/mars/MarsModule.java:314、planets/mars/MarsModuleClient.java:146)。