TileEntityOxygenDecompressor(氧气解压机)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Oxygen Decompressor |
core/GalacticraftCore.java:738 |
| 所属 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:128-129、:32 |
| 父类 | TileEntityOxygen(→ TileBaseElectricBlock → … → EnergyStorageTile) |
core/tile/TileEntityOxygenDecompressor.java:18、core/tile/TileEntityOxygen.java:19 |
| 实现接口 | IInventory / ISidedInventory |
core/tile/TileEntityOxygenDecompressor.java:18 |
| 槽位数 | 2 | 见下节 |
槽位与字段
core/tile/TileEntityOxygenDecompressor.java:20:
private ItemStack[] containingItems = new ItemStack[2];
getSizeInventory()(:84-87)返回 this.containingItems.length → 恒为 2(:54 等长重建)。
| 槽位 | 用途 | 源码 |
|---|---|---|
| 0 | 氧气罐(ItemOxygenTank,每 tick 被抽气) |
core/tile/TileEntityOxygenDecompressor.java:35-43、:190 |
| 1 | 电池槽(getBatteryInSlot() → getStackInSlot(1)) |
core/tile/TileEntityOxygenDecompressor.java:215-217 |
| 可接受性 | 源码 |
|---|---|
侧面可达槽:{0, 1} |
core/tile/TileEntityOxygenDecompressor.java:158-160 |
| 每槽堆叠上限 1 | core/tile/TileEntityOxygenDecompressor.java:139-141 |
抽出条件:槽 0 仅在罐满(getItemDamage() == getMaxDamage())时允许 |
core/tile/TileEntityOxygenDecompressor.java:175-184 |
能量
| 项目 | 值 | 来源 |
|---|---|---|
| 缓冲容量 | 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 |
| 最大输出 | 10 gJ/t(构造未覆写,沿用默认 maxTransfer) |
core/tile/TileEntityOxygenDecompressor.java:25-27、core/energy/tile/EnergyStorage.java:19-21 |
⚠ 与 TileEntityOxygenCompressor 相比,本类没有 setMaxExtract 调用,
输出就是默认的 10 gJ/t。
tick / 特殊机制
- 氧气容量与速率:
super(1200, 0)→maxOxygen = 1200、oxygenPerTick = 0(:26)。 ⚠oxygenPerTick = 0意味着shouldUseOxygen()返回false时本机不耗自身氧气(core/tile/TileEntityOxygen.java:55-57), 氧气是边抽边推的过路量。 - 抽气:每 tick 若槽 0 是
ItemOxygenTank、耐久未满、内部未满且hasEnoughEnergyToRun, 罐耐久 +1、机器receiveOxygen(1)(:37-43)。 - 出网:每 tick 调
produceOxygen()(:45),单次上限OUTPUT_PER_TICK= 100(:22、:244-247)。 - 出气面 = 电力输入面的对面(
:219-221、:229-231);输入方向为空集(:224-226)。 - 电力输入面 =
getOrientation(getBlockMetadata() - 4 + 2),即解压机侧比压缩机少减 4(:209-212)。 shouldPullOxygen()/shouldUseOxygen()均被覆写为false(:234-241)——不联网拉气、不耗自身氧气。
GUI / Container
| GUI 类 | Container 类 | 分派处(core/client/gui/GuiHandler.java) |
|---|---|---|
core.client.gui.container.GuiOxygenDecompressor |
core.inventory.ContainerOxygenDecompressor |
Container :149-150、Gui :239-240 |