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

职责

节点是网格的最小单位。它同时扮演三个角色:

  1. 宿主引用:getGridBlock()(GridNode.java:291)返回实现 IGridBlock 的宿主 (方块 tile 用 AENetworkProxy,part 用自己的 proxy)。
  2. 边的集合:getConnections()(GridNode.java:282)返回 IReadOnlyCollection<IGridConnection>。
  3. 路径项: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)。

相关条目