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 |
相关条目
- 模组兼容与集成 - 门控条件涉及的模组
- CubicChunks 网络通道 - 打包层被 Mixin 改写
- Vanilla + Cubic 世界类型 -
MixinWorldProvider等对世界类型的补丁