TileEntityOxygenDistributor(氧气分配器)

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

注册信息

属性 值 来源
TileEntity 注册名 Air Distributor core/GalacticraftCore.java:706
所属 modid GalacticraftCore core/Constants.java:7,@Mod 见 core/GalacticraftCore.java:160-161
关联方块 GCBlocks.oxygenDistributor = new BlockOxygenDistributor("distributor") core/blocks/GCBlocks.java:101
方块→TE 分派 无条件 new TileEntityOxygenDistributor() core/blocks/BlockOxygenDistributor.java:152-154
父类 TileEntityOxygen(→ TileBaseElectricBlock → … → EnergyStorageTile) core/tile/TileEntityOxygenDistributor.java:31-32、core/tile/TileEntityOxygen.java:19
实现接口 IInventory / ISidedInventory / IBubbleProvider core/tile/TileEntityOxygenDistributor.java:32
槽位数 2 见下节

槽位与字段

core/tile/TileEntityOxygenDistributor.java:37:

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

getSizeInventory()(:289-292)返回 this.containingItems.length → 恒为 2(:255 等长重建)。

槽位 用途 源码
0 电池槽(getBatteryInSlot() → getStackInSlot(0)) core/tile/TileEntityOxygenDistributor.java:417-420
1 氧气供给物品(IItemOxygenSupply) core/tile/TileEntityOxygenDistributor.java:174-182、:396
可接受性 源码
侧面可达槽 {0, 1} core/tile/TileEntityOxygenDistributor.java:357-359
每槽堆叠上限 64 core/tile/TileEntityOxygenDistributor.java:344-346
抽出条件:槽 0 电量耗尽、槽 1 是空容器 core/tile/TileEntityOxygenDistributor.java:374-380

能量

项目 值 来源
缓冲容量 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(构造未覆写) core/tile/TileEntityOxygenDistributor.java:44-47、core/energy/tile/EnergyStorage.java:19-21

氧气气泡(本篇核心)

本机没有 getOxygenProvide 出网逻辑,氧气只进不出: getOxygenInputDirections() = 电力输入面对面,getOxygenOutputDirections() = 空集 (:427-435)。氧气全部用来撑起一个球形气泡。

项目 值 源码
氧气容量 / 消耗速率 super(6000, 8) → 容量 6000、每 tick 耗 8 core/tile/TileEntityOxygenDistributor.java:45
气泡半径增长 供电且 storedOxygen > oxygenPerTick 时 每 tick +0.01 core/tile/TileEntityOxygenDistributor.java:188-190
气泡半径收缩 否则每 tick −0.1 core/tile/TileEntityOxygenDistributor.java:191-193
半径上下限 钳制在 0 ~ 10 core/tile/TileEntityOxygenDistributor.java:195
判定「激活」 bubbleSize >= 1 && hasEnoughEnergyToRun && storedOxygen > oxygenPerTick core/tile/TileEntityOxygenDistributor.java:213
刷新区块 激活时每 20 tick、未激活时每 4 tick 扫一次 IOxygenReliantBlock core/tile/TileEntityOxygenDistributor.java:215-235
扫描半径 floor(bubbleSize) + 4,但真正生效的判据是距离平方 ≤ bubbleSize² core/tile/TileEntityOxygenDistributor.java:217-218、:225

⚠ 增长极慢(+0.01/tick ⇒ 半径 1 需 100 tick)、收缩极快(−0.1/tick ⇒ 10 tick 清空), 这是 GC 氧气系统的核心手感:断电后气泡几乎立刻塌掉。

  • shouldUseEnergy() = storedOxygen > oxygenPerTick(:407-410), shouldUseOxygen() = hasEnoughEnergyToRun(:422-425)——两者互为反向依赖, 展开看是「有电才耗氧、氧气够才要电」。
  • 全局 loadedTiles(:38)在 validate() 注册、onChunkUnload() / invalidate() 注销(:50-87); 专用服务器还会把整张列表发给客户端(:102-117),客户端在 readExtraNetworkedData 清空重建(:146-160)。

GUI / Container

GUI 类 Container 类 分派处(core/client/gui/GuiHandler.java)
core.client.gui.container.GuiOxygenDistributor core.inventory.ContainerOxygenDistributor Container :119-120、Gui :207-208

相关条目