From ae80ad472d39006a3db09567a1101e15b856cf15 Mon Sep 17 00:00:00 2001 From: Hileb <107909747+Ecdcaeb@users.noreply.github.com> Date: Sat, 3 May 2025 22:39:17 +0800 Subject: [PATCH 1/2] Forge the Config --- .../config/RelauncherConfiguration.java | 134 ++++++++++++------ 1 file changed, 93 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/cleanroommc/relauncher/config/RelauncherConfiguration.java b/src/main/java/com/cleanroommc/relauncher/config/RelauncherConfiguration.java index 27d38f1..cf96bbe 100644 --- a/src/main/java/com/cleanroommc/relauncher/config/RelauncherConfiguration.java +++ b/src/main/java/com/cleanroommc/relauncher/config/RelauncherConfiguration.java @@ -1,84 +1,136 @@ package com.cleanroommc.relauncher.config; import com.cleanroommc.relauncher.CleanroomRelauncher; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.annotations.SerializedName; +import com.google.gson.*; import net.minecraft.launchwrapper.Launch; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; import java.io.*; public class RelauncherConfiguration { - - public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create(); - public static final File FILE = new File(Launch.minecraftHome, "config/relauncher.json"); - + + public static final File FILE = new File(Launch.minecraftHome, "config/cleanroom_relauncher.cfg"); + + private static final Configuration forgedConfig; + + static { - File oldConfig = new File(Launch.minecraftHome, "cleanroom-relauncher-v1.properties"); - if (oldConfig.exists()) { - oldConfig.delete(); + JsonObject v2ConfigJson; + { + File v1Config = new File(Launch.minecraftHome, "cleanroom-relauncher-v1.properties"); + if (v1Config.exists()) { + if (!v1Config.delete()) + CleanroomRelauncher.LOGGER.error("Unable to delete ./cleanroom-relauncher-v1.properties"); + } } - } - - public static RelauncherConfiguration read() { - if (!FILE.exists()) { - return new RelauncherConfiguration(); + { + File v2Config = new File(Launch.minecraftHome, "config/relauncher.json"); + if (v2Config.exists()) { + try (FileReader reader = new FileReader(v2Config)) { + v2ConfigJson = (JsonObject) new JsonParser().parse(reader); + } catch (Throwable e) { + CleanroomRelauncher.LOGGER.error("Unable to read v2Config", e); + v2ConfigJson = null; + } + if (!v2Config.delete()) + CleanroomRelauncher.LOGGER.error("Unable to delete ./config/relauncher.json"); + } else { + v2ConfigJson = null; + } + } + Configuration v3Config = new Configuration(FILE); + v3Config.load(); + Property prop; + { // cleanroom + { // selectedVersion + prop = v3Config.get("cleanroom", "selectedVersion", (String) null, + "The selected version of Cleanroom to relaunch", Property.Type.STRING + ); + // update v2 + if (v2ConfigJson != null) + updateStringElement(prop, v2ConfigJson, "selectedVersion"); + } + { + prop = v3Config.get("cleanroom", "latestVersion", (String) null, + "The latest version of Cleanroom", Property.Type.STRING + ); + if (v2ConfigJson != null) + updateStringElement(prop, v2ConfigJson, "latestVersion"); + } } - try (FileReader reader = new FileReader(FILE)) { - return GSON.fromJson(reader, RelauncherConfiguration.class); - } catch (IOException e) { - CleanroomRelauncher.LOGGER.error("Unable to read config", e); - return new RelauncherConfiguration(); + { + { + prop = v3Config.get("java", "javaPath", (String) null, + "The path of the java executable", Property.Type.STRING + ); + if (v2ConfigJson != null) + updateStringElement(prop, v2ConfigJson, "javaPath"); + } + { + prop = v3Config.get("java", "args", (String) null, + "The java arguments", Property.Type.STRING + ); + if (v2ConfigJson != null) + updateStringElement(prop, v2ConfigJson, "args"); + } + } + if (v3Config.hasChanged()) v3Config.save(); + forgedConfig = v3Config; + + } + + private static void updateStringElement(Property property, JsonObject jsonObject, String name){ + if (jsonObject.has(name)) { + JsonElement element = jsonObject.get(name); + if (element.isJsonPrimitive()) { + JsonPrimitive primitive = element.getAsJsonPrimitive(); + if (primitive.isString()) { + property.set(primitive.getAsString()); + } + } } } - @SerializedName("selectedVersion") - private String cleanroomVersion; - @SerializedName("latestVersion") - private String latestCleanroomVersion; - @SerializedName("javaPath") - private String javaExecutablePath; - @SerializedName("args") - private String javaArguments; + public static RelauncherConfiguration read() { + return new RelauncherConfiguration(); + } public String getCleanroomVersion() { - return cleanroomVersion; + return forgedConfig.getCategory("cleanroom").get("selectedVersion").getString(); } public String getLatestCleanroomVersion() { - return latestCleanroomVersion; + return forgedConfig.getCategory("cleanroom").get("latestVersion").getString(); } public String getJavaExecutablePath() { - return javaExecutablePath; + return forgedConfig.getCategory("java").get("javaPath").getString(); } public String getJavaArguments() { - return javaArguments; + return forgedConfig.getCategory("java").get("args").getString(); } public void setCleanroomVersion(String cleanroomVersion) { - this.cleanroomVersion = cleanroomVersion; + forgedConfig.getCategory("cleanroom").get("selectedVersion").set(cleanroomVersion); } public void setLatestCleanroomVersion(String latestCleanroomVersion) { - this.latestCleanroomVersion = latestCleanroomVersion; + forgedConfig.getCategory("cleanroom").get("latestVersion").set(latestCleanroomVersion); } public void setJavaExecutablePath(String javaExecutablePath) { - this.javaExecutablePath = javaExecutablePath.replace("\\\\", "/"); + forgedConfig.getCategory("java").get("javaPath").set(javaExecutablePath.replace("\\\\", "/")); } public void setJavaArguments(String javaArguments) { - this.javaArguments = javaArguments; + forgedConfig.getCategory("java").get("args").set(javaArguments); } public void save() { - FILE.getParentFile().mkdirs(); - try (FileWriter writer = new FileWriter(FILE)) { - GSON.toJson(this, writer); - } catch (IOException e) { - CleanroomRelauncher.LOGGER.error("Unable to save config", e); + if (forgedConfig.hasChanged()) { + forgedConfig.save(); } } From dce71320b58660cd371a73cc88da89d0ac56ac09 Mon Sep 17 00:00:00 2001 From: Hileb <107909747+Ecdcaeb@users.noreply.github.com> Date: Thu, 8 May 2025 13:08:59 +0800 Subject: [PATCH 2/2] config default notnull --- .../config/RelauncherConfiguration.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/cleanroommc/relauncher/config/RelauncherConfiguration.java b/src/main/java/com/cleanroommc/relauncher/config/RelauncherConfiguration.java index cf96bbe..a5b6321 100644 --- a/src/main/java/com/cleanroommc/relauncher/config/RelauncherConfiguration.java +++ b/src/main/java/com/cleanroommc/relauncher/config/RelauncherConfiguration.java @@ -44,7 +44,7 @@ public class RelauncherConfiguration { Property prop; { // cleanroom { // selectedVersion - prop = v3Config.get("cleanroom", "selectedVersion", (String) null, + prop = v3Config.get("cleanroom", "selectedVersion", "", "The selected version of Cleanroom to relaunch", Property.Type.STRING ); // update v2 @@ -52,7 +52,7 @@ public class RelauncherConfiguration { updateStringElement(prop, v2ConfigJson, "selectedVersion"); } { - prop = v3Config.get("cleanroom", "latestVersion", (String) null, + prop = v3Config.get("cleanroom", "latestVersion", "", "The latest version of Cleanroom", Property.Type.STRING ); if (v2ConfigJson != null) @@ -61,14 +61,14 @@ public class RelauncherConfiguration { } { { - prop = v3Config.get("java", "javaPath", (String) null, + prop = v3Config.get("java", "javaPath", "", "The path of the java executable", Property.Type.STRING ); if (v2ConfigJson != null) updateStringElement(prop, v2ConfigJson, "javaPath"); } { - prop = v3Config.get("java", "args", (String) null, + prop = v3Config.get("java", "args", "", "The java arguments", Property.Type.STRING ); if (v2ConfigJson != null) @@ -96,20 +96,24 @@ public static RelauncherConfiguration read() { return new RelauncherConfiguration(); } + private static String nullable(String str) { + return str == null || str.isEmpty() ? null : str; + } + public String getCleanroomVersion() { - return forgedConfig.getCategory("cleanroom").get("selectedVersion").getString(); + return nullable(forgedConfig.getCategory("cleanroom").get("selectedVersion").getString()); } public String getLatestCleanroomVersion() { - return forgedConfig.getCategory("cleanroom").get("latestVersion").getString(); + return nullable(forgedConfig.getCategory("cleanroom").get("latestVersion").getString()); } public String getJavaExecutablePath() { - return forgedConfig.getCategory("java").get("javaPath").getString(); + return nullable(forgedConfig.getCategory("java").get("javaPath").getString()); } public String getJavaArguments() { - return forgedConfig.getCategory("java").get("args").getString(); + return nullable(forgedConfig.getCategory("java").get("args").getString()); } public void setCleanroomVersion(String cleanroomVersion) {