Пример #1
0
        /// <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));
        }
Пример #2
0
        /// <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");
                }
            }
        }
Пример #3
0
 private static string GetLibPath(Modules.Library lib)
 {
     return(string.Format(@"{0}\{1}\{2}\{1}-{2}.jar", lib.Package.Replace(".", "\\"), lib.Name, lib.Version));
 }
Пример #4
0
        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);
        }