网络层
pV=nRT 自建了一套基于 FML SimpleNetworkWrapper 的编解码层,位于 pvnrt/networking/。
通道
PVNRTNetwork(pvnrt/networking/PVNRTNetwork.java)继承 MessageToMessageCodec<FMLProxyPacket, PVNRTPacket>,单例 CHANNEL 在构造时向 NetworkRegistry.INSTANCE 注册一条以 pvnrt 为名的 FMLEmbeddedChannel。PVNRTNetwork.init() 在 preInit 调用(CommonProxy.preInit)。
类上标注了 @SuppressWarnings("unused"),并通过 EnumMap<Side, FMLEmbeddedChannel> 分别持有客户端/服务端通道,HandlerShared 为共享处理器。
类结构
| 类 | 作用 |
|---|---|
PVNRTNetwork |
通道本体 + 编码器注册表(Object2ObjectOpenHashMap<ResourceLocation, PVNRTPacketEncoder<...>>) |
PVNRTPacket |
基础包接口,定义 sendToServer / sendToPlayer / sendToPlayersWatching(world, this, chunkX, chunkZ) |
PVNRTAction |
无负载的服务端发起动作基类 |
PVNRTActionWithPayload<T> |
带负载的动作基类(客户端方向用) |
PVNRTPacketEncoder<T> |
把 T 序列化进 PVNRTPacketBuffer 的函数式接口 |
PVNRTPacketBuffer |
读写缓冲 |
PVNRTAction.sendToServer / sendToPlayer 与 PVNRTActionWithPayload 同名方法是在基类构造期间通过 CHANNEL.registerPacketEncoder(id, this) 完成自注册的。
实际在用的包
PVNRTAction 与 PVNRTActionWithPayload 没有任何子类(全仓 extends PVNRTAction 0 命中)。整个 mod 唯一注册的具体 action 是:
pvnrt:update-gradients——GradientTracker.UPDATE_GRADIENTS,服务端 → 客户端,携带 EBS 坐标与梯度缓冲。
也就是说该网络层目前是为「压强梯度同步」单点需求搭建的可扩展框架,其余能力尚未接入。
与 NEI 的关系
dependencies.gradle 声明了 runtimeOnlyNonPublishable("com.github.GTNewHorizons:NotEnoughItems:2.8.82-GTNH:dev"),但这是仅供开发运行的 dev-only 依赖(不会作为 Maven 依赖发布),且全仓 src/main 与 src/mixin 中没有任何 NEI API 引用。pV=nRT 不提供任何 NEI handler,也不依赖 NEI 运行时。