コード例 #1
0
ファイル: MForge.cs プロジェクト: aleffeh/CmlLib.Core
        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
            });
        }