@kzheart_/mc-pilot 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
- import { mkdir } from "node:fs/promises";
1
+ import { access, mkdir, writeFile } from "node:fs/promises";
2
+ import path from "node:path";
2
3
  import { setTimeout as sleep } from "node:timers/promises";
3
4
  import { MinecraftFolder, Version } from "@xmcl/core";
4
5
  import { getVersionList, installDependencies, installFabric, installVersion } from "@xmcl/installer";
@@ -53,6 +54,16 @@ export async function prepareManagedFabricRuntime(variant, runtimeOptions, depen
53
54
  const { runtimeRootDir, gameDir } = runtimeOptions;
54
55
  await mkdir(runtimeRootDir, { recursive: true });
55
56
  await mkdir(gameDir, { recursive: true });
57
+ const expectedVersionId = `${variant.minecraftVersion}-fabric${loaderVersion}`;
58
+ const readyMarker = path.join(runtimeRootDir, `.ready-${expectedVersionId}`);
59
+ try {
60
+ await access(readyMarker);
61
+ // Runtime already prepared, skip download
62
+ return { runtimeRootDir, gameDir, versionId: expectedVersionId };
63
+ }
64
+ catch {
65
+ // Not ready, proceed with download
66
+ }
56
67
  const minecraft = new MinecraftFolder(runtimeRootDir);
57
68
  const versionList = await getVersionList({ fetch: fetchImpl });
58
69
  const versionMeta = versionList.versions.find((entry) => entry.id === variant.minecraftVersion);
@@ -66,24 +77,25 @@ export async function prepareManagedFabricRuntime(variant, runtimeOptions, depen
66
77
  side: "client",
67
78
  dispatcher: DOWNLOAD_DISPATCHER
68
79
  });
69
- const versionId = await installFabric({
80
+ const installedVersionId = await installFabric({
70
81
  minecraftVersion: variant.minecraftVersion,
71
82
  version: loaderVersion,
72
83
  minecraft,
73
84
  side: "client",
74
85
  fetch: fetchImpl
75
86
  });
76
- const resolvedVersion = await Version.parse(minecraft, versionId);
87
+ const resolvedVersion = await Version.parse(minecraft, installedVersionId);
77
88
  await installDependencies(resolvedVersion, {
78
89
  side: "client",
79
90
  dispatcher: DOWNLOAD_DISPATCHER,
80
91
  assetsDownloadConcurrency: 2,
81
92
  librariesDownloadConcurrency: 2
82
93
  });
83
- await applyArm64LwjglPatch(runtimeRootDir, versionId, { fetchImpl });
94
+ await applyArm64LwjglPatch(runtimeRootDir, installedVersionId, { fetchImpl });
95
+ await writeFile(readyMarker, new Date().toISOString(), "utf8");
84
96
  return {
85
97
  runtimeRootDir,
86
98
  gameDir,
87
- versionId
99
+ versionId: installedVersionId
88
100
  };
89
101
  }
package/dist/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { Command } from "commander";
2
- import { pathToFileURL } from "node:url";
2
+ import { readFileSync } from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath, pathToFileURL } from "node:url";
3
5
  import { createBlockCommand } from "./commands/block.js";
4
6
  import { createBookCommand } from "./commands/book.js";
5
7
  import { createClientCommand } from "./commands/client.js";
@@ -44,7 +46,7 @@ export function buildProgram() {
44
46
  " mct client launch p1 && mct client launch p2\n" +
45
47
  " mct --client p1 chat send \"Hello from p1\"\n" +
46
48
  " mct --client p2 chat send \"Hello from p2\"")
47
- .version("0.1.0", "--cli-version", "Show CLI version");
49
+ .version(JSON.parse(readFileSync(path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "package.json"), "utf8")).version, "--cli-version", "Show CLI version");
48
50
  attachGlobalOptions(program);
49
51
  program
50
52
  .command("config-show")
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kzheart_/mc-pilot",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Minecraft plugin/mod automated testing CLI – control a real Minecraft client to simulate player actions",
5
5
  "type": "module",
6
6
  "bin": {