TileEntityOxygenSealer(氧气密封器)

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

注册信息

属性 值 来源
TileEntity 注册名 Air Sealer core/GalacticraftCore.java:718
所属 modid GalacticraftCore core/Constants.java:7,@Mod 见 core/GalacticraftCore.java:160-161
关联方块 GCBlocks.oxygenSealer = new BlockOxygenSealer("sealer") core/blocks/GCBlocks.java:114
方块→TE 分派 无条件 new TileEntityOxygenSealer() core/blocks/BlockOxygenSealer.java:134-136
父类 TileEntityOxygen(→ TileBaseElectricBlock → … → EnergyStorageTile) core/tile/TileEntityOxygenSealer.java:30、core/tile/TileEntityOxygen.java:19
实现接口 IInventory / ISidedInventory core/tile/TileEntityOxygenSealer.java:30
槽位数 3 见下节

槽位与字段

core/tile/TileEntityOxygenSealer.java:42:

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

getSizeInventory()(:229-232)返回 this.containingItems.length → 恒为 3(:199 等长重建)。

槽位 用途 源码
0 电池槽(getBatteryInSlot() → getStackInSlot(0)) core/tile/TileEntityOxygenSealer.java:362-365
1 氧气供给物品(IItemOxygenSupply) core/tile/TileEntityOxygenSealer.java:130-138、:343
2 热控模块:GCItems.basicItem 且 getItemDamage() == 20 core/tile/TileEntityOxygenSealer.java:119-125、:345
可接受性 源码
侧面可达槽只有 {0, 1}——槽 2 不对机器开放 core/tile/TileEntityOxygenSealer.java:302-305
每槽堆叠上限 64 core/tile/TileEntityOxygenSealer.java:283-286
canExtractItem 对槽 2 落到 default -> false core/tile/TileEntityOxygenSealer.java:320-327

能量

本类是本批唯一覆写了 setCapacity 的机器:

项目 值 来源
缓冲容量 32000 gJ(STANDARD_CAPACITY * 2 = 16000 × 2) core/tile/TileEntityOxygenSealer.java:65-67、core/energy/tile/EnergyStorageTile.java:18
最大输入 25 gJ/t(显式 setMaxReceive(25.0F),与默认两参构造展开值一致) core/tile/TileEntityOxygenSealer.java:64、core/energy/tile/EnergyStorage.java:19-21
最大输出(常态) 5 gJ/t(注释自述「Half of a standard machine’s power draw」) core/tile/TileEntityOxygenSealer.java:63
最大输出(开热控时) 20 gJ/t,即四倍 core/tile/TileEntityOxygenSealer.java:141-143

⚠ 热控模块(槽 2 的 basicItem damage 20)会把输出从 5 提到 20, 且切换到 5 时会顺带重置 setMaxReceive(25.0F)(:144-147)。

tick / 特殊机制(本篇核心)

密封是多线程 + 轮转队列算的,不是每 tick。

项目 值 源码
氧气容量 10000(super(10000, UNSEALED_OXYGENPERTICK)) core/tile/TileEntityOxygenSealer.java:61
未密封耗氧 12 / tick(UNSEALED_OXYGENPERTICK) core/tile/TileEntityOxygenSealer.java:58
已密封耗氧 2 / tick——密封后才省氧 core/tile/TileEntityOxygenSealer.java:150
供给物品抽气 每 tick 12 × 2.5 = 30 core/tile/TileEntityOxygenSealer.java:133
找漏气点预算 getFindSealChecks() 返回 1250;上方被非透气方块挡住时返回 0 core/tile/TileEntityOxygenSealer.java:102-117
轮转间隔 threadCooldownTotal = 75 + countEntities(countEntities = 上一 tick 被更新的密封器总数) core/tile/TileEntityOxygenSealer.java:166、:188-192
初始冷却 validate() 时 stopSealThreadCooldown = 126 + countEntities core/tile/TileEntityOxygenSealer.java:76
「正在算」标志 threadSeal.looping → calculatingSealed = active;算完才写 sealed core/tile/TileEntityOxygenSealer.java:174-181
激活条件 storedOxygen >= 1 && hasEnoughEnergyToRun && !disabled core/tile/TileEntityOxygenSealer.java:158

⚠ 本类构造时 noRedstoneControl = true(:62)——不受红石控制; 但 shouldUseEnergy() 又判 !getDisabled(0)(:353-355),即扳手仍可停机。

  • 全局 loadedTiles 列表在 validate / invalidate / onChunkUnload 三处增删(:70-93)。
  • 氧气方向:输入 = 电力输入面的对面,输出空集(:372-380)——密封器不出网。

GUI / Container

GUI 类 Container 类 分派处(core/client/gui/GuiHandler.java)
core.client.gui.container.GuiOxygenSealer core.inventory.ContainerOxygenSealer Container :123-124、Gui :211-212

相关条目