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)。

相关条目