feat: 1.21.9

This commit is contained in:
trafficlunar 2025-10-05 11:29:56 +01:00
parent 7457775bb8
commit 8859e89ae0
14 changed files with 91 additions and 89 deletions

View file

@ -1,7 +1,7 @@
plugins { plugins {
id 'dev.architectury.loom' version '1.10-SNAPSHOT' apply false id 'dev.architectury.loom' version '1.11-SNAPSHOT' apply false
id 'architectury-plugin' version '3.4-SNAPSHOT' id 'architectury-plugin' version '3.4-SNAPSHOT'
id 'com.github.johnrengelman.shadow' version '8.1.1' apply false id 'com.gradleup.shadow' version '8.3.6' apply false
} }
architectury { architectury {
@ -31,6 +31,10 @@ subprojects {
// for more information about repositories. // for more information about repositories.
} }
loom {
silentMojangMappingsLicense()
}
dependencies { dependencies {
minecraft "net.minecraft:minecraft:$rootProject.minecraft_version" minecraft "net.minecraft:minecraft:$rootProject.minecraft_version"
mappings loom.officialMojangMappings() mappings loom.officialMojangMappings()

View file

@ -26,9 +26,9 @@ dependencies {
modImplementation "dev.architectury:architectury:$rootProject.architectury_api_version" modImplementation "dev.architectury:architectury:$rootProject.architectury_api_version"
// Mod implementations // Mod implementations
modImplementation "maven.modrinth:sodium:mc1.21.6-0.6.13-fabric" // Sodium modImplementation "maven.modrinth:sodium:mc1.21.9-0.7.0-fabric" // Sodium
modImplementation "maven.modrinth:sodium-extra:mc1.21.6-0.6.6+fabric" // Sodium Extra modImplementation "maven.modrinth:sodium-extra:mc1.21.9-0.7.0+fabric" // Sodium Extra
modImplementation "maven.modrinth:iris:1.9.1+1.21.7-fabric" // Iris modImplementation "maven.modrinth:iris:1.9.3+1.21.9-fabric" // Iris
modImplementation "maven.modrinth:distanthorizons:2.3.4-b-1.21.6" // Distant Horizons modImplementation "maven.modrinth:distanthorizons:2.3.4-b-1.21.8" // Distant Horizons
modImplementation "maven.modrinth:controlify:2.2.1-fabric,1.21.6" // Controlify modImplementation "maven.modrinth:controlify:2.4.1-fabric,1.21.9" // Controlify
} }

View file

@ -5,6 +5,7 @@ import dev.architectury.event.events.client.ClientTickEvent;
import dev.architectury.registry.client.keymappings.KeyMappingRegistry; import dev.architectury.registry.client.keymappings.KeyMappingRegistry;
import net.minecraft.client.KeyMapping; import net.minecraft.client.KeyMapping;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.trafficlunar.optionsprofiles.profiles.ProfileConfiguration; import net.trafficlunar.optionsprofiles.profiles.ProfileConfiguration;
import net.trafficlunar.optionsprofiles.profiles.Profiles; import net.trafficlunar.optionsprofiles.profiles.Profiles;
@ -17,12 +18,14 @@ public class Keybinds {
private static final KeyMapping[] PROFILE_KEYMAPPINGS = new KeyMapping[3]; private static final KeyMapping[] PROFILE_KEYMAPPINGS = new KeyMapping[3];
public static void init() { public static void init() {
KeyMapping.Category category = KeyMapping.Category.register(ResourceLocation.fromNamespaceAndPath(OptionsProfilesMod.MOD_ID, "keys"));
for (int i = 0; i < PROFILE_KEYMAPPINGS.length; i++) { for (int i = 0; i < PROFILE_KEYMAPPINGS.length; i++) {
PROFILE_KEYMAPPINGS[i] = new KeyMapping( PROFILE_KEYMAPPINGS[i] = new KeyMapping(
"key.optionsprofiles.profile_" + (i + 1), "key.optionsprofiles.profile_" + (i + 1),
InputConstants.Type.KEYSYM, InputConstants.Type.KEYSYM,
-1, -1,
"category.optionsprofiles.keys" category
); );
KeyMappingRegistry.register(PROFILE_KEYMAPPINGS[i]); KeyMappingRegistry.register(PROFILE_KEYMAPPINGS[i]);
} }

View file

@ -1,5 +1,8 @@
package net.trafficlunar.optionsprofiles.gui; package net.trafficlunar.optionsprofiles.gui;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.gui.screens.options.controls.KeyBindsList;
import net.trafficlunar.optionsprofiles.OptionsProfilesMod; import net.trafficlunar.optionsprofiles.OptionsProfilesMod;
import net.trafficlunar.optionsprofiles.profiles.ProfileConfiguration; import net.trafficlunar.optionsprofiles.profiles.ProfileConfiguration;
import net.trafficlunar.optionsprofiles.profiles.Profiles; import net.trafficlunar.optionsprofiles.profiles.Profiles;
@ -22,7 +25,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Stream; import java.util.stream.Stream;
public class OptionsToggleList extends ContainerObjectSelectionList<OptionsToggleList.Entry> { public class OptionsToggleList extends ContainerObjectSelectionList<OptionsToggleList.OptionEntry> {
private final String profileName; private final String profileName;
private final ProfileConfiguration profileConfiguration; private final ProfileConfiguration profileConfiguration;
@ -78,7 +81,7 @@ public class OptionsToggleList extends ContainerObjectSelectionList<OptionsToggl
return 340; return 340;
} }
public class OptionEntry extends Entry { public class OptionEntry extends ContainerObjectSelectionList.Entry<OptionEntry> {
private final Component optionKey; private final Component optionKey;
private final CycleButton<Boolean> toggleButton; private final CycleButton<Boolean> toggleButton;
@ -110,17 +113,14 @@ public class OptionsToggleList extends ContainerObjectSelectionList<OptionsToggl
} }
} }
public void render(GuiGraphics guiGraphics, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { public void renderContent(GuiGraphics guiGraphics, int mouseX, int mouseY, boolean hovered, float tickDelta) {
Font fontRenderer = OptionsToggleList.this.minecraft.font;
int posX = OptionsToggleList.this.scrollBarX() - this.toggleButton.getWidth() - 10; int posX = OptionsToggleList.this.scrollBarX() - this.toggleButton.getWidth() - 10;
int posY = y - 2; int posY = this.getContentY() - 2;
int textY = y + entryHeight / 2;
guiGraphics.drawString(fontRenderer, this.optionKey, x, textY - 9 / 2, -1);
this.toggleButton.setPosition(posX, posY); this.toggleButton.setPosition(posX, posY);
this.toggleButton.render(guiGraphics, mouseX, mouseY, tickDelta); this.toggleButton.render(guiGraphics, mouseX, mouseY, tickDelta);
guiGraphics.drawString(OptionsToggleList.this.minecraft.font, this.optionKey, this.getContentX(), this.getContentYMiddle() - 4, -1);
} }
public List<? extends GuiEventListener> children() { public List<? extends GuiEventListener> children() {
@ -131,9 +131,4 @@ public class OptionsToggleList extends ContainerObjectSelectionList<OptionsToggl
return ImmutableList.of(this.toggleButton); return ImmutableList.of(this.toggleButton);
} }
} }
public abstract static class Entry extends ContainerObjectSelectionList.Entry<OptionsToggleList.Entry> {
public Entry() {
}
}
} }

View file

@ -51,12 +51,12 @@ public class ProfilesList extends ContainerObjectSelectionList<ProfilesList.Prof
OptionsProfilesMod.LOGGER.error("An error occurred when listing profiles", e); OptionsProfilesMod.LOGGER.error("An error occurred when listing profiles", e);
} }
checkEntriesLoaded(); // checkEntriesLoaded();
} }
public void checkEntriesLoaded() { // public void checkEntriesLoaded() {
this.children().forEach(ProfileEntry::checkLoaded); // this.children().forEach(ProfileEntry::checkLoaded);
} // }
protected int scrollBarX() { protected int scrollBarX() {
return super.scrollBarX() + 15; return super.scrollBarX() + 15;
@ -95,27 +95,24 @@ public class ProfilesList extends ContainerObjectSelectionList<ProfilesList.Prof
minecraft.options.save(); minecraft.options.save();
minecraft.levelRenderer.allChanged(); minecraft.levelRenderer.allChanged();
ProfilesList.this.checkEntriesLoaded(); // ProfilesList.this.checkEntriesLoaded();
button.active = false; // button.active = false;
}) })
.size(75, 20) .size(75, 20)
.build(); .build();
} }
public void render(GuiGraphics guiGraphics, int index, int y, int x, int entryWidth, int entryHeight, int mouseX, int mouseY, boolean hovered, float tickDelta) { public void renderContent(GuiGraphics guiGraphics, int mouseX, int mouseY, boolean hovered, float tickDelta) {
Font fontRenderer = ProfilesList.this.minecraft.font;
int posX = ProfilesList.this.scrollBarX() - this.loadButton.getWidth() - 10; int posX = ProfilesList.this.scrollBarX() - this.loadButton.getWidth() - 10;
int posY = y - 2; int posY = this.getContentY() - 2;
int textY = y + entryHeight / 2;
guiGraphics.drawString(fontRenderer, this.profileName, x, textY - 9 / 2, -1);
this.editButton.setPosition(posX - this.editButton.getWidth(), posY); this.editButton.setPosition(posX - this.editButton.getWidth(), posY);
this.editButton.render(guiGraphics, mouseX, mouseY, tickDelta); this.editButton.render(guiGraphics, mouseX, mouseY, tickDelta);
this.loadButton.setPosition(posX, posY); this.loadButton.setPosition(posX, posY);
this.loadButton.render(guiGraphics, mouseX, mouseY, tickDelta); this.loadButton.render(guiGraphics, mouseX, mouseY, tickDelta);
guiGraphics.drawString(ProfilesList.this.minecraft.font, this.profileName, this.getContentX(), this.getContentYMiddle() - 4, -1);
} }
public List<? extends GuiEventListener> children() { public List<? extends GuiEventListener> children() {
@ -126,8 +123,8 @@ public class ProfilesList extends ContainerObjectSelectionList<ProfilesList.Prof
return ImmutableList.of(this.editButton, this.loadButton); return ImmutableList.of(this.editButton, this.loadButton);
} }
protected void checkLoaded() { // protected void checkLoaded() {
this.loadButton.active = !Profiles.isProfileLoaded(profileName.getString()); // this.loadButton.active = !Profiles.isProfileLoaded(profileName.getString());
} // }
} }
} }

View file

@ -71,7 +71,6 @@ public class SodiumExtraLoader {
SodiumExtraClientMod.options().extraSettings.reduceResolutionOnMac = configuration.extra_settings.reduce_resolution_on_mac; SodiumExtraClientMod.options().extraSettings.reduceResolutionOnMac = configuration.extra_settings.reduce_resolution_on_mac;
SodiumExtraClientMod.options().extraSettings.useAdaptiveSync = configuration.extra_settings.use_adaptive_sync; SodiumExtraClientMod.options().extraSettings.useAdaptiveSync = configuration.extra_settings.use_adaptive_sync;
SodiumExtraClientMod.options().extraSettings.cloudHeight = configuration.extra_settings.cloud_height; SodiumExtraClientMod.options().extraSettings.cloudHeight = configuration.extra_settings.cloud_height;
SodiumExtraClientMod.options().extraSettings.cloudDistance = configuration.extra_settings.cloud_distance;
SodiumExtraClientMod.options().extraSettings.toasts = configuration.extra_settings.toasts; SodiumExtraClientMod.options().extraSettings.toasts = configuration.extra_settings.toasts;
SodiumExtraClientMod.options().extraSettings.advancementToast = configuration.extra_settings.advancement_toast; SodiumExtraClientMod.options().extraSettings.advancementToast = configuration.extra_settings.advancement_toast;
SodiumExtraClientMod.options().extraSettings.recipeToast = configuration.extra_settings.recipe_toast; SodiumExtraClientMod.options().extraSettings.recipeToast = configuration.extra_settings.recipe_toast;
@ -144,7 +143,6 @@ public class SodiumExtraLoader {
public boolean reduce_resolution_on_mac; public boolean reduce_resolution_on_mac;
public boolean use_adaptive_sync; public boolean use_adaptive_sync;
public int cloud_height; public int cloud_height;
public int cloud_distance;
public boolean toasts; public boolean toasts;
public boolean advancement_toast; public boolean advancement_toast;
public boolean recipe_toast; public boolean recipe_toast;

View file

@ -1,5 +1,7 @@
package net.trafficlunar.optionsprofiles.profiles.loaders; package net.trafficlunar.optionsprofiles.profiles.loaders;
import net.caffeinemc.mods.sodium.client.render.chunk.DeferMode;
import net.caffeinemc.mods.sodium.client.render.chunk.translucent_sorting.QuadSplittingMode;
import net.trafficlunar.optionsprofiles.OptionsProfilesMod; import net.trafficlunar.optionsprofiles.OptionsProfilesMod;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
@ -23,8 +25,8 @@ public class SodiumLoader {
} }
private static void apply(Configuration configuration) { private static void apply(Configuration configuration) {
SodiumClientMod.options().quality.weatherQuality = SodiumGameOptions.GraphicsQuality.valueOf(configuration.quality.weather_quality); SodiumClientMod.options().quality.weatherQuality = SodiumGameOptions.WeatherQuality.valueOf(configuration.quality.weather_quality);
SodiumClientMod.options().quality.leavesQuality = SodiumGameOptions.GraphicsQuality.valueOf(configuration.quality.leaves_quality); SodiumClientMod.options().quality.leavesQuality = SodiumGameOptions.LeavesQuality.valueOf(configuration.quality.leaves_quality);
SodiumClientMod.options().quality.enableVignette = configuration.quality.enable_vignette; SodiumClientMod.options().quality.enableVignette = configuration.quality.enable_vignette;
SodiumClientMod.options().advanced.enableMemoryTracing = configuration.advanced.enable_memory_tracing; SodiumClientMod.options().advanced.enableMemoryTracing = configuration.advanced.enable_memory_tracing;
@ -32,16 +34,19 @@ public class SodiumLoader {
SodiumClientMod.options().advanced.cpuRenderAheadLimit = configuration.advanced.cpu_render_ahead_limit; SodiumClientMod.options().advanced.cpuRenderAheadLimit = configuration.advanced.cpu_render_ahead_limit;
SodiumClientMod.options().performance.chunkBuilderThreads = configuration.performance.chunk_builder_threads; SodiumClientMod.options().performance.chunkBuilderThreads = configuration.performance.chunk_builder_threads;
SodiumClientMod.options().performance.alwaysDeferChunkUpdates = configuration.performance.always_defer_chunk_updates_v2; SodiumClientMod.options().performance.chunkBuildDeferMode = configuration.performance.chunk_build_defer_mode;
SodiumClientMod.options().performance.animateOnlyVisibleTextures = configuration.performance.animate_only_visible_textures; SodiumClientMod.options().performance.animateOnlyVisibleTextures = configuration.performance.animate_only_visible_textures;
SodiumClientMod.options().performance.useEntityCulling = configuration.performance.use_entity_culling; SodiumClientMod.options().performance.useEntityCulling = configuration.performance.use_entity_culling;
SodiumClientMod.options().performance.useFogOcclusion = configuration.performance.use_fog_occlusion; SodiumClientMod.options().performance.useFogOcclusion = configuration.performance.use_fog_occlusion;
SodiumClientMod.options().performance.useBlockFaceCulling = configuration.performance.use_block_face_culling; 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.useNoErrorGLContext = configuration.performance.use_no_error_g_l_context;
SodiumClientMod.options().performance.quadSplittingMode = configuration.performance.quad_splitting_mode;
SodiumClientMod.options().notifications.hasClearedDonationButton = configuration.notifications.has_cleared_donation_button; SodiumClientMod.options().notifications.hasClearedDonationButton = configuration.notifications.has_cleared_donation_button;
SodiumClientMod.options().notifications.hasSeenDonationPrompt = configuration.notifications.has_seen_donation_prompt; SodiumClientMod.options().notifications.hasSeenDonationPrompt = configuration.notifications.has_seen_donation_prompt;
SodiumClientMod.options().debug.terrainSortingEnabled = configuration.debug.terrain_sorting_enabled;
try { try {
SodiumGameOptions.writeToDisk(SodiumClientMod.options()); SodiumGameOptions.writeToDisk(SodiumClientMod.options());
} catch (IOException e) { } catch (IOException e) {
@ -54,6 +59,7 @@ public class SodiumLoader {
public Advanced advanced; public Advanced advanced;
public Performance performance; public Performance performance;
public Notifications notifications; public Notifications notifications;
public Debug debug;
public static class Quality { public static class Quality {
public String weather_quality; public String weather_quality;
@ -69,17 +75,22 @@ public class SodiumLoader {
public static class Performance { public static class Performance {
public int chunk_builder_threads; public int chunk_builder_threads;
public boolean always_defer_chunk_updates_v2; public DeferMode chunk_build_defer_mode;
public boolean animate_only_visible_textures; public boolean animate_only_visible_textures;
public boolean use_entity_culling; public boolean use_entity_culling;
public boolean use_fog_occlusion; public boolean use_fog_occlusion;
public boolean use_block_face_culling; public boolean use_block_face_culling;
public boolean use_no_error_g_l_context; public boolean use_no_error_g_l_context;
public QuadSplittingMode quad_splitting_mode;
} }
public static class Notifications { public static class Notifications {
public boolean has_cleared_donation_button; public boolean has_cleared_donation_button;
public boolean has_seen_donation_prompt; public boolean has_seen_donation_prompt;
} }
public static class Debug {
public boolean terrain_sorting_enabled;
}
} }
} }

View file

@ -23,7 +23,7 @@
"gui.optionsprofiles.show-profiles-button": "Show Profiles Button", "gui.optionsprofiles.show-profiles-button": "Show Profiles Button",
"gui.optionsprofiles.show-profiles-button.tooltip": "Toggle to remove the profiles button in Options. Access profiles through /optionsprofiles.", "gui.optionsprofiles.show-profiles-button.tooltip": "Toggle to remove the profiles button in Options. Access profiles through /optionsprofiles.",
"category.optionsprofiles.keys": "Options Profiles", "key.category.optionsprofiles.keys": "Options Profiles",
"key.optionsprofiles.profile_1": "Profile 1", "key.optionsprofiles.profile_1": "Profile 1",
"key.optionsprofiles.profile_2": "Profile 2", "key.optionsprofiles.profile_2": "Profile 2",
"key.optionsprofiles.profile_3": "Profile 3" "key.optionsprofiles.profile_3": "Profile 3"

View file

@ -1,5 +1,5 @@
plugins { plugins {
id 'com.github.johnrengelman.shadow' id 'com.gradleup.shadow'
} }
architectury { architectury {
@ -41,7 +41,7 @@ dependencies {
modImplementation "dev.architectury:architectury-fabric:$rootProject.architectury_api_version" modImplementation "dev.architectury:architectury-fabric:$rootProject.architectury_api_version"
// Mod Menu API // Mod Menu API
modImplementation("com.terraformersmc:modmenu:13.0.2") modImplementation("com.terraformersmc:modmenu:16.0.0-rc.1")
common(project(path: ':common', configuration: 'namedElements')) { transitive false } common(project(path: ':common', configuration: 'namedElements')) { transitive false }
shadowBundle project(path: ':common', configuration: 'transformProductionFabric') shadowBundle project(path: ':common', configuration: 'transformProductionFabric')

View file

@ -1,34 +1,28 @@
{ {
"schemaVersion": 1, "schemaVersion": 1,
"id": "optionsprofiles", "id": "optionsprofiles",
"version": "${version}", "version": "${version}",
"name": "Options Profiles", "name": "Options Profiles",
"description": "Load and save your options from in-game.", "description": "Load and save your options from in-game.",
"authors": [ "authors": ["trafficlunar"],
"trafficlunar" "contact": {
], "homepage": "https://github.com/trafficlunar/options-profiles",
"contact": { "sources": "https://github.com/trafficlunar/options-profiles",
"homepage": "https://github.com/trafficlunar/options-profiles", "issues": "https://github.com/trafficlunar/options-profiles/issues"
"sources": "https://github.com/trafficlunar/options-profiles", },
"issues": "https://github.com/trafficlunar/options-profiles/issues" "license": "GNU GPL 3.0",
}, "icon": "assets/optionsprofiles/icon.png",
"license": "GNU GPL 3.0", "environment": "*",
"icon": "assets/optionsprofiles/icon.png", "entrypoints": {
"environment": "*", "main": ["net.trafficlunar.optionsprofiles.fabric.OptionsProfilesModFabric"],
"entrypoints": { "modmenu": ["net.trafficlunar.optionsprofiles.fabric.ModMenuApiImpl"]
"main": [ },
"net.trafficlunar.optionsprofiles.fabric.OptionsProfilesModFabric" "mixins": ["optionsprofiles.mixins.json"],
], "depends": {
"modmenu": [ "net.trafficlunar.optionsprofiles.fabric.ModMenuApiImpl" ] "fabricloader": ">=0.17.2",
}, "minecraft": "~1.21",
"mixins": [ "java": ">=21",
"optionsprofiles.mixins.json" "architectury": ">=18.0.3",
], "fabric-api": "*"
"depends": { }
"fabricloader": ">=0.16.14",
"minecraft": "~1.21",
"java": ">=21",
"architectury": ">=17.0.6",
"fabric-api": "*"
}
} }

View file

@ -11,10 +11,10 @@ archives_name=optionsprofiles
enabled_platforms=fabric,neoforge enabled_platforms=fabric,neoforge
# Minecraft properties # Minecraft properties
minecraft_version=1.21.6 minecraft_version=1.21.9
# Dependencies # Dependencies
architectury_api_version = 17.0.6 architectury_api_version = 18.0.3
fabric_loader_version=0.16.14 fabric_loader_version=0.17.2
fabric_api_version=0.128.2+1.21.6 fabric_api_version=0.134.0+1.21.9
neoforge_version=21.6.20-beta neoforge_version=21.9.0-beta

View file

@ -1,5 +1,5 @@
plugins { plugins {
id 'com.github.johnrengelman.shadow' id 'com.gradleup.shadow'
} }
architectury { architectury {

View file

@ -1,5 +1,5 @@
modLoader = "javafml" modLoader = "javafml"
loaderVersion = "[2,)" loaderVersion = "[10,)"
issueTrackerURL = "https://github.com/trafficlunar/options-profiles/issues" issueTrackerURL = "https://github.com/trafficlunar/options-profiles/issues"
license = "GNU GPL 3.0" license = "GNU GPL 3.0"
@ -16,7 +16,7 @@ logoFile = "icon.png"
[[dependencies.optionsprofiles]] [[dependencies.optionsprofiles]]
modId = "neoforge" modId = "neoforge"
type = "required" type = "required"
versionRange = "[21.6,)" versionRange = "[21.9.0-beta,)"
ordering = "NONE" ordering = "NONE"
side = "BOTH" side = "BOTH"
@ -30,7 +30,7 @@ side = "BOTH"
[[dependencies.optionsprofiles]] [[dependencies.optionsprofiles]]
modId = "architectury" modId = "architectury"
type = "required" type = "required"
versionRange = "[17.0.6,)" versionRange = "[18.0.3,)"
ordering = "AFTER" ordering = "AFTER"
side = "BOTH" side = "BOTH"

View file

@ -11,4 +11,4 @@ include("common")
include("fabric") include("fabric")
include("neoforge") include("neoforge")
rootProject.name = "optionsprofiles-v1.4.2-1.21.6" rootProject.name = "optionsprofiles-v1.4.2-1.21.9"