Mixin 挂载点

pV=nRT 通过 core mod + 4 个 early mixin 改写原版类,所有 mixin 均为 Phase.EARLY 且为 addCommonMixins(客户端/服务端都加载)。

加载机制

用 GTNHLib 的 gtnhmixins 框架,不是手写 mixin 配置清单:

  • pvnrt/PVNRTCore.java 实现 IFMLLoadingPlugin + IEarlyMixinLoader,getMixinConfig() 返回 mixins.pvnrt.early.json,getMixins() 委托 IMixins.getEarlyMixins(Mixin.class, loadedCoreMods)
  • pvnrt/mixin/Mixin.java 是一个枚举,每个枚举值为一个 MixinBuilder,声明要挂哪些 mixin
  • pvnrt/mixin/LateMixinPlugin.java 实现 ILateMixinLoader,走 mixins.pvnrt.late.json

ℹ️ 三个 mixins.pvnrt*.json 的 mixins / client / server 数组都是空的——这是该框架的正常形态,mixin 类名由枚举在运行时注入,不是"忘了写注册"的缺陷。

枚举声明(pvnrt/mixin/Mixin.java)

枚举值 挂载的 mixin
WorldGasMixins MixinWorldProviderSurface
Ext MixinWorld、MixinExtendedBlockStorage
PlayerTick MixinEntityPlayerMP

各 mixin 作用

Mixin 目标类 作用
MixinWorld World 实现 WorldExt,挂 @Unique GasManager pvnrt$manager;并在 notifyBlocksOfNeighborChange 与 notifyBlockOfNeighborChange 的 HEAD 各注入一个 @Inject(用于方块变更时使周围体素失效)
MixinExtendedBlockStorage ExtendedBlockStorage 实现 EBSExt,挂 @Unique 的 byte[] pvnrt$data、EBSGasTracker pvnrt$tracker、LongArrayList updates
MixinWorldProviderSurface WorldProviderSurface 实现 WorldGasProvider,注入地表大气常量(见 大气组成)
MixinEntityPlayerMP EntityPlayerMP 在 onUpdateEntity 的 HEAD 注入:追踪玩家所在 EBS,玩家跨 EBS 时解绑/重绑 watchedTrackers,并对以玩家为中心的 3×3×3 EBS 邻域(ebsX±1, ebsY±1 且限 0 ≤ cy < 16, ebsZ±1)注册观看者,用于推送梯度

命名约定

@Unique 字段统一用 pvnrt$ 前缀(pvnrt$manager、pvnrt$data、pvnrt$tracker、pvnrt$getGasManager),避免与原版/其它 mod 字段冲突。

相关条目