@@ -46,7 +46,7 @@ private static Identifier id(String path) {
4646 private static final Identifier SODIUM_FULLSCREEN_MODE_OPTION_ID = Identifier .parse ("sodium:general.fullscreen_mode" );
4747 private static final Identifier SODIUM_FULLSCREEN_RESOLUTION_OPTION_ID = Identifier .parse ("sodium:general.fullscreen_resolution" );
4848 private static final Identifier SODIUM_VSYNC_OPTION_ID = Identifier .parse ("sodium:general.vsync" );
49- private static final List <Identifier > DEFAULT_DIMENSION_IDS = List .of (
49+ private static final List <Identifier > DEFAULT_DIMENSION_EFFECT_IDS = List .of (
5050 Level .OVERWORLD .identifier (),
5151 Level .NETHER .identifier (),
5252 Level .END .identifier ()
@@ -107,6 +107,36 @@ private static SodiumExtraGameOptions.AtmosphericFogSettings createDimensionFogS
107107 return settings ;
108108 }
109109
110+ private static List <Identifier > getDimensionFogEffectIds (SodiumExtraGameOptions .FogSettings fogSettings ) {
111+ Set <Identifier > identifiers = new LinkedHashSet <>(DEFAULT_DIMENSION_EFFECT_IDS );
112+ addKnownWorldDimensionEffectIds (identifiers );
113+ identifiers .addAll (fogSettings .dimensionOverrides .keySet ());
114+
115+ identifiers .forEach (identifier -> fogSettings .dimensionOverrides .computeIfAbsent (identifier , ignored -> createDimensionFogSettings ()));
116+
117+ return identifiers .stream ()
118+ .sorted (Comparator .comparing (Identifier ::toString ))
119+ .toList ();
120+ }
121+
122+ private static void addKnownWorldDimensionEffectIds (Set <Identifier > identifiers ) {
123+ Minecraft minecraft = Minecraft .getInstance ();
124+ if (minecraft == null ) {
125+ return ;
126+ }
127+
128+ if (minecraft .level != null ) {
129+ identifiers .add (getDimensionFogEffectId (minecraft .level ));
130+ }
131+ }
132+
133+ private static Identifier getDimensionFogEffectId (Level level ) {
134+ return level .dimensionTypeRegistration ()
135+ .unwrapKey ()
136+ .map (key -> key .identifier ())
137+ .orElseGet (() -> level .dimension ().identifier ());
138+ }
139+
110140 private static void setAtmosphericFogStart (int value ) {
111141 SodiumExtraGameOptions .FogSettings fogSettings = fogSettings ();
112142 int clampedValue = Math .clamp (value , 0 , 100 );
@@ -517,9 +547,7 @@ private OptionPageBuilder createRenderPage(ConfigBuilder builder) {
517547 .setName (Component .translatable ("sodium-extra.option.render" ));
518548
519549 SodiumExtraGameOptions .FogSettings fogSettings = fogSettings ();
520- DEFAULT_DIMENSION_IDS .stream ()
521- .filter (identifier -> !fogSettings .dimensionOverrides .containsKey (identifier ))
522- .forEach (identifier -> fogSettings .dimensionOverrides .put (identifier , createDimensionFogSettings ()));
550+ List <Identifier > dimensionFogEffectIds = getDimensionFogEffectIds (fogSettings );
523551
524552 page .addOptionGroup (builder .createOptionGroup ()
525553 .addOption (builder .createBooleanOption (ADVANCED_FOG_OPTION_ID )
@@ -607,9 +635,7 @@ private OptionPageBuilder createRenderPage(ConfigBuilder builder) {
607635 );
608636
609637 OptionGroupBuilder dimensionFogGroup = builder .createOptionGroup ();
610- fogSettings .dimensionOverrides .keySet ().stream ()
611- .sorted (Comparator .comparing (Identifier ::toString ))
612- .forEach (identifier -> dimensionFogGroup .addOption (builder .createIntegerOption (id ("fog." + identifier .toLanguageKey ("options.dimensions" )))
638+ dimensionFogEffectIds .forEach (identifier -> dimensionFogGroup .addOption (builder .createIntegerOption (id ("fog." + identifier .toLanguageKey ("options.dimensions" )))
613639 .setEnabledProvider (
614640 SodiumExtraConfig ::isDimensionFogOptionEnabled ,
615641 ADVANCED_FOG_OPTION_ID ,
@@ -627,7 +653,9 @@ private OptionPageBuilder createRenderPage(ConfigBuilder builder) {
627653 )
628654 .setDefaultValue (0 )
629655 ));
630- page .addOptionGroup (dimensionFogGroup );
656+ if (!dimensionFogEffectIds .isEmpty ()) {
657+ page .addOptionGroup (dimensionFogGroup );
658+ }
631659
632660 page .addOptionGroup (builder .createOptionGroup ()
633661 .addOption (builder .createBooleanOption (PROTECTED_GAMEPLAY_FOG_OPTION_ID )
0 commit comments