网络层

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 运行时。

相关条目

  • 梯度渲染 - 唯一的具体数据包消费者
  • 物品 - 物品右键走服务端逻辑,不发包