GridConnection(appeng.me.GridConnection)

基本信息

属性 值
源码 appeng/me/GridConnection.java
类声明行号 40
实现接口 IGridConnection(api/networking/)与 IPathItem(me/pathfinding/)
唯一工厂 core/Api.java:109-111
抛出的异常 SecurityConnectionException、ExistingConnectionException(均见方法签名 GridConnection.java:204-205)

职责

一条边。同时是路径项(IPathItem),因此参与通道分配 —— 这是本类最容易被 误解的地方:它不只是「连着两个节点」,它还携带这段线缆走了多少通道。

构造器做的三件事

GridConnection.java:204-265:

  1. 非自连:Preconditions.checkArgument(aNode != bNode, ...)(:208)
  2. 安全审计:Platform.securityCheck((GridNode) aNode, (GridNode) bNode) (:210)。失败时若开了 AEFeature.LogSecurityAudits 就打日志(:211-223), 然后抛 SecurityConnectionException(:225)。
  3. 查重:a.hasConnection(b) || b.hasConnection(a)(:231)。命中则抛 ExistingConnectionException,消息由 EXISTING_CONNECTION_MESSAGE 模板拼成 (:236-243)。

随后 mergeGrids(a, b)(:251)——合网就在建边这一刻发生,这也是整个 AE2 里 唯一会把两张 Grid 合成一张的地方。

方向语义

成员 行号 说明
sideA / sideB 247 / 249 两端节点
fromAtoB 248 构造时若传 null 会被规整成 ForgeDirection.UNKNOWN

⚠️ core/Api.java:110 传入的永远是 ForgeDirection.UNKNOWN,所以 getDirection(IGridNode)(GridConnection.java:75)在标准路径下恒为 UNKNOWN。 有实际方向语义的建边调用方是 P2P 隧道: parts/p2p/PartP2PTunnelME.java:180 与 parts/misc/PartToggleBus.java:224。

通道相关方法

方法 行号 语义
getUsedChannels() 123 读占用
setAdHocChannels(int) 128 ad hoc(临时)分配
incrementChannelCount(int) 155 向上累加
propagateChannelsUpwards() 169 沿路径向控制器方向回传通道数
finalizeChannels() 179 收尾,供 ChannelFinalizer 调用
getControllerRoute() / setControllerRoute(IPathItem) 133 / 138 IPathItem 契约

销毁

destroy()(GridConnection.java:88)拆边。注意 GridConnection.java:253 的注释 「a connection was destroyed RE-PATH!!」:建边会 p.repath(),拆边也会。

与 cable-part 维度的关系

本类不感知 part 类型。边的两端是任意 IGridNode。线缆只是恰好提供了 最常见的边。见 me/ 网格核心总览。

相关条目