/// <summary> /// 获取Lib下载任务 /// </summary> /// <param name="source">下载源</param> /// <param name="lib">lib实例</param> /// <param name="core">所使用的核心</param> /// <returns>下载任务</returns> public static DownloadTask GetLibDownloadTask(DownloadSource source, Modules.Library lib, LaunchHandler core) { string from = GetLibDownloadURL(source, lib); string to = core.GetLibraryPath(lib); return(new DownloadTask("版本依赖库文件" + lib.Name, from, to)); }
/// <summary> /// 获取Lib下载地址 /// </summary> /// <param name="source">下载源</param> /// <param name="lib">lib实例</param> /// <returns>下载URL</returns> public static string GetLibDownloadURL(DownloadSource source, Modules.Library lib) { string libUrlPath = GetLibPath(lib).Replace('\\', '/'); if (lib.Url != null) { return(DoURLReplace(source, lib.Url) + libUrlPath); } else { switch (source) { case DownloadSource.Mojang: return(MojanglibrariesUrl + libUrlPath); case DownloadSource.BMCLAPI: return(BMCLLibrariesURL + libUrlPath); default: throw new ArgumentNullException("source"); } } }
private static string GetLibPath(Modules.Library lib) { return(string.Format(@"{0}\{1}\{2}\{1}-{2}.jar", lib.Package.Replace(".", "\\"), lib.Name, lib.Version)); }
public Modules.Version JsonToVersion(string jsonStr) { if (string.IsNullOrWhiteSpace(jsonStr)) { return(null); } var obj = JObject.Parse(jsonStr); Modules.Version ver = new Modules.Version(); ver = obj.ToObject <Modules.Version>(); JObject innerVer = null; if (ver.InheritsVersion != null) { innerVer = JObject.Parse(GetVersionJsonText(ver.InheritsVersion)); } if (obj.ContainsKey("arguments")) { #region 处理新版本引导 #region 处理版本继承 if (innerVer != null && innerVer.ContainsKey("arguments")) { JObject innerVerArg = (JObject)innerVer["arguments"]; if (innerVerArg.ContainsKey("game")) { ver.MinecraftArguments += string.Format("{0} ", ParseGameArgFromJson(innerVerArg["game"])); } if (innerVerArg.ContainsKey("jvm")) { ver.JvmArguments += string.Format("{0} ", ParseJvmArgFromJson(innerVerArg["jvm"])); } } #endregion JObject verArg = (JObject)obj["arguments"]; #region 游戏参数 if (verArg.ContainsKey("game")) { JToken gameArg = verArg["game"]; ver.MinecraftArguments += ParseGameArgFromJson(gameArg); } #endregion #region JVM参数 if (verArg.ContainsKey("jvm")) { JToken jvmArg = verArg["jvm"]; ver.JvmArguments += ParseJvmArgFromJson(jvmArg); } #endregion } #endregion else { #region 旧版本添加默认JVM参数 ver.JvmArguments = "-Djava.library.path=${natives_directory} -cp ${classpath}"; #endregion } #region 处理库文件 ver.Libraries = new List <Modules.Library>(); ver.Natives = new List <Modules.Native>(); var libToken = obj["libraries"]; foreach (JToken lib in libToken) { var libObj = lib.ToObject <Library>(); var parts = libObj.Name.Split(':'); if (libObj.Natives == null) { if (CheckAllowed(libObj.Rules)) { Modules.Library library = new Modules.Library() { Package = parts[0], Name = parts[1], Version = parts[2] }; if (!string.IsNullOrWhiteSpace(libObj.Url)) { library.Url = libObj.Url; } ver.Libraries.Add(library); } } else { if (CheckAllowed(libObj.Rules)) { var native = new Modules.Native { Package = parts[0], Name = parts[1], Version = parts[2], NativeSuffix = libObj.Natives["windows"].Replace("${arch}", SystemTools.GetSystemArch() == ArchEnum.x64 ? "64" : "32") }; ver.Natives.Add(native); if (libObj.Extract != null) { native.Exclude = libObj.Extract.Exculde; } } } if (((JObject)lib).ContainsKey("url")) { } } #endregion #region 处理版本继承 if (ver.InheritsVersion != null) { var iv = GetVersion(ver.InheritsVersion); if (iv != null) { ver.Assets = iv.Assets; ver.AssetIndex = iv.AssetIndex; ver.Natives.AddRange(iv.Natives); ver.Libraries.AddRange(iv.Libraries); ver.Jar = iv.ID; } } #endregion return(ver); }