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