组合变体

4 个 compositionVariant = true 的变体,每个都是若干子变体的预设组合。

NORMAL

Base Pack —— 什么都不做的基线组合变体,composedOf 与 incompatible 都是空数组。

它是 GeneralConfig.activeVariants 的默认值(@Config.DefaultStringList({ "NORMAL" }))。本地化描述明确写道:“You cannot turn this off, why would you do that anyways? :P”。

SKYBLOCK

Skyblock —— 组合变体,无 VariantLoader 实现类(纯 flag 组合):

关系 成员
composedOf VOID_WORLD、VOID_ISLAND
incompatible NO_RECIPE_ADDITIONS、SUPERFLAT

即:全维度虚空 + 虚空岛出生,同时禁止「无配方新增」与「超平坦」。

本地化描述称其为 “Garden of Grind, but with less emphasis on the grind”,提供全虚空维度的 skyblock 替代方案,带资源生成工具与一个起始小岛,“You even get a tree, hurray!”

GARDEN_OF_GRIND

Garden of Grind —— 组合变体,有实现类 variants/invasive/GardenOfGrind.java:

关系 成员
composedOf VOID_WORLD、NO_RECIPE_ADDITIONS、NO_ROCKET
incompatible SUPERFLAT

loadVariant() 除置位 hasLoaded 外还改写两处 GregTech 配置:

Worldgen.endAsteroids.generateEndAsteroids = false;  // 关闭末地 asteroids
GTMod.proxy.mMaxEqualEntitiesAtOneSpot = -1;         // 关闭实体挤压

源码注释解释了为何写在 loader 而非 mixin:“the hodgepodge mixins have been ported here, because early mixins are hard to toggle config on.”

variantRecipes() 明确不新增任何配方(注释:“travel to dimensions is not restricted”),并提到混沌碎片可以用命令重新开启。

DIMLOCKED

Dimlocked —— 组合变体,有实现类 variants/invasive/DimLocked.java:

关系 成员
composedOf CUSTOM_DIM_START、NO_ROCKET
incompatible NO_RECIPE_ADDITIONS

详细行为见维度变体。本地化描述指出它会为被锁定维度缺失的太空资源提供替代来源。

组合的互斥继承

VariantNames 构造时会把组合变体所有子变体的 incompatible 并入自身:

for (var name : i.incompatible) {
    addIncompatibility(this, name);
}

例如 GARDEN_OF_GRIND 含 VOID_ISLAND,而 VOID_ISLAND 声明互斥 VOID_WORLD / SUPERFLAT,这些互斥会自动传染到 GARDEN_OF_GRIND。

反向关系 partOf 也在构造时填充,activeContains() 依赖它判断「子变体是否被某个已激活的组合变体包含」。

组合 vs 子变体的选择建议

源码注释给出了一条明确规则:

“I swear to god DO NOT NEST COMPOSITES”

即组合变体不能互相嵌套。若想要「Skyblock 且无配方新增」,应使用 GARDEN_OF_GRIND + VOID_ISLAND 组合,而不是试图嵌套组合变体。

相关条目