using Newtonsoft.Json; namespace Млаумчерб.Клиент.классы; public class Artifact { [JsonRequired] public string url { get; set; } = ""; [JsonRequired] public string sha1 { get; set; } = ""; [JsonRequired] public int size { get; set; } } public class Os { [JsonRequired] public string name { get; set; } = ""; } public class Rule { [JsonRequired] public string action { get; set; } = ""; public Os? os { get; set; } public Dictionary? features { get; set; } } public class Classifiers { [JsonProperty("natives-linux")] public Artifact? nativeslinux { get; set; } [JsonProperty("natives-osx")] public Artifact? nativesosx { get; set; } [JsonProperty("natives-windows")] public Artifact? nativeswindows { get; set; } } public class LibraryDownloads { public Artifact? artifact { get; set; } public Classifiers? classifiers { get; set; } } public class Extract { public List? exclude { get; set; } } public class Natives { public string? linux { get; set; } public string? osx { get; set; } public string? windows { get; set; } } public class Library { [JsonRequired] public string name { get; set; } = ""; public List? rules { get; set; } public Natives? natives { get; set; } public Extract? extract { get; set; } [JsonRequired] public LibraryDownloads downloads { get; set; } = null!; } public class AssetIndex { [JsonRequired] public string id { get; set; } = ""; [JsonRequired] public int totalSize { get; set; } [JsonRequired] public bool known { get; set; } [JsonRequired] public string url { get; set; } = ""; [JsonRequired] public string sha1 { get; set; } = ""; [JsonRequired] public int size { get; set; } } public class Downloads { [JsonRequired] public Artifact client { get; set; } = null!; } public class JavaVersion { [JsonRequired] public string component { get; set; } = ""; [JsonRequired] public int majorVersion { get; set; } } public class ArgValue { [JsonRequired] public string value { get; set; } = ""; public List rules { get; set; } = new(); } public class ArgumentsNew { [JsonRequired] public List jvm { get; set; } = new(); [JsonRequired] public List game { get; set; } = new(); } public class MinecraftVersionDescriptor { [JsonRequired] public string id { get; set; } = ""; [JsonRequired] public string jar { get; set; } = ""; [JsonRequired] public string family { get; set; } = ""; [JsonRequired] public DateTime time { get; set; } [JsonRequired] public DateTime releaseTime { get; set; } [JsonRequired] public string type { get; set; } = ""; [JsonRequired] public string mainClass { get; set; } = ""; [JsonRequired] public Downloads downloads { get; set; } = null!; [JsonRequired] public JavaVersion javaVersion { get; set; } = null!; [JsonRequired] public List libraries { get; set; } = null!; [JsonRequired] public AssetIndex assetIndex { get; set; } = null!; [JsonRequired] public string assets { get; set; } = ""; public string? minecraftArguments { get; set; } public ArgumentsNew? arguments { get; set; } } public static class Буржуазия { public static bool CheckOs(Os os) { return os.name switch { "osx" => OperatingSystem.IsWindows(), "linux" => OperatingSystem.IsLinux(), "windows" => OperatingSystem.IsWindows(), _ => throw new ArgumentOutOfRangeException(os.name) }; } public static bool CheckRules(ICollection rules, ICollection enabled_features) { bool allowed = false; foreach (var r in rules) { if (r.os == null || CheckOs(r.os)) { if (r.features != null) { foreach (var feature in enabled_features) { if(r.features.TryGetValue(feature, out bool is_enabled)) { if (is_enabled) { if (r.action == "allow") allowed = true; else return false; } } } } if (r.action == "allow") allowed = true; else return false; } } return allowed; } }