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:
- 非自连:
Preconditions.checkArgument(aNode != bNode, ...)(:208) - 安全审计:
Platform.securityCheck((GridNode) aNode, (GridNode) bNode)(:210)。失败时若开了AEFeature.LogSecurityAudits就打日志(:211-223), 然后抛SecurityConnectionException(:225)。 - 查重:
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/ 网格核心总览。