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 |