TileEntityGasLiquefier(气体液化机)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Gas Liquefier |
planets/mars/MarsModule.java:246 |
| 所属 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:214-215 |
| 父类 | TileBaseElectricBlockWithInventory |
core/energy/tile/TileBaseElectricBlockWithInventory.java:10 |
| 实现接口 | ISidedInventory / IDisableableMachine / IFluidHandler / IOxygenReceiver |
planets/mars/tile/TileEntityGasLiquefier.java:42-43 |
| 槽位数 | 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/tile/TileEntityGasLiquefier.java:45-71:
| 成员 | 值 / 类型 | 含义 | 来源 |
|---|---|---|---|
tankCapacity |
2000(private final int) |
单个产物罐容量 | planets/mars/tile/TileEntityGasLiquefier.java:45 |
gasTank |
FluidTank(tankCapacity * 2 = 4000) |
气体输入罐 | planets/mars/tile/TileEntityGasLiquefier.java:47-48 |
liquidTank |
FluidTank(2000) |
产物罐 1 | planets/mars/tile/TileEntityGasLiquefier.java:50-51 |
liquidTank2 |
FluidTank(2000) |
产物罐 2 | planets/mars/tile/TileEntityGasLiquefier.java:53-54 |
containingItems |
ItemStack[4] |
物品槽 | planets/mars/tile/TileEntityGasLiquefier.java:61 |
processTimeRequired |
int,初值 3 |
单次液化耗时 | planets/mars/tile/TileEntityGasLiquefier.java:56 |
processTicks |
int,初值 -10,@NetworkedField |
进度(负值代表待机蓄能) | planets/mars/tile/TileEntityGasLiquefier.java:58-59 |
airProducts |
int,初值 -1 |
所在维度的可液化组分编码 | planets/mars/tile/TileEntityGasLiquefier.java:62 |
gasTankType / fluidTankType / fluidTank2Type |
int,初值 -1,均 @NetworkedField |
各罐当前装的是 TankGases 的哪一项 |
planets/mars/tile/TileEntityGasLiquefier.java:64-71 |
getContainingItems()(:462-464)返回 containingItems → getSizeInventory() 恒为 4。
| 槽位 | 用途 | 源码 |
|---|---|---|
| 0 | 电池 | planets/mars/tile/TileEntityGasLiquefier.java:519-520 判 ItemElectricBase.isElectricItem |
| 1 | 气体输入(罐 / 大气阀 / 通用流体容器) | planets/mars/tile/TileEntityGasLiquefier.java:521-522 判 FluidUtil.isValidContainer |
| 2 | 产物罐 1 输出 | planets/mars/tile/TileEntityGasLiquefier.java:523-524、:522 |
| 3 | 产物罐 2 输出 | planets/mars/tile/TileEntityGasLiquefier.java:523-524、:522 |
getAccessibleSlotsFromSide(:479-489)按面分权限:
| 面 | 可访问槽 | 来源 |
|---|---|---|
side == 0(底面) |
{0, 1, 2, 3} |
planets/mars/tile/TileEntityGasLiquefier.java:480-482 |
side > 1(四个侧面) |
{1, 2, 3} |
planets/mars/tile/TileEntityGasLiquefier.java:484-486 |
side == 1(顶面) |
{0} |
planets/mars/tile/TileEntityGasLiquefier.java:488 |
处理速率 / 耗时(本篇核心常量)
| 常量 | 值 | 含义 | 来源 |
|---|---|---|---|
maxExtract |
60(hardMode 90) | 拉取功率 | planets/mars/tile/TileEntityGasLiquefier.java:93 |
| tier | 固定 2 | 构造器无条件 setTierGC(2) |
planets/mars/tile/TileEntityGasLiquefier.java:94 |
| 容量 | 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 | poweredByTierGC == 2 ? 2 : 3 |
planets/mars/tile/TileEntityGasLiquefier.java:244 |
| 2 级供电耗时 | 2 tick | 同上 | planets/mars/tile/TileEntityGasLiquefier.java:244 |
| 待机蓄能下限 | -10 | --processTicks <= -10 时钳住 |
planets/mars/tile/TileEntityGasLiquefier.java:255-257 |
⚠ processTicks 可以是负数(初值 -10),与熔炉/压缩机的 0 起始不同。
待机时 processTicks 从 -10 继续往下减到 -10 就停(:255-257);
一旦满足 processTicks <= 0 且有电,就从 processTimeRequired 重新计时(:247-251)。
⚠ 单位是 gJ,不是 RF/t、不是 EU/t。
TankGases 枚举
planets/mars/tile/TileEntityGasLiquefier.java:73-90:
| 枚举值 | index | 气体名 | 液态产物名 |
|---|---|---|---|
METHANE |
0 | methane |
fuel(旧配置下为 fuelgc) |
OXYGEN |
1 | oxygen |
liquidoxygen |
NITROGEN |
2 | nitrogen |
liquidnitrogen |
ARGON |
3 | argon |
liquidargon |
AIR |
4 | atmosphericgases |
xxyyzz |
产物名的切换由 ConfigManagerCore.useOldFuelFluidID 决定(:75)。
液化逻辑
doLiquefaction(:367-398)分三支:
| 情形 | 消耗 | 来源 |
|---|---|---|
罐内是 AIR |
按 getAirProducts() 编码逐组分分流,每组分取 min(gasAmount / 2, 3),罐内气体按产物量 ×2 扣(:385) |
planets/mars/tile/TileEntityGasLiquefier.java:374-392 |
| 罐内只剩 1 单位气体 | 直接 1:1 灌进产物罐(:394) |
planets/mars/tile/TileEntityGasLiquefier.java:393-394 |
| 其他 | 每次取 min(gasAmount / 2, 3),按产物量 ×2 扣气体(:396) |
planets/mars/tile/TileEntityGasLiquefier.java:395-397 |
getAirProducts()(:346-365)读所在维度的 atmosphere 列表,
最多打包 3 个组分进一个 int(每 4 bit 一组,:352-358);
非 WorldProviderSpace 时返回 35(:364),
即十进制 35 = 0b100011 → 组分 3(氩)与组分 0(甲烷)各 +1。
⚠ 在真空中废气:airProducts == 0 && gasTankType == AIR 时
gasTank 被一次抽干(:118-121)。
罐口控件
checkFluidTankTransfer(:261-279)对槽 2、3:放 ItemAtmosphericValve 就
每 tick 排 4 mB(:275-278);放对应空容器就灌满(:262-274,
分别走 tryFillContainerFuel / AsteroidsItems.canisterLOX / canisterLN2)。
该路径不走 hasEnoughEnergyToRun——断电也在排/灌。
输出方向
getElectricInputDirection() 恒 ForgeDirection.DOWN(:540-543),
getPacketRange() 覆写为 320.0(:535-538)。
canProcess()(:317-344)会在两个产物罐装错气体时返回 false。
GUI / Container
| GUI 类 | Container 类 | 分派处 |
|---|---|---|
planets.mars.client.gui.GuiGasLiquefier |
planets.mars.inventory.ContainerGasLiquefier |
Container planets/mars/MarsModule.java:324、Gui planets/mars/MarsModuleClient.java:155-156 |
网络封包
gasTank、liquidTank、liquidTank2、processTicks、gasTankType、
fluidTankType、fluidTank2Type 全是 @NetworkedField(targetSide = Side.CLIENT)
(:47-71)。无独立封包 ID。
NBT 键:gasTank(读 planets/mars/tile/TileEntityGasLiquefier.java:431-432、写 :449-450)、
liquidTank(读 :435-436、写 :453-454)、
liquidTank2(读 :438-439、写 :456-457)。只在罐非空时才写(:449、:453、:456)。
⚠ processTicks 的 NBT 键叫 smeltingTicks(:446)——与熔炉同名的复制粘贴遗留,
读侧在 :428。它不是 processTicks,别按字段名去找存档键。