public static MVersion ParseFromJson(string json) { try { var job = JObject.Parse(json); // id var id = job["id"]?.ToString(); if (string.IsNullOrEmpty(id)) { throw new MVersionParseException("Empty version id"); } var version = new MVersion(id); // javaVersion version.JavaVersion = job["javaVersion"]?["component"]?.ToString(); // assets var assetindex = job["assetIndex"]; var assets = job["assets"]; if (assetindex != null) { version.AssetId = assetindex["id"]?.ToString(); version.AssetUrl = assetindex["url"]?.ToString(); version.AssetHash = assetindex["sha1"]?.ToString(); } else if (assets != null) { version.AssetId = assets.ToString(); } // client jar var client = job["downloads"]?["client"]; if (client != null) { version.ClientDownloadUrl = client["url"]?.ToString(); version.ClientHash = client["sha1"]?.ToString(); } // libraries if (job["libraries"] is JArray libJArr) { var libList = new List <MLibrary>(libJArr.Count); var libParser = new MLibraryParser(); foreach (var item in libJArr) { var libs = libParser.ParseJsonObject((JObject)item); if (libs != null) { libList.AddRange(libs); } } version.Libraries = libList.ToArray(); } // mainClass version.MainClass = job["mainClass"]?.ToString(); // argument version.MinecraftArguments = job["minecraftArguments"]?.ToString(); var ag = job["arguments"]; if (ag != null) { if (ag["game"] is JArray gameArg) { version.GameArguments = argParse(gameArg); } if (ag["jvm"] is JArray jvmArg) { version.JvmArguments = argParse(jvmArg); } } // metadata version.ReleaseTime = job["releaseTime"]?.ToString(); var type = job["type"]?.ToString(); version.TypeStr = type; version.Type = MVersionTypeConverter.FromString(type); // inherits if (job["inheritsFrom"] != null) { version.IsInherited = true; version.ParentVersionId = job["inheritsFrom"]?.ToString(); } else { version.Jar = version.Id; } return(version); } catch (MVersionParseException) { throw; } catch (Exception ex) { throw new MVersionParseException(ex); } }
public void InheritFrom(MVersion parentVersion) { // Inherit list // Overload : AssetId, AssetUrl, AssetHash, ClientDownloadUrl, ClientHash, MainClass, MinecraftArguments // Combine : Libraries, GameArguments, JvmArguments // Overloads if (nc(AssetId)) { AssetId = parentVersion.AssetId; } if (nc(AssetUrl)) { AssetUrl = parentVersion.AssetUrl; } if (nc(AssetHash)) { AssetHash = parentVersion.AssetHash; } if (nc(ClientDownloadUrl)) { ClientDownloadUrl = parentVersion.ClientDownloadUrl; } if (nc(ClientHash)) { ClientHash = parentVersion.ClientHash; } if (nc(MainClass)) { MainClass = parentVersion.MainClass; } if (nc(MinecraftArguments)) { MinecraftArguments = parentVersion.MinecraftArguments; } Jar = parentVersion.Jar; // Combine if (parentVersion.Libraries != null) { if (Libraries != null) { Libraries = Libraries.Concat(parentVersion.Libraries).ToArray(); } else { Libraries = parentVersion.Libraries; } } if (parentVersion.GameArguments != null) { if (GameArguments != null) { GameArguments = GameArguments.Concat(parentVersion.GameArguments).ToArray(); } else { GameArguments = parentVersion.GameArguments; } } if (parentVersion.JvmArguments != null) { if (JvmArguments != null) { JvmArguments = JvmArguments.Concat(parentVersion.JvmArguments).ToArray(); } else { JvmArguments = parentVersion.JvmArguments; } } }
public static MVersion ParseFromJson(string json) { var version = new MVersion(); var job = JObject.Parse(json); // id version.Id = job["id"]?.ToString(); // assets var assetindex = (JObject)job["assetIndex"]; var assets = job["assets"]; if (assetindex != null) { version.AssetId = n(assetindex["id"]?.ToString()); version.AssetUrl = n(assetindex["url"]?.ToString()); version.AssetHash = n(assetindex["sha1"]?.ToString()); } else if (assets != null) { version.AssetId = assets.ToString(); } // client jar var client = job["downloads"]?["client"]; if (client != null) { version.ClientDownloadUrl = client["url"]?.ToString(); version.ClientHash = client["sha1"]?.ToString(); } // libraries var libJArr = (JArray)job["libraries"]; var libList = new List <MLibrary>(libJArr.Count); foreach (var item in libJArr) { var libs = MLibraryParser.ParseJsonObject((JObject)item); if (libs != null) { libList.AddRange(libs); } } version.Libraries = libList.ToArray(); // mainClass version.MainClass = n(job["mainClass"]?.ToString()); // argument var ma = job["minecraftArguments"]?.ToString(); if (ma != null) { version.MinecraftArguments = ma; } var ag = job["arguments"]; if (ag != null) { if (ag["game"] != null) { version.GameArguments = argParse((JArray)ag["game"]); } if (ag["jvm"] != null) { version.JvmArguments = argParse((JArray)ag["jvm"]); } } // metadata version.ReleaseTime = job["releaseTime"]?.ToString(); var ype = job["type"]?.ToString(); version.TypeStr = ype; version.Type = MVersionTypeConverter.FromString(ype); // inherits if (job["inheritsFrom"] != null) { version.IsInherited = true; version.ParentVersionId = job["inheritsFrom"].ToString(); } else { version.Jar = version.Id; } return(version); }