TileEntityOxygenPipe(氧气管道)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Oxygen Pipe |
core/GalacticraftCore.java:708 |
| 所属 modid | GalacticraftCore |
core/Constants.java:7,@Mod 见 core/GalacticraftCore.java:160-161 |
| 关联方块 | GCBlocks.oxygenPipe = new BlockOxygenPipe("oxygenPipe") |
core/blocks/GCBlocks.java:102 |
| 方块→TE 分派 | createNewTileEntity(非 createTileEntity)→ new TileEntityOxygenPipe() |
core/blocks/BlockOxygenPipe.java:181-183 |
| 父类 | TileEntityOxygenTransmitter(→ TileEntityAdvanced → 原版 TileEntity) |
core/tile/TileEntityOxygenPipe.java:17、core/tile/TileEntityOxygenTransmitter.java:19 |
| 实现接口 | IColorable(父类 ITransmitter) |
core/tile/TileEntityOxygenPipe.java:17、core/tile/TileEntityOxygenTransmitter.java:19 |
| 槽位数 | 无(不实现 IInventory,全类无 getSizeInventory()) |
core/tile/TileEntityOxygenPipe.java:1-130 |
⚠ 同一个 TE 类被三个方块复用,不能只看 oxygenPipe:
| 方块 | 分派处 |
|---|---|
BlockOxygenPipe(独立氧气管) |
core/blocks/BlockOxygenPipe.java:181-183 |
BlockEnclosed(包覆式,metadata = OXYGEN_PIPE.getMetadata() = 1) |
core/blocks/BlockEnclosed.java:245-249、:45 |
BlockWalkway(小行星带栈桥,方块本身属 GalacticraftMars modid) |
planets/asteroids/blocks/BlockWalkway.java:104 |
槽位与字段
无槽位。 唯一自有字段是颜色(core/tile/TileEntityOxygenPipe.java:19-22):
@NetworkedField(targetSide = Side.CLIENT)
public byte pipeColor = 15;
private byte lastPipeColor = -1;
pipeColor 默认 15(未染色),NBT 键 pipeColor(:108-119)。
能量
无。 父类链为 TileEntityOxygenTransmitter → TileEntityAdvanced → 原版 TileEntity,
不含 EnergyStorageTile,因此没有容量 / maxReceive / maxExtract(core/tile/TileEntityOxygenTransmitter.java:19)。
tick / 特殊机制(本篇核心)
氧气管是染色隔离网络——颜色不同的管道互不连通。
| 行为 | 值 / 频率 | 源码 |
|---|---|---|
| 连接判定 | 仅 NetworkType.OXYGEN;若相邻方块也是 IColorable,必须同色才连 |
core/tile/TileEntityOxygenPipe.java:25-37 |
canUpdate() |
只在服务端更新 | core/tile/TileEntityOxygenPipe.java:40-42 |
| 颜色变化同步 | 每 60 tick 检查一次,且仅当颜色真的变了才发 PacketDynamic |
core/tile/TileEntityOxygenPipe.java:48-52 |
| 染色后服务端动作 | getNetwork().split(this) 再 resetNetwork()——拆网重连 |
core/tile/TileEntityOxygenPipe.java:86-89 |
| 染色后客户端动作 | 标记方块重渲染 | core/tile/TileEntityOxygenPipe.java:84-85、:100 |
| 相邻色变回调 | 标记更新 + 服务端 refresh() |
core/tile/TileEntityOxygenPipe.java:99-105 |
| 网络参数 | 值 | 源码 |
|---|---|---|
getPacketRange() |
12.0 | core/tile/TileEntityOxygenPipe.java:56-58 |
getPacketCooldown() |
5 | core/tile/TileEntityOxygenPipe.java:61-63 |
isNetworkedTile() |
true | core/tile/TileEntityOxygenPipe.java:66-68 |
染色入口在方块侧:手持 ItemDye 右键(core/blocks/BlockOxygenPipe.java:93-101),
掉落物颜色随机(:44-50)。相邻同色管渲染用 pipeIcons[15],
异色则各用自己的色板(:83-89)。