@@ -47,7 +47,7 @@ private static Identifier id(String path) {
4747 private static final Identifier SODIUM_FULLSCREEN_MODE_OPTION_ID = Identifier .parse ("sodium:general.fullscreen_mode" );
4848 private static final Identifier SODIUM_FULLSCREEN_RESOLUTION_OPTION_ID = Identifier .parse ("sodium:general.fullscreen_resolution" );
4949 private static final Identifier SODIUM_VSYNC_OPTION_ID = Identifier .parse ("sodium:general.vsync" );
50- private static final List <Identifier > DEFAULT_DIMENSION_IDS = List .of (
50+ private static final List <Identifier > DEFAULT_DIMENSION_EFFECT_IDS = List .of (
5151 Level .OVERWORLD .identifier (),
5252 Level .NETHER .identifier (),
5353 Level .END .identifier ()
@@ -108,6 +108,36 @@ private static SodiumExtraGameOptions.AtmosphericFogSettings createDimensionFogS
108108 return settings ;
109109 }
110110
111+ private static List <Identifier > getDimensionFogEffectIds (SodiumExtraGameOptions .FogSettings fogSettings ) {
112+ Set <Identifier > identifiers = new LinkedHashSet <>(DEFAULT_DIMENSION_EFFECT_IDS );
113+ addKnownWorldDimensionEffectIds (identifiers );
114+ identifiers .addAll (fogSettings .dimensionOverrides .keySet ());
115+
116+ identifiers .forEach (identifier -> fogSettings .dimensionOverrides .computeIfAbsent (identifier , ignored -> createDimensionFogSettings ()));
117+
118+ return identifiers .stream ()
119+ .sorted (Comparator .comparing (Identifier ::toString ))
120+ .toList ();
121+ }
122+
123+ private static void addKnownWorldDimensionEffectIds (Set <Identifier > identifiers ) {
124+ Minecraft minecraft = Minecraft .getInstance ();
125+ if (minecraft == null ) {
126+ return ;
127+ }
128+
129+ if (minecraft .level != null ) {
130+ identifiers .add (getDimensionFogEffectId (minecraft .level ));
131+ }
132+ }
133+
134+ private static Identifier getDimensionFogEffectId (Level level ) {
135+ return level .dimensionTypeRegistration ()
136+ .unwrapKey ()
137+ .map (key -> key .identifier ())
138+ .orElseGet (() -> level .dimension ().identifier ());
139+ }
140+
111141 private static void setAtmosphericFogStart (int value ) {
112142 SodiumExtraGameOptions .FogSettings fogSettings = fogSettings ();
113143 int clampedValue = Math .clamp (value , 0 , 100 );
@@ -518,9 +548,7 @@ private OptionPageBuilder createRenderPage(ConfigBuilder builder) {
518548 .setName (Component .translatable ("sodium-extra.option.render" ));
519549
520550 SodiumExtraGameOptions .FogSettings fogSettings = fogSettings ();
521- DEFAULT_DIMENSION_IDS .stream ()
522- .filter (identifier -> !fogSettings .dimensionOverrides .containsKey (identifier ))
523- .forEach (identifier -> fogSettings .dimensionOverrides .put (identifier , createDimensionFogSettings ()));
551+ List <Identifier > dimensionFogEffectIds = getDimensionFogEffectIds (fogSettings );
524552
525553 page .addOptionGroup (builder .createOptionGroup ()
526554 .addOption (builder .createBooleanOption (ADVANCED_FOG_OPTION_ID )
@@ -608,9 +636,7 @@ private OptionPageBuilder createRenderPage(ConfigBuilder builder) {
608636 );
609637
610638 OptionGroupBuilder dimensionFogGroup = builder .createOptionGroup ();
611- fogSettings .dimensionOverrides .keySet ().stream ()
612- .sorted (Comparator .comparing (Identifier ::toString ))
613- .forEach (identifier -> dimensionFogGroup .addOption (builder .createIntegerOption (id ("fog." + identifier .toLanguageKey ("options.dimensions" )))
639+ dimensionFogEffectIds .forEach (identifier -> dimensionFogGroup .addOption (builder .createIntegerOption (id ("fog." + identifier .toLanguageKey ("options.dimensions" )))
614640 .setEnabledProvider (
615641 SodiumExtraConfig ::isDimensionFogOptionEnabled ,
616642 ADVANCED_FOG_OPTION_ID ,
@@ -628,7 +654,9 @@ private OptionPageBuilder createRenderPage(ConfigBuilder builder) {
628654 )
629655 .setDefaultValue (0 )
630656 ));
631- page .addOptionGroup (dimensionFogGroup );
657+ if (!dimensionFogEffectIds .isEmpty ()) {
658+ page .addOptionGroup (dimensionFogGroup );
659+ }
632660
633661 page .addOptionGroup (builder .createOptionGroup ()
634662 .addOption (builder .createBooleanOption (PROTECTED_GAMEPLAY_FOG_OPTION_ID )
0 commit comments