进度变体

改写配方、奖励与难度规则的变体。与世界生成变体不同,这些大多在运行时(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() 之外。

相关条目