选择 GUI

selectionUI/VariantGuiMain.java 是 Variable Horizons 的图形化变体切换界面,挂在 Minecraft 的世界选择界面上。

定位

README 的说法是:

“Variants are easily configurable using the new gui in the singleplayer world selection screen, though, servers will unfortunately have to use either the /variants commands or change the active variants in the config.”

即:

  • 单人:可在世界选择界面直接勾选变体
  • 服务器:只能用 /variants 命令或手改 GeneralConfig.activeVariants

它与 /variants 命令是并存的第二个切换入口,最终都写 GeneralConfig.activeVariants。

提供的能力

除了勾选变体,GUI 还直接暴露了一批数值配置,源码中可见的绑定点包括:

GUI 元素 对应配置 证据
配方时间乘数 GeneralConfig.recipeTimeMultiplier —
机器效率乘数 GeneralConfig.efficiencyMultiplier VariantGuiMain.java:400 写入 String.valueOf(...),:403 回写 Float.parseFloat(text)
4 个概率乘数 output/input/fluidOutput/fluidInputChanceMultiplier —

变更检测

VariantGuiMain.java:84 先把 GeneralConfig.efficiencyMultiplier 存进 initialEfficiencyMultiplier,:92 处用

if (initialEfficiencyMultiplier != GeneralConfig.efficiencyMultiplier) return true;

作为 hasChanged() 的一部分——即 GUI 通过快照对比判断用户是否动过配置,进而决定要不要写盘 / 触发重启提示。

⚠️ 已知问题

efficiencyMultiplier 只被这个 GUI 读写,没有任何 VariantLoader 或 mixin 消费它。也就是说在 GUI 里调整该值:

  • 会触发 hasChanged() 为 true
  • 值会被写进配置文件
  • 但不会改变任何实际游戏行为

相比之下 recipeTimeMultiplier 有真实消费者(AlteredRecipeTime.applyToServer()),4 个概率乘数也有(ChancedRecipes)。

⚠️ 切换变体后多数改动需要重启游戏(16 个 MixinBuilder 是 Phase.EARLY)。GUI 的变更检测不覆盖这一重启需求。

相关条目