Add Minecraft 26.x support and version Java artifacts

This commit is contained in:
2026-10-07 13:18:31 +05:00
parent 48b34db6f1
commit dac8650ac1
50 changed files with 813 additions and 162 deletions

View File

@@ -46,6 +46,21 @@ test("dataset requires five unique in-bounds viewpoints and safe paths", () => {
assets: [{ path: "terrain.json.gz", sha256: "a".repeat(64), bytes: 100 }],
};
assert.equal(datasetSchema.safeParse(base).success, true);
for (const minecraftVersion of ["26.1", "26.1.1", "26.1.2", "26.2"])
assert.equal(
datasetSchema.safeParse({ ...base, minecraftVersion }).success,
true,
);
for (const minecraftVersion of [
"26.3",
"1.21.10",
"26.2-snapshot",
"../secrets",
])
assert.equal(
datasetSchema.safeParse({ ...base, minecraftVersion }).success,
false,
);
assert.equal(datasetSchema.safeParse({ ...base, assets: [] }).success, false);
assert.equal(
datasetSchema.safeParse({ ...base, source: "fabric" }).success,

View File

@@ -37,7 +37,11 @@ const jar = zipSync(
);
const checksum = createHash("sha1").update(jar).digest("hex");
async function isolatedCache(t: TestContext, corruptDownload = false) {
async function isolatedCache(
t: TestContext,
corruptDownload = false,
minecraftVersion = "1.21.11",
) {
const previous = process.cwd();
const cacheParent = resolve(".cache");
await mkdir(cacheParent, { recursive: true });
@@ -54,7 +58,9 @@ async function isolatedCache(t: TestContext, corruptDownload = false) {
requests.push(url);
if (url.includes("version_manifest_v2"))
return Response.json({
versions: [{ id: "1.21.11", url: "https://fixture.invalid/version" }],
versions: [
{ id: minecraftVersion, url: "https://fixture.invalid/version" },
],
});
if (url.endsWith("/version"))
return Response.json({
@@ -91,6 +97,27 @@ test("missing vanilla cache is prepared completely and subsequent runs work offl
assert.deepEqual(requests, []);
});
test("26.x assets use distinct verified caches and reject unsupported versions", async (t) => {
await isolatedCache(t, false, "26.2");
const directory = await prepareAssets("26.2");
assert.equal(directory, ".cache/minecraft/26.2");
const marker = JSON.parse(
await readFile(`${directory}/.minegeo-assets.json`, "utf8"),
);
assert.equal(marker.minecraftVersion, "26.2");
await assert.rejects(readFile(`${assetsRoot}/.minegeo-assets.json`), {
code: "ENOENT",
});
await assert.rejects(
prepareAssets("../secrets"),
/Unsupported Minecraft asset version/,
);
await assert.rejects(
prepareAssets("26.3"),
/Unsupported Minecraft asset version/,
);
});
test("an interrupted extraction with only a blockstate cannot masquerade as complete", async (t) => {
await isolatedCache(t);
await mkdir(`${assetsRoot}/assets/minecraft/blockstates`, {