进度变体
改写配方、奖励与难度规则的变体。与世界生成变体不同,这些大多在运行时(serverStarted)生效。
NO_ROCKET
No Rocket —— 移除全部火箭配方,玩家无法进入太空,必须另寻太空专属资源的来源。实现类 variants/runtime/NoRocket.java。
其 late mixin DISABLE_CELESTIAL_SELECTION(MixinWorldUtil_DisableCelestialSelection)同时禁用了 Galacticraft 的行星选择地图,条件为 activeContains(NO_ROCKET) 且需 GALACTICRAFT_CORE 存在。
它是 DIMLOCKED 组合变体的组成部分之一。
NO_QUEST_REWARDS
No Quest Rewards —— 关闭全部任务奖励。实现类 variants/runtime/NoQuestRewards.java。本 wiki 已收录 betterquesting 分类。
NO_RECIPE_ADDITIONS
No Recipe Additions —— 纯粹的标志位变体,没有 VariantLoader 实现类。作用是让其它变体关闭自己「新增配方」的行为,自身不做任何事。
其本地化描述是 "If you see this, something went wrong."(en_US.lang),即作者把它当作不应被单独启用的内部开关。
NO_POLLUTION
Squeaky Clean —— 关闭 GregTech 污染系统。实现类 variants/runtime/NoPollution.java:
PollutionConfig.pollution = false; // 同时用于关闭 tooltip 注册
注意本变体被排除在 getActiveVariantsToCheck() 之外(与 CHANCED_RECIPES、CRIMSON_APOCALYPSE 一起),因为它是直接改 GT 配置而非 mixin 条件。
INFINITE_POWER
Infinite Power —— 无线电网 + 全部无线 Hatch。实现类 variants/runtime/InfinitePower.java,在 PlayerEvent.PlayerLoggedInEvent 中处理:
- 调用
gregtech.common.misc.WirelessNetworkManager - 为每个无线 Hatch 注册与普通 E-Hatch 一一对应的配方
- 覆盖材料列表包含
Iron、Aluminium、StainlessSteel、…、Iridium、Osmium、Neutronium、Infinity、TranscendentMetal - 源码注释明确写着
// skip MAX(即不含Neutronium之后的 MAX 级材料)
CommonProxy.serverStarted 中该变体激活时会向 FML 总线注册相应 handler。
CHANCED_RECIPES
Chanced Recipes —— 把 GT 配方的确定性产出/投入改为概率性。实现类 variants/runtime/ChancedRecipes.java,同样在玩家登录事件触发。
它先用 4 个 Map<GTRecipe, int[]> 缓存原始概率数组:
| 缓存 | 对应配置 |
|---|---|
originalRecipeOutputChances |
outputChanceMultiplier / outputChanceRandom |
originalRecipeInputChances |
inputChanceMultiplier / inputChanceRandom |
originalRecipeFluidOutputChances |
fluidOutputChanceMultiplier |
originalRecipeFluidInputChances |
fluidInputChanceMultiplier |
处理顺序是 normalizeChanceArrays()(归一化)→ modifyRecipeChances(...)(按 4 个乘数 + 2 个随机开关改写)。所有乘数默认 1f,两个 Random 开关默认 false,即默认状态下不改变任何配方。
ALTERED_RECIPE_TIME
Altered Recipe Times —— 全局配方时间乘数。对外 id 是 ALTERED_TIME(枚举名为 ALTERED_RECIPE_TIME)。实现类 variants/runtime/AlteredRecipeTime.java,通过 applyToServer() 应用 GeneralConfig.recipeTimeMultiplier(默认 1f)。
变体激活时会额外注册 /alterrecipetimes 命令,见 命令。
ALTERED_EFFICIENCY / CHEAP_MODE / EXPENSIVE_MODE
这三个均无 VariantLoader 实现类,只作为标志位存在,由别处读取 GeneralConfig.efficiencyMultiplier(默认 1f)。默认状态下三者都不改变任何行为。
CRIMSON_APOCALYPSE
Crimson Apocalypse —— 难度调整。实现类 variants/runtime/CrimsonApocalypse.java:
modifyInfernalMobDifficulty(MobConfig.infernalMobDifficulty)—— 调整地狱爬行者难度applyDifficultyToServer()中server.func_147139_a(EnumDifficulty.HARD)—— 服务端强制 HARD- 客户端
Minecraft.getMinecraft().gameSettings.difficulty = EnumDifficulty.HARD - 通过
isDifficultyButton(GuiButton)(b.id == 108或displayString以options.difficulty开头)屏蔽难度选择按钮
本变体同样被排除在 getActiveVariantsToCheck() 之外。