@@ -217,6 +217,36 @@ private static SodiumExtraGameOptions.AtmosphericFogSettings createDimensionFogS
217217 return settings ;
218218 }
219219
220+ private static List <ResourceLocation > getDimensionFogEffectIds (SodiumExtraGameOptions .FogSettings fogSettings ) {
221+ Set <ResourceLocation > identifiers = new LinkedHashSet <>();
222+ WorldDimensions .keysInOrder (Stream .empty ())
223+ .map (dim -> dim .location ())
224+ .forEach (identifiers ::add );
225+ addKnownWorldDimensionEffectIds (identifiers );
226+ identifiers .addAll (fogSettings .dimensionOverrides .keySet ());
227+
228+ identifiers .forEach (identifier -> fogSettings .dimensionOverrides .computeIfAbsent (identifier , ignored -> createDimensionFogSettings ()));
229+
230+ return identifiers .stream ()
231+ .sorted (Comparator .comparing (ResourceLocation ::toString ))
232+ .toList ();
233+ }
234+
235+ private static void addKnownWorldDimensionEffectIds (Set <ResourceLocation > identifiers ) {
236+ Minecraft minecraft = Minecraft .getInstance ();
237+ if (minecraft == null ) {
238+ return ;
239+ }
240+
241+ if (minecraft .level != null ) {
242+ identifiers .add (minecraft .level .dimensionType ().effectsLocation ());
243+ }
244+
245+ if (minecraft .getSingleplayerServer () != null ) {
246+ minecraft .getSingleplayerServer ().getAllLevels ().forEach (level -> identifiers .add (level .dimensionType ().effectsLocation ()));
247+ }
248+ }
249+
220250 private static void setAtmosphericFogStart (int value ) {
221251 SodiumExtraGameOptions .FogSettings fogSettings = fogSettings ();
222252 int clampedValue = Math .max (0 , Math .min (value , 100 ));
@@ -515,10 +545,7 @@ private OptionPageBuilder createRenderPage(ConfigBuilder builder) {
515545 .setName (Component .translatable ("sodium-extra.option.render" ));
516546
517547 SodiumExtraGameOptions .FogSettings fogSettings = fogSettings ();
518- WorldDimensions .keysInOrder (Stream .empty ())
519- .map (dim -> dim .location ())
520- .filter (identifier -> !fogSettings .dimensionOverrides .containsKey (identifier ))
521- .forEach (identifier -> fogSettings .dimensionOverrides .put (identifier , createDimensionFogSettings ()));
548+ List <ResourceLocation > dimensionFogEffectIds = getDimensionFogEffectIds (fogSettings );
522549
523550 page .addOptionGroup (builder .createOptionGroup ()
524551 .addOption (builder .createBooleanOption (ADVANCED_FOG_OPTION_ID )
@@ -606,9 +633,7 @@ private OptionPageBuilder createRenderPage(ConfigBuilder builder) {
606633 );
607634
608635 OptionGroupBuilder dimensionFogGroup = builder .createOptionGroup ();
609- fogSettings .dimensionOverrides .keySet ().stream ()
610- .sorted (Comparator .comparing (ResourceLocation ::toString ))
611- .forEach (identifier -> dimensionFogGroup .addOption (builder .createIntegerOption (id ("fog." + identifier .toLanguageKey ("options.dimensions" )))
636+ dimensionFogEffectIds .forEach (identifier -> dimensionFogGroup .addOption (builder .createIntegerOption (id ("fog." + identifier .toLanguageKey ("options.dimensions" )))
612637 .setEnabledProvider (
613638 SodiumExtraConfig ::isDimensionFogOptionEnabled ,
614639 ADVANCED_FOG_OPTION_ID ,
@@ -626,7 +651,9 @@ private OptionPageBuilder createRenderPage(ConfigBuilder builder) {
626651 )
627652 .setDefaultValue (0 )
628653 ));
629- page .addOptionGroup (dimensionFogGroup );
654+ if (!dimensionFogEffectIds .isEmpty ()) {
655+ page .addOptionGroup (dimensionFogGroup );
656+ }
630657
631658 page .addOptionGroup (builder .createOptionGroup ()
632659 .addOption (builder .createBooleanOption (PROTECTED_GAMEPLAY_FOG_OPTION_ID )
0 commit comments