getAssets method
Implementation
Future getAssets() async {
String dir = path.join(root, 'assets', 'indexes').replaceAll("\\", "/");
await createDirIfNotExists(dir);
String assetIndex = path.join(dir, "${this.version["assetIndex"]["id"]}.json");
if(!File(assetIndex).existsSync()) {
await downloadFile(this.version["assetIndex"]["url"], path.join(root, 'assets', 'indexes', "${this.version["assetIndex"]["id"]}.json"));
}
Map<String,dynamic> index = json.decode(File(assetIndex).readAsStringSync());
List<void Function()> funcs = [];
List<Map<String,String>> infos = [];
index["objects"].forEach((key, value) {
String hash = value["hash"];
String subhash = hash.substring(0,2);
String assetDirectory = path.join(root, 'assets');
String subAsset = path.join(assetDirectory, 'objects', subhash);
if(!File(path.join(subAsset, hash)).existsSync()) {
funcs.add(() async {
await createDirIfNotExists(subAsset);
await downloadFile('https://resources.download.minecraft.net/${subhash}/${hash}', path.join(subAsset,hash));
});
infos.add({"file": key, "hash": hash, "subhash": subhash});
};
});
if(funcs.length > 0) {
AdvancedProgressBar progress = AdvancedProgressBar(max: funcs.length, value: 0);
progress.update(value: 0);
for(int i=0;i<funcs.length;i++) {
progress.update(actual: "| downloading asset asset: ${infos[i]["subhash"]}/${infos[i]["hash"]}: (${infos[i]["file"]})...");
await funcs[i]();
progress.update(value: i + 1);
}
progress.kill();
}
}