Add Minecraft 26.x support and version Java artifacts
This commit is contained in:
@@ -2,7 +2,11 @@ import { mkdir, readFile, writeFile } from "node:fs/promises";
|
||||
import { createHash } from "node:crypto";
|
||||
import { unzipSync } from "fflate";
|
||||
export const assetsRoot = ".cache/minecraft/1.21.11";
|
||||
const completionMarker = `${assetsRoot}/.minegeo-assets.json`;
|
||||
export function assetsDirectory(version = "1.21.11") {
|
||||
if (!/^(?:1\.21\.11|26\.[12](?:\.\d+)*)$/.test(version))
|
||||
throw new Error("Unsupported Minecraft asset version");
|
||||
return `.cache/minecraft/${version}`;
|
||||
}
|
||||
const requiredAssets = [
|
||||
"blockstates/grass_block.json",
|
||||
"blockstates/stone.json",
|
||||
@@ -14,12 +18,14 @@ const requiredAssets = [
|
||||
"textures/block/stone.png",
|
||||
"textures/block/water_still.png",
|
||||
];
|
||||
async function assetsReady() {
|
||||
async function assetsReady(minecraftVersion) {
|
||||
const assetsRoot = assetsDirectory(minecraftVersion);
|
||||
const completionMarker = `${assetsRoot}/.minegeo-assets.json`;
|
||||
try {
|
||||
const marker = JSON.parse(await readFile(completionMarker, "utf8"));
|
||||
if (
|
||||
marker.format !== "minegeo-assets/v2" ||
|
||||
marker.minecraftVersion !== "1.21.11" ||
|
||||
marker.minecraftVersion !== minecraftVersion ||
|
||||
!marker.files
|
||||
)
|
||||
return false;
|
||||
@@ -39,10 +45,12 @@ async function assetsReady() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
export async function prepareAssets() {
|
||||
if (await assetsReady()) return;
|
||||
export async function prepareAssets(minecraftVersion = "1.21.11") {
|
||||
const assetsRoot = assetsDirectory(minecraftVersion);
|
||||
const completionMarker = `${assetsRoot}/.minegeo-assets.json`;
|
||||
if (await assetsReady(minecraftVersion)) return assetsRoot;
|
||||
console.log(
|
||||
"Preparing Minecraft 1.21.11 models and textures for terrain rendering…",
|
||||
`Preparing Minecraft ${minecraftVersion} models and textures for terrain rendering…`,
|
||||
);
|
||||
const manifest = await (
|
||||
await fetch(
|
||||
@@ -50,13 +58,14 @@ export async function prepareAssets() {
|
||||
{ signal: AbortSignal.timeout(60000) },
|
||||
)
|
||||
).json();
|
||||
const entry = manifest.versions.find((v) => v.id === "1.21.11");
|
||||
if (!entry) throw new Error("Official Minecraft 1.21.11 metadata missing");
|
||||
const entry = manifest.versions.find((v) => v.id === minecraftVersion);
|
||||
if (!entry)
|
||||
throw new Error(`Official Minecraft ${minecraftVersion} metadata missing`);
|
||||
const version = await (
|
||||
await fetch(entry.url, { signal: AbortSignal.timeout(60000) })
|
||||
).json();
|
||||
await mkdir(".cache/minecraft", { recursive: true });
|
||||
const jarPath = ".cache/minecraft/client-1.21.11.jar";
|
||||
const jarPath = `.cache/minecraft/client-${minecraftVersion}.jar`;
|
||||
let jar;
|
||||
try {
|
||||
jar = await readFile(jarPath);
|
||||
@@ -101,16 +110,17 @@ export async function prepareAssets() {
|
||||
completionMarker,
|
||||
JSON.stringify({
|
||||
format: "minegeo-assets/v2",
|
||||
minecraftVersion: "1.21.11",
|
||||
minecraftVersion,
|
||||
clientSha1: version.downloads.client.sha1,
|
||||
files: Object.keys(entries).length,
|
||||
}),
|
||||
);
|
||||
if (!(await assetsReady()))
|
||||
if (!(await assetsReady(minecraftVersion)))
|
||||
throw new Error(
|
||||
"Minecraft rendering assets are incomplete or corrupt. Run npm run setup to repair them.",
|
||||
);
|
||||
console.log(
|
||||
`Prepared ${Object.keys(entries).length} verified vanilla model/texture assets.`,
|
||||
);
|
||||
return assetsRoot;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user