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 |
相关条目