Skip to content

Commit 4fa88ba

Browse files
committed
fix: expose the resolved assets install task
1 parent b9a1fdc commit 4fa88ba

File tree

2 files changed

+51
-7
lines changed

2 files changed

+51
-7
lines changed

packages/installer/diagnose.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export interface AssetIssue extends Issue {
7878
/**
7979
* The problematic asset
8080
*/
81-
asset: { file: string; hash: string };
81+
asset: { name: string; hash: string; size: number; };
8282
}
8383
export interface AssetIndexIssue extends Issue {
8484
role: "assetIndex";
@@ -194,13 +194,13 @@ export function diagnoseTask(version: string, minecraftLocation: MinecraftLocati
194194
let filenames = Object.keys(objects);
195195
await context.execute(task("checkAssets", function checkAssets() {
196196
return Promise.all(filenames.map(async (filename) => {
197-
let { hash } = objects[filename];
197+
let { hash, size } = objects[filename];
198198
let assetPath = minecraft.getAsset(hash);
199199

200200
let issue: AssetIssue | undefined = await diagnoseSingleFile("asset", assetPath, hash,
201201
"Problem on asset! Please consider to use Installer.installAssets to fix.");
202202
if (issue) {
203-
issue.asset = { file: filename, hash };
203+
issue.asset = { name: filename, hash, size };
204204
issues.push(issue);
205205
}
206206
}));

packages/installer/minecraft.ts

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ export function installAssetsTask(version: ResolvedVersion, options: AssetsOptio
345345

346346
let { objects } = JSON.parse(await readFile(jsonPath).then((b) => b.toString())) as AssetIndex;
347347
let objectArray = Object.keys(objects).map((k) => ({ name: k, ...objects[k] }));
348-
let tasks = objectArray.map((o) => installAssetTask(version.id, o, folder, options));
348+
let tasks = objectArray.map((o) => installAssetTask(o, folder, options));
349349
let sizes = objectArray.map((a) => a.size).map((a, b) => a + b, 0);
350350

351351
await batchedTask(context, tasks, sizes, options.assetsDownloadConcurrency || options.maxConcurrency, options.throwErrorImmediately,
@@ -384,6 +384,44 @@ export function installLibrariesTask<T extends Pick<ResolvedVersion, "minecraftD
384384
}, { version: Reflect.get(version, "id") || "" });
385385
}
386386

387+
/**
388+
* Only install several resolved assets.
389+
* @param assets The assets to install
390+
* @param folder The minecraft folder
391+
* @param options The asset option
392+
*/
393+
export function installResolvedAssetsTask(assets: {
394+
name: string;
395+
hash: string;
396+
size: number;
397+
}[], folder: MinecraftFolder, options: AssetsOption = {}) {
398+
async function installAssets(context: Task.Context) {
399+
normailzeDownloader(options);
400+
await ensureDir(folder.getPath("assets", "objects"));
401+
402+
let tasks = assets.map((o) => installAssetTask(o, folder, options));
403+
let sizes = assets.map((a) => a.size).map((a, b) => a + b, 0);
404+
405+
await batchedTask(context, tasks, sizes, options.assetsDownloadConcurrency || options.maxConcurrency, options.throwErrorImmediately,
406+
() => `Errors during install assets at ${folder.root}`);
407+
}
408+
return task("installAssets", installAssets);
409+
}
410+
411+
/**
412+
* Only install several resolved assets.
413+
* @param assets The assets to install
414+
* @param folder The minecraft folder
415+
* @param options The asset option
416+
*/
417+
export function installResolvedAssets(assets: {
418+
name: string;
419+
hash: string;
420+
size: number;
421+
}[], folder: MinecraftFolder, options: AssetsOption = {}) {
422+
return installResolvedAssetsTask(assets, folder, options).execute().wait();
423+
}
424+
387425
/**
388426
* Only install several resolved libraries
389427
* @param libraries The resolved libraries
@@ -602,7 +640,10 @@ function installVersionJarTask(type: "client" | "server", version: ResolvedVersi
602640
});
603641
}
604642

605-
function installLibraryTask(lib: ResolvedLibrary, folder: MinecraftFolder, options: HasDownloader<Option>) {
643+
/**
644+
* Install single library task.
645+
*/
646+
function installLibraryTask(lib: ResolvedLibrary, folder: MinecraftFolder, options: HasDownloader<LibraryOption>) {
606647
return task("library", async function library(context: Task.Context) {
607648
context.update(0, -1, lib.name);
608649

@@ -624,7 +665,10 @@ function installLibraryTask(lib: ResolvedLibrary, folder: MinecraftFolder, optio
624665
}, { lib: lib.name });
625666
}
626667

627-
function installAssetTask(version: string, asset: { name: string, hash: string, size: number }, folder: MinecraftFolder, option: HasDownloader<AssetsOption>) {
668+
/**
669+
* Install single asset task.
670+
*/
671+
function installAssetTask(asset: { name: string, hash: string, size: number }, folder: MinecraftFolder, option: HasDownloader<AssetsOption>) {
628672
return task("assets", async function assets(context: Task.Context) {
629673
const assetsHosts = [
630674
...normalizeArray(option.assetsHost),
@@ -647,7 +691,7 @@ function installAssetTask(version: string, asset: { name: string, hash: string,
647691
},
648692
destination: file,
649693
}, option)(context);
650-
}, { version });
694+
});
651695
}
652696

653697
const DEFAULT_MAVENS = ["https://repo1.maven.org/maven2/"];

0 commit comments

Comments
 (0)