Mixin 挂载点
Variable Horizons 用 GTNHLibMixins 框架挂载 19 个 MixinBuilder,覆盖 23 个 mixin 类(20 个 Phase.EARLY + 3 个 Phase.LATE)。
加载机制
mixin/EarlyMixinLoader.java——IEarlyMixinLoadermixin/LateMixinLoader.java——ILateMixinLoadermixin/Mixins.java——public enum Mixins implements IMixins,每个枚举值一个MixinBuilderMixinBuilder的条件式决定变体激活时是否挂载该 mixin
Mixins 枚举末尾还声明了需要识别的 coremod:
ENDLESSIDS("com.falsepattern.endlessids.asm.EndlessIDsCore", "endlessids"),
GALACTICRAFT_CORE("GalacticraftCore"),
GREGTECH("gregtech"),
BOTANIA("Botania"),
RWG(null, "RWG", "rwg.world.ChunkGeneratorRealistic");
19 个 MixinBuilder
Phase.EARLY(16 个)
| MixinBuilder | 挂载的 mixin 类 |
|---|---|
DISABLE_CHUNK_TERRAIN_GENERATION |
MixinChunkProviderServer_DisableTerrain |
DISABLE_CHUNK_TERRAIN_GENERATION_ENDLESS_IDS |
MixinChunkProviderServer_DisableTerrain_EndlessIDs |
DISABLE_WORLD_TYPE_CHUNK_POPULATION |
MixinChunkProviderServer_DisablePopulation、AccessorChunkProviderGenerate |
DISABLE_MODDED_CHUNK_POPULATION |
MixinChunkProviderServer_DisableModGeneration |
SUPERFLAT_CHUNK_TERRAIN_GENERATION |
MixinChunkProviderServer_ForceSuperflatTerrain |
SUPERFLAT_CHUNK_TERRAIN_GENERATION_ENDLESS_IDS |
MixinChunkProviderServer_ForceSuperflatTerrain_EndlessIDs |
SKYGRID_CHUNK_TERRAIN_GENERATION |
MixinChunkProviderServer_ForceSkygridTerrain |
SKYGRID_CHUNK_TERRAIN_GENERATION_ENDLESS_IDS |
MixinChunkProviderServer_ForceSkygridTerrain_EndlessIDs |
ALLOW_VILLAGE_GENERATION_IN_ANY_BIOME |
MixinMapGenVillage_AllowAnyBiome、MixinStructureVillagePieces_AllowAnyBiome |
ALLOW_RESPAWN_IN_DIMENSION |
MixinWorldProvider_AllowRespawnInDimension |
SET_INITIAL_SPAWN_DIMENSION |
MixinServerConfigurationManager_ChangeInitialSpawnDimension |
SET_EXACT_SPAWN_LOCATION |
MixinWorldProvider_SetExactSpawn |
LOCK_TO_DIMENSION_TRAVEL_TO_DIM |
MixinEntityPlayerMP_LockDimension |
LOCK_TO_DIMENSION_TRANSFER_PLAYER_TO_DIM |
MixinServerConfigurationManager_LockDimension |
INCREASE_SLIME_SPAWNING_HEIGHT |
MixinEntitySlime_ExtendedSpawnRange |
REPLACE_ALL_CHUNK_BLOCKS |
MixinChunkProviderServer_ReplaceBlocks、MixinChunk_ReplaceGeneratedBlocks |
Phase.LATE(3 个)
| MixinBuilder | 挂载的 mixin 类 |
|---|---|
DISABLE_CELESTIAL_SELECTION |
MixinWorldUtil_DisableCelestialSelection(禁用 GC 行星地图) |
ADD_SEMINING_RECIPE |
MixinSpaceMiningRecipes_AddSEminingrecipe |
REMOVE_ORECHID_IGNEM_DIMRESTRICTION |
MixinSubTileOrechidIgnem_LetOrechidIgnemRunBesidesNether |
20 + 3 = 23 个 mixin 类全部被这 19 个 builder 引用,无孤儿类。
条件写法
builder 通过 setApplyIf(BooleanSupplier) 决定变体激活时是否挂载。全部 19 个 builder 的条件都同时检查了 GeneralConfig.disableVariants,典型形态:
.setApplyIf(() -> VariantNames.activeContains(VariantNames.SUPERFLAT.id) && !GeneralConfig.disableVariants)
activeContains 会自动把「子变体被组合变体包含」也算作激活,因此条件里只需写子变体 id。
部分 builder 还用 addRequiredMod(TargetedMod.X) 声明前置模组,缺失时该 mixin 不挂载:
| TargetedMod | 对应 Mixins 枚举尾部常量 |
|---|---|
GALACTICRAFT_CORE |
"GalacticraftCore" |
GREGTECH |
"gregtech" |
BOTANIA |
"Botania" |
ENDLESSIDS |
"com.falsepattern.endlessids.asm.EndlessIDsCore", "endlessids" |
RWG |
null(不指定容器类,仅按 "RWG" / "rwg.world.ChunkGeneratorRealistic" 识别) |
条件判断的变体归属
| Builder 条件检查的变体 | 附加条件 |
|---|---|
DISABLE_CHUNK_TERRAIN_GENERATION |
VOID_WORLD 或 VOID_ISLAND |
DISABLE_CHUNK_TERRAIN_GENERATION_ENDLESS_IDS |
VOID_WORLD 或 VOID_ISLAND |
DISABLE_WORLD_TYPE_CHUNK_POPULATION |
同上 |
DISABLE_MODDED_CHUNK_POPULATION |
VOID_WORLD 或 VOID_ISLAND |
SUPERFLAT_CHUNK_TERRAIN_GENERATION(+_ENDLESS_IDS) |
SUPERFLAT |
SKYGRID_CHUNK_TERRAIN_GENERATION(+_ENDLESS_IDS) |
SKYGRID |
ALLOW_VILLAGE_GENERATION_IN_ANY_BIOME |
SUPERFLAT |
ALLOW_RESPAWN_IN_DIMENSION |
CUSTOM_DIM_START 或 VOID_ISLAND |
SET_INITIAL_SPAWN_DIMENSION |
CUSTOM_DIM_START |
SET_EXACT_SPAWN_LOCATION |
SKYGRID 或 VOID_ISLAND |
LOCK_TO_DIMENSION_TRAVEL_TO_DIM |
DIMLOCKED |
LOCK_TO_DIMENSION_TRANSFER_PLAYER_TO_DIM |
DIMLOCKED |
INCREASE_SLIME_SPAWNING_HEIGHT |
SUPERFLAT |
REPLACE_ALL_CHUNK_BLOCKS |
MONOBLOCK |
DISABLE_CELESTIAL_SELECTION |
NO_ROCKET + 需 GALACTICRAFT_CORE |
ADD_SEMINING_RECIPE |
DIMLOCKED + startingDimID != 100 + 需 GREGTECH |
REMOVE_ORECHID_IGNEM_DIMRESTRICTION |
DIMLOCKED 且 NO_QUEST_REWARDS + startingDimID != -1 + 需 BOTANIA |
⚠️
disableVariants只在Mixins.java中被引用(全仓其余位置 0 命中)。这意味着由VariantLoader在运行时施加的改动(ChancedRecipes、InfinitePower、NoPollution、CrimsonApocalypse、AlteredRecipeTime)不受总开关保护——见 源码缺陷。
被改写的原版/第三方类
| 目标类 | 来源 |
|---|---|
ChunkProviderServer |
原版 |
Chunk、ExtendedBlockStorage |
原版 |
MapGenVillage、StructureVillagePieces |
原版 |
WorldProvider |
原版 |
ServerConfigurationManager |
原版 |
EntityPlayerMP、EntitySlime |
原版 |
ChunkGeneratorRealistic |
Realistic World Gen |
SubTileOrechidIgnem |
Botania |
WorldUtil |
Galacticraft |
SpaceMiningRecipes |
Galacticraft |
GTRecipe / Worldgen |
GregTech(经配置与代码直接调用,非 mixin) |