TileEntityHydrogenPipe(氢气管道)
事实基准:
/Users/evlos/a/mirror/Galacticraft(master,minecraftVersion = 1.7.10)逐行读源码。
注册信息
| 属性 | 值 | 来源 |
|---|---|---|
| TileEntity 注册名 | Hydrogen Pipe |
planets/mars/MarsModule.java:251 |
| 所属 modid | GalacticraftMars |
core/Constants.java:8,@Mod 见 planets/GalacticraftPlanets.java:37-38 |
| 注册方法入口 | MarsModule.registerTileEntities(),由 planets/mars/MarsModule.java:153 调用 |
planets/mars/MarsModule.java:241-252 |
| 关联方块 | micdoodle8.mods.galacticraft.planets.mars.blocks.BlockHydrogenPipe |
planets/mars/blocks/BlockHydrogenPipe.java:93-96 |
| 父类 | net.minecraft.tileentity.TileEntity |
planets/mars/tile/TileEntityHydrogenPipe.java:17 |
| 实现接口 | ITransmitter |
planets/mars/tile/TileEntityHydrogenPipe.java:17 |
| 槽位数 | 无(不实现 IInventory,源码中不存在 getSizeInventory()) |
planets/mars/tile/TileEntityHydrogenPipe.java:1-140 |
⚠ 父类是原版 TileEntity,不是 TileEntityAdvanced,更不是 TileEntityMulti——
它没有 readFromNBT / writeToNBT 覆写,也不写任何 NBT。
它不是 GC 电气/多方块体系的一员,而是纯 ITransmitter 网络节点。
⚠ 注册不在 GalacticraftCore.java,而在 planets/mars/MarsModule.java:241-252。
modid 取自 Constants.MOD_ID_PLANETS = "GalacticraftMars"(core/Constants.java:8)。
ITransmitter 本身继承 INetworkProvider 与 INetworkConnection
(api/transmission/tile/ITransmitter.java:6),因此 canConnect /
getNetwork / refresh 等方法来自这一串接口。
字段
planets/mars/tile/TileEntityHydrogenPipe.java:19-21:
| 字段 | 类型 | 含义 | 来源 |
|---|---|---|---|
network |
IGridNetwork |
所属氢气网 | planets/mars/tile/TileEntityHydrogenPipe.java:19 |
adjacentConnections |
TileEntity[],初值 null |
相邻连接缓存(懒计算) | planets/mars/tile/TileEntityHydrogenPipe.java:21 |
网络语义(本篇核心)
| 方法 | 行为 | 来源 |
|---|---|---|
getNetworkType() |
恒 NetworkType.HYDROGEN |
planets/mars/tile/TileEntityHydrogenPipe.java:136-139 |
canConnect(direction, type) |
只认 type == NetworkType.HYDROGEN;direction 传什么都返回 true |
planets/mars/tile/TileEntityHydrogenPipe.java:119-122 |
getNetwork() |
network == null 时先 resetNetwork() |
planets/mars/tile/TileEntityHydrogenPipe.java:49-56 |
resetNetwork() |
新建 HydrogenNetwork 并把自己加为唯一 transmitter |
planets/mars/tile/TileEntityHydrogenPipe.java:61-65 |
onNetworkChanged() |
空实现 | planets/mars/tile/TileEntityHydrogenPipe.java:58-59 |
getAdjacentHydrogenConnections(:104-117)按 ForgeDirection.VALID_DIRECTIONS
(6 个方向)遍历,对每个方向取相邻 TE,要求它是 IConnector 且
canConnect(direction.getOpposite(), NetworkType.HYDROGEN) 为真,
存进长度 6 的数组(:105、:110-112)。结果由 getAdjacentConnections()
(:92-102)缓存进 adjacentConnections。
⚠ 本类自身是氢气网,但连接判定要看邻居。
水电解器(TileEntityElectrolyzer.canConnect,
planets/mars/tile/TileEntityElectrolyzer.java:553-555)只从氢气输出面接入,
所以氢气管必须贴对方向才连得上。
tick
⚠ 本类没有 updateEntity()——全文 140 行里不存在该方法。
它靠服务端 tick 队列驱动(TickHandlerServer):
| 钩子 | 行为 | 来源 |
|---|---|---|
canUpdate() |
服务端 true、客户端 false |
planets/mars/tile/TileEntityHydrogenPipe.java:23-26 |
validate() |
服务端把自己加进 TickHandlerServer.hydrogenTransmitterUpdates;客户端触发方块更新 |
planets/mars/tile/TileEntityHydrogenPipe.java:28-38 |
invalidate() |
服务端 this.getNetwork().split(this) |
planets/mars/tile/TileEntityHydrogenPipe.java:40-47 |
refresh() |
扫 6 面合并相邻网络后 network.refresh() |
planets/mars/tile/TileEntityHydrogenPipe.java:72-90 |
⚠ refresh()(:80)的判定是
tileEntity.getClass() == this.getClass() && tileEntity instanceof INetworkProvider。
getClass() == this.getClass() 是恒真的写法(两边同一个对象比较),
真正的筛选实际只靠 instanceof INetworkProvider——源码里的冗余条件,不要把它
读成「只连同类管道」。
能量 / 物品 / GUI
| 项目 | 情况 | 依据 |
|---|---|---|
| 物品槽 | 无 | 类声明 planets/mars/tile/TileEntityHydrogenPipe.java:17 不带 IInventory |
| 能量存储 | 无(不继承 EnergyStorageTile) |
同上 |
| GC 电力网 | 不参与(canConnect 只放行 HYDROGEN) |
planets/mars/tile/TileEntityHydrogenPipe.java:119-122 |
| GUI / Container | 无 | 源码中无 openGui,GC 的 GuiHandler 无对应分支 |
渲染包围盒就是单格(:125-134)。