158 lines
4.7 KiB
C#
158 lines
4.7 KiB
C#
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<string, bool>? 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<string>? 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<Rule>? 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<Rule> rules { get; set; } = new();
|
||
}
|
||
|
||
public class ArgumentsNew
|
||
{
|
||
[JsonRequired] public List<ArgValue> jvm { get; set; } = new();
|
||
[JsonRequired] public List<ArgValue> 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<Library> 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<Rule> rules, ICollection<string> 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;
|
||
}
|
||
} |