using System; using System.IO; using System.Text.Json; using System.Text.Json.Serialization; namespace ModpackLauncher.Models; public sealed class LauncherSettings { [JsonPropertyName("memoryMB")] public int? MemoryMB { get; set; } [JsonPropertyName("installDirOverride")] public string? InstallDirOverride { get; set; } /// /// Settings live next to the launcher exe ("sidecar"), so each copy of /// the launcher has its own independent state. Drop the launcher in a /// new folder on a different machine, or alongside the existing one in /// a separate directory, and they remember their own install paths, /// memory choices, etc. Matches the portable-app convention. /// private static string FilePath => Path.Combine(AppContext.BaseDirectory, "launcher-settings.json"); public static LauncherSettings Load() { try { if (!File.Exists(FilePath)) return new LauncherSettings(); return JsonSerializer.Deserialize(File.ReadAllText(FilePath)) ?? new LauncherSettings(); } catch { return new LauncherSettings(); } } public void Save() { try { File.WriteAllText( FilePath, JsonSerializer.Serialize(this, new JsonSerializerOptions { WriteIndented = true }) ); } catch { // best-effort } } }