public static string GetCoreJarDownloadURL(DownloadSource source, Modules.MCVersion ver) { if (ver.Downloads?.Client != null) { return(DoURLReplace(source, ver.Downloads.Client.URL)); } else { return(string.Format("{0}version/{1}/client", BMCLUrl, ver.ID)); } }
private string GetClassPaths(List <Modules.Library> libs, Modules.MCVersion ver) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append('\"'); foreach (var item in libs) { string libPath = handler.GetLibraryPath(item); stringBuilder.AppendFormat("{0};", libPath); } stringBuilder.Append(handler.GetJarPath(ver)); stringBuilder.Append('\"'); return(stringBuilder.ToString().Trim()); }
public Modules.MCVersion JsonToVersion(JObject obj) { Modules.MCVersion ver = new Modules.MCVersion(); ver = obj.ToObject <Modules.MCVersion>(); JObject innerVer = null; if (ver.InheritsVersion != null) { SendDebugLog(string.Format("检测到\"{0}\"继承于\"{1}\"", ver.ID, ver.InheritsVersion)); string innerJsonStr = GetVersionJsonText(ver.InheritsVersion); if (innerJsonStr != null) { innerVer = JObject.Parse(innerJsonStr); } } if (obj.ContainsKey("arguments")) { #region 处理新版本引导 SendDebugLog(string.Format("检测到\"{0}\"使用新版本启动参数", ver.ID)); #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参数 SendDebugLog(string.Format("检测到\"{0}\"使用旧版本启动参数", ver.ID)); ver.JvmArguments = "-Djava.library.path=${natives_directory} -cp ${classpath}"; #endregion } #region 处理依赖 ver.Libraries = new List <Library>(); ver.Natives = new List <Native>(); var libToken = obj["libraries"]; foreach (JToken lib in libToken) { var libObj = lib.ToObject <JLibrary>(); if (CheckAllowed(libObj.Rules)) { if (libObj.Natives == null) { //不为native Library library = new Library(libObj.Name); if (!string.IsNullOrWhiteSpace(libObj.Url)) { library.Url = libObj.Url; } if (libObj.Downloads?.Artifact != null) { library.LibDownloadInfo = libObj.Downloads.Artifact; } ver.Libraries.Add(library); } else { ///为native Native native = new Native(libObj.Name, libObj.Natives["windows"].Replace("${arch}", SystemTools.GetSystemArch() == ArchEnum.x64 ? "64" : "32")); if (libObj.Extract != null) { native.Exclude = libObj.Extract.Exculde; } if (libObj.Downloads?.Artifact != null) { native.LibDownloadInfo = libObj.Downloads.Artifact; } if (libObj.Downloads?.Classifiers?.Natives != null) { native.NativeDownloadInfo = libObj.Downloads.Classifiers.Natives; } ver.Natives.Add(native); } } } #endregion #region 处理版本继承 if (innerVer != null) { var iv = JsonToVersion(innerVer); 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); }
public async static Task <List <VersionOption> > GetOptionsAsync(VersionOption.Type type, LaunchHandler core, Modules.MCVersion version) { return(await Task.Factory.StartNew(() => { if (version != null) { try { string Path = ""; switch (type) { case VersionOption.Type.options: Path = core.GetVersionOptionsPath(version); break; case VersionOption.Type.optionsof: Path = core.GetVersionOptionsofPath(version); break; default: return null; } if (!File.Exists(Path)) { return null; } string[] lines = File.ReadAllLines(Path); List <VersionOption> options = new List <VersionOption>(); foreach (var item in lines) { string[] kv = item.Split(':'); if (kv.Length < 2) { continue; } if (kv.Length > 2) { string a = kv[1]; for (int i = 2; i < kv.Length; i++) { a += ":" + kv[i]; } options.Add(new VersionOption() { Key = kv[0], Value = a }); } else { options.Add(new VersionOption() { Key = kv[0], Value = kv[1] }); } } return options; } catch (Exception) { return null; } } else { return null; } })); }
public async static Task SaveOptionsAsync(VersionOption.Type type, List <VersionOption> opts, LaunchHandler core, Modules.MCVersion version) { await Task.Factory.StartNew(() => { try { if (version != null && opts != null) { List <string> optLines = new List <string>(); foreach (var item in opts) { optLines.Add(item.ToString()); } string Path = ""; switch (type) { case VersionOption.Type.options: Path = core.GetVersionOptionsPath(version); break; case VersionOption.Type.optionsof: Path = core.GetVersionOptionsofPath(version); break; } File.WriteAllLines(Path, optLines.ToArray()); } } catch (Exception) { } }); }
public string GetVersionOptionsofPath(Modules.MCVersion version) { return(PathManager.GetVersionOptionsofPath(VersionIsolation, GameRootPath, version)); }
public string GetJarPath(Modules.MCVersion ver) { return(PathManager.GetJarPath(GameRootPath, ver)); }