|
@@ -291,7 +291,7 @@ internal class Downloader
|
|
|
private async Task DownloadAssets(HttpClient httpClient, Entity.Version.Version versionJson, CancellationToken cancellationToken)
|
|
|
{
|
|
|
var assetsJson = await Downloader.DownloadAndDeserializeJsonData<AssetsManifest>(versionJson.AssetIndex.Url);
|
|
|
- var assetsPath = Settings.minecraftForlderPath + "assets/" + versionJson.Assets + "/objects";
|
|
|
+ var assetsPath = $"{Settings.minecraftForlderPath}{(versionJson.Assets == "pre-1.6" ? "resources" : $"assets/{versionJson.Assets}/objects")}";
|
|
|
var assetsUrl = "https://resources.download.minecraft.net/";
|
|
|
|
|
|
//download assets json
|
|
@@ -313,32 +313,41 @@ internal class Downloader
|
|
|
{
|
|
|
assetsDownloadTasks.Add(Task.Run(async () =>
|
|
|
{
|
|
|
+ var isPreVersion = versionJson.Assets == "pre-1.6";
|
|
|
|
|
|
- var folder = asset.Value.Hash[..2];
|
|
|
+ var folder = isPreVersion ?
|
|
|
+ Path.GetDirectoryName(asset.Key) :
|
|
|
+ asset.Value.Hash[..2];
|
|
|
+
|
|
|
+ var name = isPreVersion ?
|
|
|
+ Path.GetFileName(asset.Key) :
|
|
|
+ asset.Value.Hash;
|
|
|
+
|
|
|
+ var assetRoot = folder.Contains("icons") ? $"{Settings.minecraftForlderPath}assets/{versionJson.Assets}" : assetsPath;
|
|
|
|
|
|
var chksum = String.Empty;
|
|
|
//here hash check
|
|
|
- if (File.Exists(assetsPath + "/" + folder + "/" + asset.Value.Hash))
|
|
|
+ if (File.Exists(Path.Combine(assetRoot, folder, name)))
|
|
|
{
|
|
|
Parameters.Action.DownloadingFileName($"Checking hash {assetsIterator} of {assetsCount}");
|
|
|
- using FileStream fop = File.OpenRead(assetsPath + "/" + folder + "/" + asset.Value.Hash);
|
|
|
+ using FileStream fop = File.OpenRead(Path.Combine(assetRoot, folder, name));
|
|
|
byte[] hash = System.Security.Cryptography.SHA1.Create().ComputeHash(fop);
|
|
|
chksum = BitConverter.ToString(hash).Replace("-", String.Empty).ToLower();
|
|
|
fop.Close();
|
|
|
}
|
|
|
|
|
|
- if (chksum != asset.Value.Hash)
|
|
|
+ if (chksum != (isPreVersion ? asset.Value.Hash : name))
|
|
|
{
|
|
|
await concurrencySemaphore.WaitAsync(cancellationToken);
|
|
|
try
|
|
|
{
|
|
|
- if (!Directory.Exists(assetsPath + "/" + folder))
|
|
|
- Directory.CreateDirectory(assetsPath + "/" + folder);
|
|
|
+ if (!Directory.Exists(assetRoot + "/" + folder))
|
|
|
+ Directory.CreateDirectory(assetRoot + "/" + folder);
|
|
|
|
|
|
- Settings.logger.Debug("Downloading asset: {0} ", asset.Value.Hash);
|
|
|
+ Settings.logger.Debug("Downloading asset: {0} ", name);
|
|
|
//DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
|
|
|
Parameters.Action.DownloadingFileName($"Asset {assetsIterator} of {assetsCount}");
|
|
|
- await DownloadFileAsync(assetsUrl + folder + "/" + asset.Value.Hash, assetsPath + "/" + folder + "/" + asset.Value.Hash, cancellationToken);
|
|
|
+ await DownloadFileAsync(assetsUrl + asset.Value.Hash[..2] + "/" + asset.Value.Hash, Path.Combine(assetRoot, folder , name), cancellationToken, httpClient);
|
|
|
}
|
|
|
finally
|
|
|
{
|