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)。

相关条目