From 8baf28fcfe93ba9366d98caadda405d88a8403a6 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sat, 21 Feb 2026 18:05:26 +0100 Subject: [PATCH] Implemented theme --- .../saturnclient/SaturnClient.java | 1 + .../{ => config}/SaturnClientConfig.java | 8 +- .../saturnclient/config/Theme.java | 20 ++++ .../saturnclient/config/ThemeManager.java | 93 ------------------- .../cosmetics/CloakFeatureRenderer.java | 2 +- .../saturnclient/event/KeyInputHandler.java | 2 +- .../saturnclient/mixin/NameTagMixin.java | 2 +- .../saturnclient/mixin/SetScreenMixin.java | 2 +- .../saturnclient/mixin/TabListMixin.java | 2 +- .../saturnclient/ui2/components/Sidebar.java | 2 +- .../saturnclient/ui2/screens/EmoteWheel.java | 2 +- .../saturnclient/ui2/screens/ShiftMenu.java | 2 +- .../saturnclient/ui2/screens/TitleMenu.java | 2 +- 13 files changed, 34 insertions(+), 106 deletions(-) rename src/main/java/org/saturnclient/saturnclient/{ => config}/SaturnClientConfig.java (93%) create mode 100644 src/main/java/org/saturnclient/saturnclient/config/Theme.java delete mode 100644 src/main/java/org/saturnclient/saturnclient/config/ThemeManager.java diff --git a/src/main/java/org/saturnclient/saturnclient/SaturnClient.java b/src/main/java/org/saturnclient/saturnclient/SaturnClient.java index e922ee9..7a6c803 100644 --- a/src/main/java/org/saturnclient/saturnclient/SaturnClient.java +++ b/src/main/java/org/saturnclient/saturnclient/SaturnClient.java @@ -9,6 +9,7 @@ import net.minecraft.client.util.math.MatrixStack; import org.saturnclient.modules.ModManager; import org.saturnclient.saturnclient.client.ServiceClient; import org.saturnclient.saturnclient.config.ConfigManager; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import org.saturnclient.saturnclient.cosmetics.Emotes; import org.saturnclient.saturnclient.cosmetics.Hats; import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks; diff --git a/src/main/java/org/saturnclient/saturnclient/SaturnClientConfig.java b/src/main/java/org/saturnclient/saturnclient/config/SaturnClientConfig.java similarity index 93% rename from src/main/java/org/saturnclient/saturnclient/SaturnClientConfig.java rename to src/main/java/org/saturnclient/saturnclient/config/SaturnClientConfig.java index 4f603b9..cd09f65 100644 --- a/src/main/java/org/saturnclient/saturnclient/SaturnClientConfig.java +++ b/src/main/java/org/saturnclient/saturnclient/config/SaturnClientConfig.java @@ -1,12 +1,9 @@ -package org.saturnclient.saturnclient; - -import org.saturnclient.saturnclient.config.Property; +package org.saturnclient.saturnclient.config; import java.util.Map; import java.util.UUID; import org.lwjgl.glfw.GLFW; -import org.saturnclient.saturnclient.config.ConfigManager; import org.saturnclient.ui2.resources.Textures; import net.minecraft.util.Formatting; @@ -79,5 +76,8 @@ public class SaturnClientConfig { config.property("Saturn client title screen", saturnTitleScreen); config.property("Open Emote Wheel", openEmoteWheel); config.property("Bendy Cloaks", bendyCloaks); + + // Initialize a sub namespace for theme + Theme.init(config); } } diff --git a/src/main/java/org/saturnclient/saturnclient/config/Theme.java b/src/main/java/org/saturnclient/saturnclient/config/Theme.java new file mode 100644 index 0000000..6eb9241 --- /dev/null +++ b/src/main/java/org/saturnclient/saturnclient/config/Theme.java @@ -0,0 +1,20 @@ +package org.saturnclient.saturnclient.config; + +public class Theme { + public static Property BACKGROUND = Property.color(0x00000000); + public static Property FOREGROUND = Property.color(0x00000000); + public static Property PRIMARY = Property.color(0x00000000); + public static Property PRIMARY_FG = Property.color(0x00000000); + public static Property ACCENT = Property.color(0x00000000); + public static Property ACCENT_FG = Property.color(0x00000000); + + public static void init(ConfigManager parent) { + ConfigManager config = new ConfigManager(parent, "UI Style"); + config.property("Background", BACKGROUND); + config.property("Foreground", FOREGROUND); + config.property("Primary", PRIMARY); + config.property("Primary Foreground", PRIMARY_FG); + config.property("Accent", ACCENT); + config.property("Accent Foreground", ACCENT_FG); + } +} diff --git a/src/main/java/org/saturnclient/saturnclient/config/ThemeManager.java b/src/main/java/org/saturnclient/saturnclient/config/ThemeManager.java deleted file mode 100644 index 0bcc14b..0000000 --- a/src/main/java/org/saturnclient/saturnclient/config/ThemeManager.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.saturnclient.saturnclient.config; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import org.saturnclient.saturnclient.SaturnClient; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -public class ThemeManager { - private static File themeFile = new File( - SaturnClient.client.runDirectory, - "saturn.theme.json"); - private static List theme = new ArrayList<>(); - private static JsonObject cachedThemeJson = null; - - private Map> states; - private Map> currentStyling; - private String namespace; - - public ThemeManager(String namespace, String... states) { - this.namespace = namespace; - this.states = new LinkedHashMap<>(); - this.currentStyling = new LinkedHashMap<>(); - this.states.put(null, new LinkedHashMap<>()); - for (String s : states) { - this.states.put(s, new LinkedHashMap<>()); - } - theme.add(this); - } - - public void setState(String state) { - for (Map.Entry tProp : states.get(state).entrySet()) { - currentStyling.get(tProp.getKey()).setValue(tProp.getValue()); - } - } - - public void applyState(String state) { - for (Map.Entry tProp : states.get(state).entrySet()) { - if (!states.get(null).get(tProp.getKey()).equals(tProp.getValue())) - currentStyling.get(tProp.getKey()).setValue(tProp.getValue()); - } - } - - public Property property(String name, Property prop) { - for (Map.Entry> state : this.states.entrySet()) { - Property property = prop.copy(); - if (cachedThemeJson == null) { - load(); - } - String stateName = state.getKey(); - property.load(name, cachedThemeJson.get(stateName != null ? namespace + "@" + stateName : namespace)); - state.getValue().put(name, property.value); - } - - currentStyling.put(name, prop); - - return prop; - } - - public void propertyStateDefault(String state, String name, T value) { - Property prop = currentStyling.get(name).copy(); - prop.setValue(value, value); - if (cachedThemeJson == null) { - load(); - } - prop.load(name, cachedThemeJson.get(state != null ? namespace + "@" + state : namespace)); - states.get(state).put(name, prop.value); - } - - public static void load() { - try { - SaturnClient.LOGGER.info("Starting to load theme..."); - if (!themeFile.exists()) { - themeFile.createNewFile(); - Files.write(themeFile.toPath(), "{}".getBytes()); - } - - cachedThemeJson = JsonParser.parseString( - new String(Files.readAllBytes(themeFile.toPath()))).getAsJsonObject(); - - SaturnClient.LOGGER.info("Theme loaded"); - } catch (IOException e) { - SaturnClient.LOGGER.error("Error reading the theme file", e); - } - } -} diff --git a/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java b/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java index 7f869a3..9f4344f 100644 --- a/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java +++ b/src/main/java/org/saturnclient/saturnclient/cosmetics/CloakFeatureRenderer.java @@ -1,7 +1,7 @@ package org.saturnclient.saturnclient.cosmetics; -import org.saturnclient.saturnclient.SaturnClientConfig; import org.saturnclient.saturnclient.client.player.SaturnPlayer; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import org.saturnclient.saturnclient.cosmetics.cloaks.Cloaks; import net.minecraft.client.render.OverlayTexture; diff --git a/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java b/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java index 1504913..dae59f3 100644 --- a/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java +++ b/src/main/java/org/saturnclient/saturnclient/event/KeyInputHandler.java @@ -6,8 +6,8 @@ import net.minecraft.client.option.KeyBinding; import net.minecraft.client.util.InputUtil; import org.saturnclient.saturnclient.SaturnClient; -import org.saturnclient.saturnclient.SaturnClientConfig; import org.saturnclient.saturnclient.client.ServiceClient; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import org.saturnclient.ui2.screens.EmoteWheel; import org.saturnclient.ui2.screens.ShiftMenu; diff --git a/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java b/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java index b0e9d34..112295a 100644 --- a/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java +++ b/src/main/java/org/saturnclient/saturnclient/mixin/NameTagMixin.java @@ -14,8 +14,8 @@ import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.math.Vec3d; -import org.saturnclient.saturnclient.SaturnClientConfig; import org.saturnclient.saturnclient.client.player.SaturnPlayer; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import java.util.UUID; diff --git a/src/main/java/org/saturnclient/saturnclient/mixin/SetScreenMixin.java b/src/main/java/org/saturnclient/saturnclient/mixin/SetScreenMixin.java index 7e4e0af..4a398a5 100644 --- a/src/main/java/org/saturnclient/saturnclient/mixin/SetScreenMixin.java +++ b/src/main/java/org/saturnclient/saturnclient/mixin/SetScreenMixin.java @@ -1,6 +1,6 @@ package org.saturnclient.saturnclient.mixin; -import org.saturnclient.saturnclient.SaturnClientConfig; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import org.saturnclient.ui2.screens.TitleMenu; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; diff --git a/src/main/java/org/saturnclient/saturnclient/mixin/TabListMixin.java b/src/main/java/org/saturnclient/saturnclient/mixin/TabListMixin.java index a1f4f37..93513cc 100644 --- a/src/main/java/org/saturnclient/saturnclient/mixin/TabListMixin.java +++ b/src/main/java/org/saturnclient/saturnclient/mixin/TabListMixin.java @@ -7,8 +7,8 @@ import net.minecraft.util.Formatting; import java.util.UUID; import org.jetbrains.annotations.Nullable; -import org.saturnclient.saturnclient.SaturnClientConfig; import org.saturnclient.saturnclient.client.player.SaturnPlayer; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; diff --git a/src/main/java/org/saturnclient/ui2/components/Sidebar.java b/src/main/java/org/saturnclient/ui2/components/Sidebar.java index 0a93dff..36b9492 100644 --- a/src/main/java/org/saturnclient/ui2/components/Sidebar.java +++ b/src/main/java/org/saturnclient/ui2/components/Sidebar.java @@ -1,8 +1,8 @@ package org.saturnclient.ui2.components; import org.saturnclient.saturnclient.SaturnClient; -import org.saturnclient.saturnclient.SaturnClientConfig; import org.saturnclient.saturnclient.config.Property; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import org.saturnclient.saturnclient.config.ThemeManager; import org.saturnclient.ui2.resources.Textures; import org.saturnclient.ui2.Element; diff --git a/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java b/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java index 6e4ad52..55d6fe1 100644 --- a/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java +++ b/src/main/java/org/saturnclient/ui2/screens/EmoteWheel.java @@ -1,8 +1,8 @@ package org.saturnclient.ui2.screens; import org.saturnclient.saturnclient.SaturnClient; -import org.saturnclient.saturnclient.SaturnClientConfig; import org.saturnclient.saturnclient.client.ServiceClient; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import org.saturnclient.saturnclient.cosmetics.Emotes; import org.saturnclient.ui2.SaturnScreen; import org.saturnclient.ui2.Utils; diff --git a/src/main/java/org/saturnclient/ui2/screens/ShiftMenu.java b/src/main/java/org/saturnclient/ui2/screens/ShiftMenu.java index 004308e..92866ef 100644 --- a/src/main/java/org/saturnclient/ui2/screens/ShiftMenu.java +++ b/src/main/java/org/saturnclient/ui2/screens/ShiftMenu.java @@ -1,7 +1,7 @@ package org.saturnclient.ui2.screens; import org.saturnclient.saturnclient.SaturnClient; -import org.saturnclient.saturnclient.SaturnClientConfig; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import org.saturnclient.saturnclient.menus.HudEditor; import org.saturnclient.ui2.resources.Textures; import org.saturnclient.ui2.screens.cosmetics.CloakMenu; diff --git a/src/main/java/org/saturnclient/ui2/screens/TitleMenu.java b/src/main/java/org/saturnclient/ui2/screens/TitleMenu.java index a97a6c4..7f0636a 100644 --- a/src/main/java/org/saturnclient/ui2/screens/TitleMenu.java +++ b/src/main/java/org/saturnclient/ui2/screens/TitleMenu.java @@ -1,7 +1,7 @@ package org.saturnclient.ui2.screens; import org.saturnclient.saturnclient.SaturnClient; -import org.saturnclient.saturnclient.SaturnClientConfig; +import org.saturnclient.saturnclient.config.SaturnClientConfig; import org.saturnclient.saturnclient.menus.HudEditor; import org.saturnclient.ui2.resources.Textures; import org.saturnclient.ui2.screens.cosmetics.CloakMenu;