From 19b90e1fae8f81f47c5224da38a84e46f942fab2 Mon Sep 17 00:00:00 2001 From: trafficlunar Date: Sun, 21 Sep 2025 14:03:26 +0100 Subject: [PATCH] feat: port version 1.4.1 to minecraft 1.21.1 (#42) --- common/build.gradle | 6 +- .../gui/EditProfileScreen.java | 10 +- .../optionsprofiles/profiles/Profiles.java | 103 +++++++++--------- .../profiles/loaders/SodiumExtraLoader.java | 17 ++- .../profiles/loaders/SodiumLoader.java | 9 +- fabric/src/main/resources/fabric.mod.json | 2 +- gradle.properties | 8 +- .../resources/META-INF/neoforge.mods.toml | 2 +- 8 files changed, 85 insertions(+), 72 deletions(-) diff --git a/common/build.gradle b/common/build.gradle index 2b27b3b..e6a05b2 100644 --- a/common/build.gradle +++ b/common/build.gradle @@ -26,8 +26,8 @@ dependencies { modImplementation "dev.architectury:architectury:$rootProject.architectury_api_version" // Mod implementations - modImplementation "maven.modrinth:sodium:mc1.21.1-0.6.9-fabric" // Sodium - modImplementation "maven.modrinth:sodium-extra:mc1.21.1-0.6.0+fabric" // Sodium Extra + modImplementation "maven.modrinth:sodium:mc1.21.1-0.6.13-fabric" // Sodium + modImplementation "maven.modrinth:sodium-extra:mc1.21.6-0.6.6+fabric" // Sodium Extra modImplementation "maven.modrinth:iris:1.8.8+1.21.1-fabric" // Iris - modImplementation "maven.modrinth:distanthorizons:2.2.1-a-1.21.1" // Distant Horizons + modImplementation "maven.modrinth:distanthorizons:2.3.4-b-1.21.1" // Distant Horizons } diff --git a/common/src/main/java/net/trafficlunar/optionsprofiles/gui/EditProfileScreen.java b/common/src/main/java/net/trafficlunar/optionsprofiles/gui/EditProfileScreen.java index 7cd1557..d2a09e6 100644 --- a/common/src/main/java/net/trafficlunar/optionsprofiles/gui/EditProfileScreen.java +++ b/common/src/main/java/net/trafficlunar/optionsprofiles/gui/EditProfileScreen.java @@ -107,7 +107,7 @@ public class EditProfileScreen extends Screen { .withStyle(ChatFormatting.RED), (button) -> { Profiles.deleteProfile(profileName.getString()); - this.onClose(); + this.onClose(true); }) .width(50) .build(), @@ -122,8 +122,14 @@ public class EditProfileScreen extends Screen { this.layout.arrangeElements(); } + @Override public void onClose() { - this.profileConfiguration.save(); + this.onClose(false); + } + + public void onClose(boolean deleted) { + if (!deleted) + this.profileConfiguration.save(); this.minecraft.setScreen(this.profilesScreen); this.profilesScreen.profilesList.refreshEntries(); } diff --git a/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/Profiles.java b/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/Profiles.java index 4cd9864..c6cdfdd 100644 --- a/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/Profiles.java +++ b/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/Profiles.java @@ -146,57 +146,60 @@ public class Profiles { } public static boolean isProfileLoaded(String profileName) { - Path profile = PROFILES_DIRECTORY.resolve(profileName); - ProfileConfiguration profileConfiguration = ProfileConfiguration.get(profileName); + // TODO: rewrite/fix; returns incorrect results - List optionFiles = new ArrayList<>(); - optionFiles.add(OPTIONS_FILE); - - // The next few lines check if the specified file exists. If so, it adds it to the optionFiles ArrayList. - Optional.of(OPTIFINE_OPTIONS_FILE).filter(Files::exists).ifPresent(optionFiles::add); - Optional.of(SODIUM_OPTIONS_FILE).filter(file -> Platform.isModLoaded("sodium")).ifPresent(optionFiles::add); - Optional.of(SODIUM_EXTRA_OPTIONS_FILE).filter(file -> Platform.isModLoaded("sodium-extra")).ifPresent(optionFiles::add); - Optional.of(IRIS_OPTIONS_FILE).filter(file -> Platform.isModLoaded("iris")).ifPresent(optionFiles::add); - Optional.of(DISTANT_HORIZONS_OPTIONS_FILE).filter(file -> Platform.isModLoaded("distanthorizons")).ifPresent(optionFiles::add); - - // Check if the original option file and the profile option file have the same content - try { - for (Path optionFile : optionFiles) { - Path profileOptions = profile.resolve(optionFile.getFileName()); - - if (optionFile.getFileName().equals(OPTIONS_FILE)) { - try (Stream lines = Files.lines(optionFile)) { - List optionsToLoad = profileConfiguration.getOptionsToLoad(); - AtomicBoolean loaded = new AtomicBoolean(false); - - lines.forEach((line) -> { - String[] option = line.split(":"); - - if (optionsToLoad.contains(option[0])) { - try (Stream profileLines = Files.lines(profileOptions)) { - loaded.set(profileLines.anyMatch(profileLine -> profileLine.equals(line))); - } catch (IOException e) { - OptionsProfilesMod.LOGGER.error("[Profile '{}']: An error occurred when checking each line in options.txt if the profiles is loaded", profileName, e); - } - } - }); - - return loaded.get(); - } catch (IOException e) { - OptionsProfilesMod.LOGGER.error("[Profile '{}']: An error occurred when opening options.txt to check if the profile is loaded", profileName, e); - } - } else { - if (!FileUtils.contentEquals(optionFile.toFile(), profileOptions.toFile())) { - return false; - } - } - } - } catch (IOException e) { - OptionsProfilesMod.LOGGER.error("[Profile '{}']: An error occurred when checking if the profile is loaded", profileName, e); - return false; - } - - return true; +// Path profile = PROFILES_DIRECTORY.resolve(profileName); +// ProfileConfiguration profileConfiguration = ProfileConfiguration.get(profileName); +// +// List optionFiles = new ArrayList<>(); +// optionFiles.add(OPTIONS_FILE); +// +// // The next few lines check if the specified file exists. If so, it adds it to the optionFiles ArrayList. +// Optional.of(OPTIFINE_OPTIONS_FILE).filter(Files::exists).ifPresent(optionFiles::add); +// Optional.of(SODIUM_OPTIONS_FILE).filter(file -> Platform.isModLoaded("sodium")).ifPresent(optionFiles::add); +// Optional.of(SODIUM_EXTRA_OPTIONS_FILE).filter(file -> Platform.isModLoaded("sodium-extra")).ifPresent(optionFiles::add); +// Optional.of(IRIS_OPTIONS_FILE).filter(file -> Platform.isModLoaded("iris")).ifPresent(optionFiles::add); +// Optional.of(DISTANT_HORIZONS_OPTIONS_FILE).filter(file -> Platform.isModLoaded("distanthorizons")).ifPresent(optionFiles::add); +// +// // Check if the original option file and the profile option file have the same content +// try { +// for (Path optionFile : optionFiles) { +// Path profileOptions = profile.resolve(optionFile.getFileName()); +// +// if (optionFile.getFileName().equals(OPTIONS_FILE)) { +// try (Stream lines = Files.lines(optionFile)) { +// List optionsToLoad = profileConfiguration.getOptionsToLoad(); +// AtomicBoolean loaded = new AtomicBoolean(false); +// +// lines.forEach((line) -> { +// String[] option = line.split(":"); +// +// if (optionsToLoad.contains(option[0])) { +// try (Stream profileLines = Files.lines(profileOptions)) { +// loaded.set(profileLines.anyMatch(profileLine -> profileLine.equals(line))); +// } catch (IOException e) { +// OptionsProfilesMod.LOGGER.error("[Profile '{}']: An error occurred when checking each line in options.txt if the profiles is loaded", profileName, e); +// } +// } +// }); +// +// return loaded.get(); +// } catch (IOException e) { +// OptionsProfilesMod.LOGGER.error("[Profile '{}']: An error occurred when opening options.txt to check if the profile is loaded", profileName, e); +// } +// } else { +// if (!FileUtils.contentEquals(optionFile.toFile(), profileOptions.toFile())) { +// return false; +// } +// } +// } +// } catch (IOException e) { +// OptionsProfilesMod.LOGGER.error("[Profile '{}']: An error occurred when checking if the profile is loaded", profileName, e); +// return false; +// } +// +// return true; + return false; } private static void loadOptionFile(String profileName, Path options) { diff --git a/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/loaders/SodiumExtraLoader.java b/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/loaders/SodiumExtraLoader.java index 9d28efa..b42c573 100644 --- a/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/loaders/SodiumExtraLoader.java +++ b/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/loaders/SodiumExtraLoader.java @@ -1,15 +1,18 @@ package net.trafficlunar.optionsprofiles.profiles.loaders; -import net.trafficlunar.optionsprofiles.OptionsProfilesMod; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import me.flashyreese.mods.sodiumextra.client.SodiumExtraClientMod; +import me.flashyreese.mods.sodiumextra.client.gui.FogTypeConfig; import me.flashyreese.mods.sodiumextra.client.gui.SodiumExtraGameOptions; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.material.FogType; +import net.trafficlunar.optionsprofiles.OptionsProfilesMod; import java.io.FileReader; import java.io.IOException; import java.nio.file.Path; +import java.util.EnumMap; import java.util.Map; public class SodiumExtraLoader { @@ -47,10 +50,8 @@ public class SodiumExtraLoader { SodiumExtraClientMod.options().detailSettings.biomeColors = configuration.detail_settings.biome_colors; SodiumExtraClientMod.options().detailSettings.skyColors = configuration.detail_settings.sky_colors; - SodiumExtraClientMod.options().renderSettings.fogDistance = configuration.render_settings.fog_distance; - SodiumExtraClientMod.options().renderSettings.fogStart = configuration.render_settings.fog_start; - SodiumExtraClientMod.options().renderSettings.multiDimensionFogControl = configuration.render_settings.multi_dimension_fog_control; - SodiumExtraClientMod.options().renderSettings.dimensionFogDistanceMap = configuration.render_settings.dimensionFogDistance; + SodiumExtraClientMod.options().renderSettings.globalFog = configuration.render_settings.global_fog; + SodiumExtraClientMod.options().renderSettings.fogTypeConfig = configuration.render_settings.fog_type_config; SodiumExtraClientMod.options().renderSettings.lightUpdates = configuration.render_settings.light_updates; SodiumExtraClientMod.options().renderSettings.itemFrame = configuration.render_settings.item_frame; SodiumExtraClientMod.options().renderSettings.armorStand = configuration.render_settings.armor_stand; @@ -120,10 +121,8 @@ public class SodiumExtraLoader { } public static class RenderSettings { - public int fog_distance; - public int fog_start; - public boolean multi_dimension_fog_control; - public Map dimensionFogDistance; + public boolean global_fog; + public EnumMap fog_type_config; public boolean light_updates; public boolean item_frame; public boolean armor_stand; diff --git a/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/loaders/SodiumLoader.java b/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/loaders/SodiumLoader.java index 6a25611..791c4e8 100644 --- a/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/loaders/SodiumLoader.java +++ b/common/src/main/java/net/trafficlunar/optionsprofiles/profiles/loaders/SodiumLoader.java @@ -38,11 +38,12 @@ public class SodiumLoader { SodiumClientMod.options().performance.useFogOcclusion = configuration.performance.use_fog_occlusion; SodiumClientMod.options().performance.useBlockFaceCulling = configuration.performance.use_block_face_culling; SodiumClientMod.options().performance.useNoErrorGLContext = configuration.performance.use_no_error_g_l_context; - SodiumClientMod.options().performance.sortingEnabled = configuration.performance.sorting_enabled_v2; SodiumClientMod.options().notifications.hasClearedDonationButton = configuration.notifications.has_cleared_donation_button; SodiumClientMod.options().notifications.hasSeenDonationPrompt = configuration.notifications.has_seen_donation_prompt; + SodiumClientMod.options().debug.terrainSortingEnabled = configuration.debug.terrain_sorting_enabled; + try { SodiumGameOptions.writeToDisk(SodiumClientMod.options()); } catch (IOException e) { @@ -55,6 +56,7 @@ public class SodiumLoader { public Advanced advanced; public Performance performance; public Notifications notifications; + public Debug debug; public static class Quality { public String weather_quality; @@ -76,12 +78,15 @@ public class SodiumLoader { public boolean use_fog_occlusion; public boolean use_block_face_culling; public boolean use_no_error_g_l_context; - public boolean sorting_enabled_v2; } public static class Notifications { public boolean has_cleared_donation_button; public boolean has_seen_donation_prompt; } + + public static class Debug { + public boolean terrain_sorting_enabled; + } } } \ No newline at end of file diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index be40daf..3dac694 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -25,7 +25,7 @@ "optionsprofiles.mixins.json" ], "depends": { - "fabricloader": ">=0.15.11", + "fabricloader": ">=0.17.2", "minecraft": "~1.21.1", "java": ">=21", "architectury": ">=13.0.8", diff --git a/gradle.properties b/gradle.properties index 180940c..02cf33b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.parallel=true loom.ignoreDependencyLoomVersionValidation=true # Mod properties -mod_version=1.4 +mod_version=1.4.2 maven_group=net.trafficlunar.optionsprofiles archives_name=optionsprofiles enabled_platforms=fabric,neoforge @@ -15,6 +15,6 @@ minecraft_version=1.21.1 # Dependencies architectury_api_version=13.0.8 -fabric_loader_version=0.16.10 -fabric_api_version=0.115.1+1.21.1 -neoforge_version=21.1.128 \ No newline at end of file +fabric_loader_version=0.17.2 +fabric_api_version=0.116.6+1.21.1 +neoforge_version=21.1.209 \ No newline at end of file diff --git a/neoforge/src/main/resources/META-INF/neoforge.mods.toml b/neoforge/src/main/resources/META-INF/neoforge.mods.toml index da88ca3..75ed314 100644 --- a/neoforge/src/main/resources/META-INF/neoforge.mods.toml +++ b/neoforge/src/main/resources/META-INF/neoforge.mods.toml @@ -16,7 +16,7 @@ logoFile = "icon.png" [[dependencies.optionsprofiles]] modId = "neoforge" type = "required" -versionRange = "[21.0,)" +versionRange = "[21.1,)" ordering = "NONE" side = "BOTH"