Beispiel #1
0
        /// <summary>
        /// Download all required library files
        /// </summary>
        public void DownloadLibraries()
        {
            int index    = 0;
            int maxCount = profile.Libraries.Length;

            foreach (var item in profile.Libraries)
            {
                try
                {
                    if (CheckDownloadRequireLibrary(item))
                    {
                        Directory.CreateDirectory(Path.GetDirectoryName(item.Path));
                        web.DownloadFile(item.Url, item.Path);
                    }
                }
                catch
                {
                }

                l(MFile.Library, item.Name, maxCount, ++index); // event
            }
        }
Beispiel #2
0
        public string CheckJava(string binaryName)
        {
            var javapath = Path.Combine(RuntimeDirectory, "bin", binaryName);

            if (!File.Exists(javapath))
            {
                string json = "";

                var WorkingPath = Path.Combine(Path.GetTempPath(), "temp_download_runtime");

                if (Directory.Exists(WorkingPath))
                {
                    IOUtil.DeleteDirectory(WorkingPath);
                }
                Directory.CreateDirectory(WorkingPath);

                var javaUrl = "";
                using (var wc = new WebClient())
                {
                    json = wc.DownloadString(MojangServer.LauncherMeta);

                    var job = JObject.Parse(json)[MRule.OSName];
                    javaUrl = job[MRule.Arch]?["jre"]?["url"]?.ToString();

                    if (string.IsNullOrEmpty(javaUrl))
                    {
                        throw new Exception("unsupport os");
                    }

                    Directory.CreateDirectory(RuntimeDirectory);
                }

                var downloader = new WebDownload();
                downloader.DownloadProgressChangedEvent += Downloader_DownloadProgressChangedEvent;
                downloader.DownloadFile(javaUrl, Path.Combine(WorkingPath, "javatemp.lzma"));
                DownloadCompleted?.Invoke(this, new EventArgs());

                var lzma = Path.Combine(WorkingPath, "javatemp.lzma");
                var zip  = Path.Combine(WorkingPath, "javatemp.zip");

                var szip = new SevenZipWrapper();
                szip.ProgressChange += Szip_ProgressChange;
                szip.DecompressFileLZMA(lzma, zip);

                var z = new SharpZip(zip);
                z.ProgressEvent += Z_ProgressEvent;
                z.Unzip(RuntimeDirectory);

                if (!File.Exists(javapath))
                {
                    IOUtil.DeleteDirectory(WorkingPath);
                    throw new Exception("Failed Download");
                }

                if (MRule.OSName != "windows")
                {
                    IOUtil.Chmod(javapath, IOUtil.Chmod755);
                }
            }

            return(javapath);
        }
Beispiel #3
0
        public void InstallForge(string mcversion, string forgeversion)
        {
            FileChanged?.Invoke(new DownloadFileChangedEventArgs()
            {
                FileKind            = MFile.Library,
                FileName            = "installer",
                ProgressedFileCount = 0,
                TotalFileCount      = 2
            });

            var versionname = $"{mcversion}-forge{mcversion}-{forgeversion}";
            var manifest    = Path.Combine(
                Minecraft.Versions,
                versionname,
                versionname + ".json"
                );

            var installer = $"{MavenServer}{mcversion}-{forgeversion}/forge-{mcversion}-{forgeversion}-installer.jar";

            var jsondata = new StringBuilder();
            var res      = WebRequest.Create(installer).GetResponse().GetResponseStream();

            using (res)
                using (var s = new ZipInputStream(res))
                {
                    ZipEntry e;
                    while ((e = s.GetNextEntry()) != null)
                    {
                        if (!e.IsFile || e.Name != "install_profile.json")
                        {
                            continue;
                        }

                        var buffer = new byte[1024];
                        while (true)
                        {
                            int size = s.Read(buffer, 0, buffer.Length);
                            if (size == 0)
                            {
                                break;
                            }

                            jsondata.Append(Encoding.UTF8.GetString(buffer, 0, size));
                        }
                    }
                }

            if (jsondata.Length == 0)
            {
                throw new Exception("can't find profile file");
            }

            var libraries = JObject.Parse(jsondata.ToString())["versionInfo"];

            FileChanged?.Invoke(new DownloadFileChangedEventArgs()
            {
                FileKind            = MFile.Library,
                FileName            = "universal",
                ProgressedFileCount = 1,
                TotalFileCount      = 2
            });

            var universalUrl = $"{MavenServer}{mcversion}-{forgeversion}/forge-{mcversion}-{forgeversion}-universal.jar";

            var dest = Path.Combine(
                Minecraft.Library,
                "net",
                "minecraftforge",
                "forge",
                $"{mcversion}-{forgeversion}",
                $"forge-{mcversion}-{forgeversion}.jar"
                );

            Directory.CreateDirectory(Path.GetDirectoryName(dest));
            var downloader = new WebDownload();

            downloader.DownloadFile(universalUrl, dest);

            Directory.CreateDirectory(Path.GetDirectoryName(manifest));
            File.WriteAllText(manifest, libraries.ToString());

            FileChanged?.Invoke(new DownloadFileChangedEventArgs()
            {
                FileKind            = MFile.Library,
                FileName            = "universal",
                ProgressedFileCount = 2,
                TotalFileCount      = 2
            });
        }