Mixin 集合

基本信息

属性 值
注册枚举 com.cardinalstar.cubicchunks.mixin.Mixins(enum implements IMixins)
枚举条目数 76
实际注册的类引用数 79(3 个条目各含 2 个类)
@Mixin 源文件数 89(78 个已注册文件 + 11 个访问器接口)
JSON 配置文件 3 个,数组全部为空
Phase.EARLY / Phase.LATE 74 / 2
Mixin 包 com.cardinalstar.cubicchunks.mixin.early(86 个文件)、.api(3 个)

功能

CubicChunks 1.7.10 移植到 Forge 1.7.10 / MixinExtras 架构,几乎所有对原版类的改动都通过 Mixin 完成,共 76 个注册条目、89 个 @Mixin 源文件。

注册机制

⚠️ 三个 Mixin JSON 都没有 mixins / client / server 数组,真实列表在 Mixins 枚举里(mixin/Mixins.java):

配置文件 package 数组
mixins.cubicchunks.early.json com.cardinalstar.cubicchunks.mixin.early 无
mixins.cubicchunks.late.json com.cardinalstar.cubicchunks.mixin.early 无
mixins.cubicchunks.json 无 package 字段 无

三个文件都声明 required: true、minVersion: 0.8.5-GTNH、compatibilityLevel: JAVA_8,共用 refmap: mixins.cubicchunks.refmap.json;early 与 late 还带 mixinextras: {minVersion: 0.5.0}。

加载入口有两个:

  • CubicChunksCoreMod 实现 IEarlyMixinLoader,getMixinConfig() 返回 mixins.cubicchunks.early.json(asm/coremod/CubicChunksCoreMod.java:116-118),getMixins(Set<String>) 走 IMixins.getEarlyMixins(Mixins.class, loadedCoreMods)(:121-123)
  • CubicChunksLateMixins 带 @LateMixin,getMixinConfig() 返回 mixins.cubicchunks.late.json(mixin/CubicChunksLateMixins.java:14-16),getMixins(Set<String>) 走 IMixins.getLateMixins(...)(:19-21)

mixins.cubicchunks.late.json 的 package 与 early 完全相同(同为 mixin.early)——因为本移植没有单独的 mixin.late 目录,LATE 阶段的类也放在 mixin/early/ 下。这不是缺陷:Phase.LATE 由 gtnhmixins 区分,而非目录结构。

阶段分布

76 个条目中 74 个是 Phase.EARLY、2 个是 Phase.LATE。两个 LATE 条目是模组门控的:

条目 门控 用途
MIXIN_COORD_PACKER_CHUNKAPI addRequiredMod(Mods.ChunkAPI)(:332) 用 CC 兼容算法覆盖 ChunkAPI 的 CoordinatePacker
MIXIN_JOURNEYMAP_RENDER_GUARD addRequiredMod(Mods.JourneyMap)(:337) 丢弃 JourneyMap 未完成的表面渲染

全部 76 个条目都调用 setApplyIf(() -> true)(计数 76),即条目本身恒定应用;真正的条件来自 addRequiredMod / addExcludedMod。

模组门控

共 4 处条件门控(Mixins.java):

行 调用 影响条目
:102 addExcludedMod(Mods.ChunkAPI) MIXIN_S23_HEIGHTLIMITS(装了 ChunkAPI 就不打)
:282 addExcludedMod(Mods.Angelica) MIXIN_RENDERGLOBAL
:332 addRequiredMod(Mods.ChunkAPI) MIXIN_COORD_PACKER_CHUNKAPI
:337 addRequiredMod(Mods.JourneyMap) MIXIN_JOURNEYMAP_RENDER_GUARD

数值

数值名 值 统计方式
Mixins 枚举条目 76 new MixinBuilder( 出现次数(setPhase( / setApplyIf( 同为 76,可交叉验证)
注册的类引用 79 76 次调用中 3 次各传 2 个类名(:110、:170、:335)
@Mixin 源文件 89 grep -rlF '@Mixin' src/main/java --include='*.java' | wc -l
已注册顶层类名 76 79 个唯一引用减去 1 个嵌套类 MixinWorld_DeferInit$MixinWorldServer
已注册文件数 78 76 个类名中 2 个各有 common/ 与 client/ 两份(MixinWorldProvider、MixinChunkCache_HeightLimits)
访问器接口文件 11 89 − 78
Phase.EARLY / Phase.LATE 74 / 2 Phase.* 出现次数
addCommonMixins / addClientMixins / addServerMixins 56 / 17 / 3 各方法出现次数,合计 76
mixin/early / mixin/api 文件数 86 / 3 目录内 .java 计数

11 个访问器接口

89 个 @Mixin 文件减去 78 个已注册文件,剩下 11 个全是 I 前缀的访问器接口,它们不注册进 mixin 配置(注册它们没有意义),而是在别的 mixin 里被强转使用。其中 3 个确有使用者:

接口 使用点
IEventBus util/CompatHandler.java:181,201,240
IASMEventHandler util/CompatHandler.java:246-247 等 5 处
IForgeChunkManager 3 处

其余 8 个访问器接口在本移植中没有任何非注释引用:

接口 位置
IC03PacketPlayer mixin/early/common/vanillaclient/
IC07PacketPlayerDigging mixin/early/common/vanillaclient/
IC08PacketPlayerBlockPlacement mixin/early/common/vanillaclient/
IC12PacketUpdateSign mixin/early/common/vanillaclient/
IS21PacketChunkData mixin/early/common/vanillaclient/
IS22PacketMultiBlockChange mixin/early/common/vanillaclient/
INetHandlerPlayServer fixes/common/vanillaclient/
IGuiCreateWorld mixin/early/client/

这 8 个接口在 src/ 下的全部出现位置都是 server/VanillaNetworkHandler.java 里的注释代码(:30-31 的注释 import、:259-260、:412、:432、:453),其余 5 个则完全无引用。注意 :45 出现的 net.minecraft.network.play.INetHandlerPlayServer 是同名的另一个类,不是该访问器的使用。

⚠️ 按硬性约束"死代码 ≠ 已注册内容":以上 8 个接口不计为已注册的兼容能力。仓内没有任何证据表明它们是待实现功能(无 TODO 注释),故此处只陈述事实,不断言缺陷。

交互

触发 行为
模组加载 CubicChunksCoreMod 以 SortingIndex(5000) 提前注入 EARLY 阶段 74 个条目
LATE 阶段 CubicChunksLateMixins 注入 2 个门控条目
装了 ChunkAPI 应用 MIXIN_COORD_PACKER_CHUNKAPI,跳过 MIXIN_S23_HEIGHTLIMITS
装了 Angelica 跳过 MIXIN_RENDERGLOBAL
装了 JourneyMap 应用 MIXIN_JOURNEYMAP_RENDER_GUARD

相关条目