using System.Collections.Generic; using System.Text.Json.Serialization; namespace ModpackLauncher.Models; public sealed class Manifest { [JsonPropertyName("name")] public string? Name { get; set; } [JsonPropertyName("version")] public string? Version { get; set; } [JsonPropertyName("minecraft")] public MinecraftSpec Minecraft { get; set; } = new(); [JsonPropertyName("loader")] public LoaderSpec? Loader { get; set; } [JsonPropertyName("files")] public List Files { get; set; } = new(); /// /// Optional. The launcher version that the modpack publisher expects clients /// to be running. If a client's assembly version is lower than this, the launcher /// surfaces a "newer version available" banner pointing at . /// [JsonPropertyName("launcherVersion")] public string? LauncherVersion { get; set; } /// Public download URL for the latest launcher (shown in the banner). [JsonPropertyName("launcherUrl")] public string? LauncherUrl { get; set; } /// /// Optional. If present, the launcher writes this entry into the player's /// servers.dat on first install so the modpack's server appears in /// the multiplayer list automatically -- no copy-paste needed. /// [JsonPropertyName("defaultServer")] public DefaultServer? DefaultServer { get; set; } /// /// Optional. Filename (in shaderpacks/) of a shader pack to enable by default /// for fresh installs. Existing installs with a different shader chosen are /// left alone -- this is a default, not a forced override. /// [JsonPropertyName("defaultShader")] public string? DefaultShader { get; set; } /// /// Optional. Public base URL of the brass-sigil-server admin panel (e.g. /// https://bns-admin.sijbers.uk). The launcher uses this to send whitelist /// requests on the player's behalf -- nothing else. /// [JsonPropertyName("panelUrl")] public string? PanelUrl { get; set; } } public sealed class DefaultServer { [JsonPropertyName("name")] public string Name { get; set; } = ""; [JsonPropertyName("ip")] public string Ip { get; set; } = ""; } public sealed class MinecraftSpec { [JsonPropertyName("version")] public string Version { get; set; } = ""; } public sealed class LoaderSpec { /// "forge" | "fabric" | "neoforge" | "vanilla" (or null) [JsonPropertyName("type")] public string Type { get; set; } = "vanilla"; [JsonPropertyName("version")] public string Version { get; set; } = ""; } public sealed class ManifestFile { [JsonPropertyName("path")] public string Path { get; set; } = ""; [JsonPropertyName("url")] public string Url { get; set; } = ""; [JsonPropertyName("sha1")] public string? Sha1 { get; set; } [JsonPropertyName("size")] public long? Size { get; set; } } public sealed class PackVersionRecord { [JsonPropertyName("name")] public string? Name { get; set; } [JsonPropertyName("version")] public string? Version { get; set; } [JsonPropertyName("syncedAt")] public string? SyncedAt { get; set; } }