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); }