P2PCache(appeng.me.cache.P2PCache)

基本信息

属性 值
源码 appeng/me/cache/P2PCache.java
类声明行号 33
实现接口 无(直接实现 IGridCache)
注册 core/Registration.java:548,键与实现同为 P2PCache.class

职责

P2P 隧道的频率索引。回答两个问题: 「频率 F 上有哪些输出隧道(且是这一类的)?」「频率 F 的输入隧道是哪个?」

查询 API

方法 行号 说明
getOutputs(long freq, Class<? extends PartP2PTunnel> c) 170 返回 TunnelCollection<PartP2PTunnel>,按类型过滤
getInput(long freq) 184 返回单个 PartP2PTunnel,可为 null
unbind(PartP2PTunnel) 160 解绑
updateFreq(PartP2PTunnel, long newFrequency) 145 改频

事件订阅

两个 bootComplete 重载:

方法 行号 事件
bootComplete(MENetworkBootingStatusChange) 45 启动进度
bootComplete(MENetworkPowerStatusChange) 55 供电状态

节点收集

addNode(:90)与 removeNode(:68)有实现;onUpdateTick(:65)是 空 {} —— P2P 缓存不参与 tick。

三个钩子刻意为空

onSplit(:112)、onJoin(:115)、populateGridStorage(:118) 都是空 {}。P2P 隧道是硬连接语义:频率绑定由隧道 part 自己的 NBT 承担, 拆网时两侧各自重建索引,不走存储复制。

配套数据结构(me/cache/helpers/)

类 行号 作用
TunnelCollection<T extends PartP2PTunnel> TunnelCollection.java:19 Iterable,按类型过滤;matches(:45)/ getClz(:49)
TunnelIterator<T extends PartP2PTunnel> TunnelIterator.java:18 同上过滤语义的迭代器
TunnelConnection TunnelConnection.java:16 一对 (PartP2PTunnelME, IGridConnection)
Connections Connections.java:21 延迟建链批处理器,IWorldCallable<Void>

Connections 是 P2P 的关键时序设计:markCreate()(:44)/ markDestroy()(:39)只打标记,真正的建链/拆链由 PartP2PTunnelME.updateConnections(Connections)(parts/p2p/PartP2PTunnelME.java:141) 在正确时机统一执行,避免建链过程中的半连接状态。

隧道 part 与 AEFeature 的对应

part 条目 开关
ME P2P P2P 隧道(ME) AEFeature.P2PTunnelME
物品 P2P P2P 隧道(物品) AEFeature.P2PTunnelItems
流体 P2P P2P 隧道(流体) AEFeature.P2PTunnelLiquids
压力 P2P P2P 隧道(压力) AEFeature.P2PTunnelPressure
开放计算机 P2P P2P 隧道(开放计算机) AEFeature.P2PTunnelOpenComputers

P2P 通道的注册不在 me/ 也不在 integration/,而在 core/features/registries/P2PTunnelRegistry.java(不在本分片)。

相关条目