组合变体
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 组合,而不是试图嵌套组合变体。