TileEntityOxygenStorageModule(氧气存储模块)

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

注册信息

属性 值 来源
TileEntity 注册名 Oxygen Storage Module GalacticraftCore.java:737
注册类 micdoodle8.mods.galacticraft.core.tile.TileEntityOxygenStorageModule 同上
关联方块 GCBlocks.machineBase2 = new BlockMachine2("machine2") core/blocks/GCBlocks.java:122
方块→TE 分派 metadata >= OXYGEN_STORAGE_MODULE_METADATA(= 8)时装配本 TE,否则落到同块的其它机器 TE core/blocks/BlockMachine2.java:296-300、:34
父类 TileEntityOxygen(→ TileBaseElectricBlock → TileBaseUniversalElectrical → EnergyStorageTile) core/tile/TileEntityOxygenStorageModule.java:25、core/tile/TileEntityOxygen.java:19、core/energy/tile/TileBaseElectricBlock.java:23-24、core/energy/tile/TileBaseUniversalElectrical.java:34
实现接口 ISidedInventory / IFluidHandler(父类另带 IOxygenReceiver / IOxygenStorage / IDisableableMachine / IConnector / IWrenchable / IEnergyHandlerGC / IElectrical) core/tile/TileEntityOxygenStorageModule.java:25、core/energy/tile/EnergyStorageTile.java:16
所属 modid GalacticraftCore core/Constants.java:7
槽位数 1 见下节

槽位与字段

core/tile/TileEntityOxygenStorageModule.java:33:

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

getSizeInventory()(:206-209)返回 this.containingItems.length,即恒为 1 (readFromNBT 的 :115 是用 getSizeInventory() 重新分配,等长)。

槽位 用途 源码
0 氧气瓶充装位(updateEntity 对它取 IItemOxygenSupply 抽氧,:44-52) core/tile/TileEntityOxygenStorageModule.java:44-52
侧面/过滤判定 源码
getAccessibleSlotsFromSide 恒返回 {0}(四面全开) core/tile/TileEntityOxygenStorageModule.java:288-291
isItemValidForSlot 只认 slotID == 0 且物品是 IItemOxygenSupply core/tile/TileEntityOxygenStorageModule.java:283-285
canInsertItem 额外要求物品未损坏(getItemDamage() < getMaxDamage()) core/tile/TileEntityOxygenStorageModule.java:293-299
canExtractItem 只允许抽出空容器(FluidUtil.isEmptyContainer) core/tile/TileEntityOxygenStorageModule.java:301-307
槽位不装东西时机器仍然工作——氧气来源是别的机器送进氧气网络 core/tile/TileEntityOxygenStorageModule.java:176-178(shouldUseOxygen() 恒 false)

能量

⚠ 本机是纯氧气机器,电容被构造时显式清零—— core/tile/TileEntityOxygenStorageModule.java:35-39:

public TileEntityOxygenStorageModule() {
    super(OXYGEN_CAPACITY, 40);
    this.storage.setCapacity(0);
    this.storage.setMaxExtract(0);
}
项目 值 来源
GC 电力缓冲容量 0(构造时 setCapacity(0) 覆盖默认 16000) core/tile/TileEntityOxygenStorageModule.java:37
最大输入 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
最大输出 0(构造时 setMaxExtract(0)) core/tile/TileEntityOxygenStorageModule.java:38

⚠ 「容量 16000」对这个机器是错的——STANDARD_CAPACITY = 16000F 确实在 core/energy/tile/EnergyStorageTile.java:18,但 :21 的默认实例在本类构造中被 setCapacity(0) 覆盖。继承来的 IDisableableMachine / IConnector 接口仍在, 所以扳手仍能停机、仍会参与 GC 电网的连接判定,只是存不住电。

氧气数值(本篇真正的容量)

常量 / 参数 值 来源
OXYGEN_CAPACITY 60000 core/tile/TileEntityOxygenStorageModule.java:32
maxOxygen 60000(super(...) 第 1 参) core/tile/TileEntityOxygenStorageModule.java:36、core/tile/TileEntityOxygen.java:30-33
oxygenPerTick 40 core/tile/TileEntityOxygenStorageModule.java:36
OUTPUT_PER_TICK 500 core/tile/TileEntityOxygenStorageModule.java:31
充瓶速率 Math.min(oxygenPerTick * 2.5F, ...) = 100/tick core/tile/TileEntityOxygenStorageModule.java:47
GUI 面板标注值 OUTPUT_PER_TICK * 20 = 10000(按 20 tick/s 换算成「每秒」) core/client/gui/container/GuiOxygenStorageModule.java:67

⚠ 「氧气 60000」是 GC 自己的氧气单位,不是 mB 也不是 gJ; OUTPUT_PER_TICK = 500 这个常量在生产逻辑里并未被引用—— core/tile/TileEntityOxygenStorageModule.java:69-108 整段是被注释掉的旧气体网络代码, 注释里才有 OUTPUT_PER_TICK。实际发放走 produceOxygen(direction) (core/tile/TileEntityOxygen.java:184),由氧气网络按 getOxygenProvide() 决定。

tick / 特殊机制

core/tile/TileEntityOxygenStorageModule.java:42-67:

行为 频率 源码
从槽 0 的氧气瓶抽氧入罐(上限 maxOxygen) 每 tick,服务端 core/tile/TileEntityOxygenStorageModule.java:43-53
父类 TileEntityOxygen.updateEntity 的自耗氧逻辑 每 tick(但本类 shouldUseOxygen() 恒 false,实际不耗) core/tile/TileEntityOxygen.java:55-57
向氧气网络输出 每 tick,方向由方块 metadata 决定 core/tile/TileEntityOxygenStorageModule.java:65-67、:201-204
液面刻度变化时通知客户端重绘 仅在 scaledOxygenLevel 改变时 core/tile/TileEntityOxygenStorageModule.java:57-63

输出方向由 metadata 编码反解(getOxygenOutputDirection(),:201-204):

ForgeDirection.getOrientation(this.getBlockMetadata() - BlockMachine2.OXYGEN_STORAGE_MODULE_METADATA + 2 ^ 1);

即 metadata 从 8 起,每 +1 换一个朝向。getTankInfo(from)(:348-354)也用同一套编码 决定哪个面能被当作流体面看到。

GUI / Container

GUI 类 Container 类 分派处
core.client.gui.container.GuiOxygenStorageModule core.inventory.ContainerOxygenStorageModule Container core/client/gui/GuiHandler.java:145-146、Gui core/client/gui/GuiHandler.java:235-236

相关条目