示例#1
0
 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));
     }
 }
示例#2
0
        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());
        }
示例#3
0
        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);
        }
示例#4
0
        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;
                }
            }));
        }
示例#5
0
        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) { }
            });
        }
示例#6
0
 public string GetVersionOptionsofPath(Modules.MCVersion version)
 {
     return(PathManager.GetVersionOptionsofPath(VersionIsolation, GameRootPath, version));
 }
示例#7
0
 public string GetJarPath(Modules.MCVersion ver)
 {
     return(PathManager.GetJarPath(GameRootPath, ver));
 }