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 |