GridNode(appeng.me.GridNode)
基本信息
| 属性 | 值 |
|---|---|
| 源码 | appeng/me/GridNode.java |
| 类声明行号 | 55 |
| 实现接口 | IGridNode(api/networking/)与 IPathItem(me/pathfinding/) |
| 构造器 | GridNode.java:98,唯一实例化点 core/Api.java:105 |
| 侧限制 | core/Api.java:101-103 —— 客户端调用直接抛 IllegalStateException |
职责
节点是网格的最小单位。它同时扮演三个角色:
- 宿主引用:
getGridBlock()(GridNode.java:291)返回实现IGridBlock的宿主 (方块 tile 用AENetworkProxy,part 用自己的 proxy)。 - 边的集合:
getConnections()(GridNode.java:282)返回IReadOnlyCollection<IGridConnection>。 - 路径项:
IPathItem的实现让节点可参与通道分配,见 pathfinding 总览。
一个节点何时「属于」一张网
getGrid()(GridNode.java:222)返回的是 IGrid(本类内部存 Grid)。
未接入时返回 null——这正是 AENetworkProxy.getGrid() 抛
GridAccessException 的判据(见 AENetworkProxy)。
通道计数
| 方法 | 行号 | 说明 |
|---|---|---|
usedChannels() |
110 | 向上累加给父节点用 |
getUsedChannels() |
358 | 读取当前占用 |
meetsChannelRequirements() |
337 | 占用是否已超需求 |
setPlayerID(int) / getPlayerID() |
352 / 347 | 归属玩家 ID,用于安全审计日志 |
持久化
saveToNBT(String, NBTTagCompound)(GridNode.java:322)loadFromNBT(String, NBTTagCompound)(GridNode.java:307)
两者都接受一个 String name 前缀,说明节点的 NBT 是按「宿主名 + 序号」分段写入的,
不是单块固定布局。
生命周期钩子
| 钩子 | 行号 | 作用 |
|---|---|---|
beginVisit(IGridVisitor) |
159 | 供 GridPropagator / GridSplitDetector 遍历 |
updateState() |
196 | 宿主形状变化时重算;CableBusContainer.updateConnections()(parts/CableBusContainer.java:484)会调它 |
destroy() |
248 | 拆链、脱离网 |
getConnectedSides() |
273 | EnumSet<ForgeDirection>,供 方块线缆总线 渲染与邻接判定 |
isActive() |
296 | 当前是否连上了网 |
playerID 与安全审计
GridConnection 构造器在拒绝建边时会打印双方 getPlayerID()
(me/GridConnection.java:212-223),且受开关门控:
AEConfig.instance.isFeatureEnabled(AEFeature.LogSecurityAudits)
(GridConnection.java:211)。对应 feature 条目:
AEFeature.LogSecurityAudits。
注意
GridNode自己不做格子 / 位置校验;位置信息由IGridBlock.getLocation()提供, 校验发生在 GridConnection 与GridNode.beginVisit之外。GridStorage与节点是一对多:多个节点共享同一个IGridStorage(Grid.add()的gridNode.setGridStorage(this.myStorage),Grid.java:173)。