TileEntityOxygenCompressor(氧气压缩机)

事实基准:/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。

注册信息

属性 值 来源
TileEntity 注册名 Air Compressor core/GalacticraftCore.java:712
所属 modid GalacticraftCore core/Constants.java:7,@Mod 见 core/GalacticraftCore.java:160-161
关联方块 GCBlocks.oxygenCompressor = new BlockOxygenCompressor(false, "oxygenCompressor") core/blocks/GCBlocks.java:110
方块→TE 分派 metadata >= OXYGEN_DECOMPRESSOR_METADATA(=4)时装解压机,否则压缩机 core/blocks/BlockOxygenCompressor.java:127-130、:32
父类 TileEntityOxygen(→ TileBaseElectricBlock → TileBaseUniversalElectrical → EnergyStorageTile) core/tile/TileEntityOxygenCompressor.java:19、core/tile/TileEntityOxygen.java:19
实现接口 IInventory / ISidedInventory(父类另带 IOxygenReceiver / IOxygenStorage / IDisableableMachine / IConnector / IWrenchable) core/tile/TileEntityOxygenCompressor.java:19、core/energy/tile/TileBaseElectricBlock.java:22-24
槽位数 3 见下节

⚠ 压缩机和氧气解压机共用同一个方块(BlockOxygenCompressor),靠 metadata 4 分界, 两者分属两个独立注册的 TileEntity。

槽位与字段

core/tile/TileEntityOxygenCompressor.java:21:

private ItemStack[] containingItems = new ItemStack[3];

getSizeInventory()(:96-99)返回 this.containingItems.length → 恒为 3 (readFromNBT 在 :66 用等长数组重建,不改长度)。

槽位 用途 源码
0 氧气罐(ItemOxygenTank,只在这格被自动充放) core/tile/TileEntityOxygenCompressor.java:50-56、:201
1 电池槽(getBatteryInSlot() 返回 getStackInSlot(1)) core/tile/TileEntityOxygenCompressor.java:227-229
2 氧气供给物品(IItemOxygenSupply,如氧气罐以外的充气容器) core/tile/TileEntityOxygenCompressor.java:34-42、:205
可接受性 源码
侧面可达槽:{0, 1, 2} 全开 core/tile/TileEntityOxygenCompressor.java:170-172
每槽堆叠上限 1 core/tile/TileEntityOxygenCompressor.java:151-153
抽出条件:槽 0 仅在罐空(getItemDamage() == 0)时允许 core/tile/TileEntityOxygenCompressor.java:188-195

⚠ shouldUseEnergy()(:217-219)返回的是「上一 tick 是否真的在充气」的 usingEnergy 标志, 不是 hasEnoughEnergyToRun——没电时它立刻变 false,供电恢复要等下一次成功充气。

能量

项目 值 来源
缓冲容量 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
最大输出 15 gJ/t(构造时 this.storage.setMaxExtract(15),本类唯一的能量覆写) core/tile/TileEntityOxygenCompressor.java:26-29

⚠ 单位是 gJ(GigaJoule),不是 RF/t、不是 EU/t。

tick / 特殊机制

  • 氧气容量与速率:super(1200, 16) → maxOxygen = 1200、oxygenPerTick = 16(:27,core/tile/TileEntityOxygen.java:30-33)。
  • 从供给物品抽气:每 tick Math.min(16 × 2.5, 1200 − storedOxygen),即最多 40/t(:37)。
  • 往氧气罐充气:仅当 storedOxygen > 0 && hasEnoughEnergyToRun 且槽 0 是 ItemOxygenTank 且 getItemDamage() > 0 时,每 tick 扣 TANK_TRANSFER_SPEED = 2 点耐久、氧气减 2(:52-56、:23)。
  • 纯氧气管路方向:getOxygenInputDirections() = 电力输入面的对面;输出方向为空集(:236-244)—— 这机器不通过管网出氧,只填罐。
  • 电力输入面 = ForgeDirection.getOrientation(getBlockMetadata() + 2)(:222-224)。

GUI / Container

GUI 类 Container 类 分派处(core/client/gui/GuiHandler.java)
core.client.gui.container.GuiOxygenCompressor core.inventory.ContainerOxygenCompressor Container :147-148、Gui :237-238

相关条目