コード例 #1
0
        public void DownloadAssets()
        {
            // UpdateStatusBarAndLog("Checking game assets...");
            jsinit.InstallBarProgress("Проверка ресурсов...", 40);
            VersionManifest selectedVersionManifest = VersionManifest.ParseVersion(
                new DirectoryInfo(_configuration.McVersions + @"\" +
                                  (_versionToLaunch ??
                                   (_selectedProfile.SelectedVersion ?? GetLatestVersion(_selectedProfile)))));

            if (selectedVersionManifest.InheritsFrom != null)
            {
                selectedVersionManifest = selectedVersionManifest.InheritableVersionManifest;
            }
            string file = string.Format(@"{0}\assets\indexes\{1}.json", _configuration.McDirectory,
                                        selectedVersionManifest.AssetsIndex ?? "legacy");

            if (!File.Exists(file))
            {
                if (!Directory.Exists(Path.GetDirectoryName(file)))
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(file));
                }
                new WebClient().DownloadFile(selectedVersionManifest.GetAssetIndexDownloadUrl(), file);
            }
            AssetsManifest manifest = AssetsManifest.Parse(file);

            StatusBarValue = 0;
            SetStatusBarMaxValue(manifest.Objects.Select(pair => pair.Value.Hash.GetFullPath()).Count(filename => !File.Exists(_configuration.McDirectory + @"\assets\objects\" +
                                                                                                                               filename) || _restoreVersion) + 1);
            int maxlen = manifest.Objects.Select(pair => pair.Value).Where(asset => !File.Exists(_configuration.McDirectory + @"\assets\objects\" +
                                                                                                 asset.Hash.GetFullPath())).Count();
            //MessageBox.Show(maxlen.ToString());
            int step = 0;

            foreach (Asset asset in manifest.Objects.Select(pair => pair.Value).Where(asset => !File.Exists(_configuration.McDirectory + @"\assets\objects\" +
                                                                                                            asset.Hash.GetFullPath()) || _restoreVersion))
            {
                string directory = _configuration.McDirectory + @"\assets\objects\" + asset.Hash.GetDirectoryName();
                if (!Directory.Exists(directory))
                {
                    Directory.CreateDirectory(directory);
                }
                try
                {
                    // AppendDebug($"Downloading {asset.Hash}...");
                    step++;
                    int stepf = Convert.ToInt32(Math.Truncate(step * (50F / (float)maxlen)));
                    jsinit.InstallBarProgress("Загрузка ресурса " + asset.AssociatedName, 40 + stepf);
                    new WebClient().DownloadFile(@"http://resources.download.minecraft.net/" + asset.Hash.GetFullPath(),
                                                 _configuration.McDirectory + @"\assets\objects\" + asset.Hash.GetFullPath());
                }
                catch (Exception ex)
                {
                    //  AppendException(ex.ToString());
                }
                StatusBarValue++;
            }
            jsinit.InstallBarProgress("Проверка ресурсов завершена", 90);
            if (selectedVersionManifest.AssetsIndex == null || selectedVersionManifest.AssetsIndex == "legacy")
            {
                StatusBarValue = 0;
                SetStatusBarMaxValue(manifest.Objects.Select(pair => pair.Value.AssociatedName)
                                     .Count(
                                         filename =>
                                         !File.Exists(_configuration.McDirectory + @"\assets\virtual\legacy\" +
                                                      filename) || _restoreVersion) + 1);
                jsinit.InstallBarProgress("Конвертация ресурсов...", 90);
                foreach (Asset asset in manifest.Objects.Select(pair => pair.Value)
                         .Where(asset =>
                                !File.Exists(_configuration.McDirectory + @"\assets\virtual\legacy\" +
                                             asset.AssociatedName) || _restoreVersion))
                {
                    string filename = _configuration.McDirectory + @"\assets\virtual\legacy\" + asset.AssociatedName;
                    try
                    {
                        if (!Directory.Exists(new FileInfo(filename).DirectoryName))
                        {
                            Directory.CreateDirectory(new FileInfo(filename).DirectoryName);
                        }

                        File.Copy(_configuration.McDirectory + @"\assets\objects\" + asset.Hash.GetFullPath(),
                                  filename);
                    }
                    catch (Exception ex)
                    {
                        //  AppendLog(ex.ToString());
                    }
                    StatusBarValue++;
                }
                jsinit.InstallBarProgress("Конвертация ресурсов завершена", 60);
            }
            SetStatusBarVisibility(false);
        }