Mixin 挂载点

Variable Horizons 用 GTNHLibMixins 框架挂载 19 个 MixinBuilder,覆盖 23 个 mixin 类(20 个 Phase.EARLY + 3 个 Phase.LATE)。

加载机制

  • mixin/EarlyMixinLoader.java —— IEarlyMixinLoader
  • mixin/LateMixinLoader.java —— ILateMixinLoader
  • mixin/Mixins.java —— public enum Mixins implements IMixins,每个枚举值一个 MixinBuilder
  • MixinBuilder 的条件式决定变体激活时是否挂载该 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)

相关条目