@bkm016/calcite 0.1.0 → 0.3.0
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.
- package/README.md +222 -15
- package/dist/accounts.d.ts +23 -4
- package/dist/accounts.js +120 -40
- package/dist/accounts.js.map +1 -1
- package/dist/cli.js +114 -6
- package/dist/cli.js.map +1 -1
- package/dist/client-core.d.ts +68 -0
- package/dist/client-core.js +556 -0
- package/dist/client-core.js.map +1 -0
- package/dist/client.d.ts +107 -213
- package/dist/client.js +114 -579
- package/dist/client.js.map +1 -1
- package/dist/display.js +42 -13
- package/dist/display.js.map +1 -1
- package/dist/hmc.d.ts +31 -11
- package/dist/hmc.js +68 -30
- package/dist/hmc.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +48 -0
- package/dist/install.js +119 -0
- package/dist/install.js.map +1 -0
- package/dist/java.d.ts +8 -2
- package/dist/java.js +14 -10
- package/dist/java.js.map +1 -1
- package/dist/loaders.d.ts +41 -0
- package/dist/loaders.js +86 -0
- package/dist/loaders.js.map +1 -0
- package/dist/mcp.js +163 -6
- package/dist/mcp.js.map +1 -1
- package/dist/mods.d.ts +23 -0
- package/dist/mods.js +164 -0
- package/dist/mods.js.map +1 -0
- package/dist/mojang.d.ts +0 -16
- package/dist/mojang.js +1 -37
- package/dist/mojang.js.map +1 -1
- package/dist/names.d.ts +53 -0
- package/dist/names.js +267 -0
- package/dist/names.js.map +1 -0
- package/dist/net.d.ts +5 -0
- package/dist/net.js +41 -1
- package/dist/net.js.map +1 -1
- package/dist/paths.d.ts +5 -3
- package/dist/paths.js +1 -0
- package/dist/paths.js.map +1 -1
- package/dist/probe-server.d.ts +1 -1
- package/dist/probe-server.js +5 -1
- package/dist/probe-server.js.map +1 -1
- package/dist/types.d.ts +265 -0
- package/dist/types.js +25 -0
- package/dist/types.js.map +1 -0
- package/dist/zip.d.ts +5 -0
- package/dist/zip.js +65 -0
- package/dist/zip.js.map +1 -0
- package/package.json +1 -1
- package/vendor/calcite-probe.jar +0 -0
package/dist/mods.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { copyFile, mkdir, readdir, readFile, rm, stat, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { basename, join, resolve } from 'node:path';
|
|
4
|
+
import { download, httpJson } from './net.js';
|
|
5
|
+
import { CalciteError } from './types.js';
|
|
6
|
+
const MODRINTH_API = 'https://api.modrinth.com/v2';
|
|
7
|
+
const MANIFEST = '.calcite-mods.json';
|
|
8
|
+
function safeName(name) {
|
|
9
|
+
const clean = basename(name.replace(/\\/g, '/'));
|
|
10
|
+
if (!clean || clean.startsWith('.') || !clean.toLowerCase().endsWith('.jar')) {
|
|
11
|
+
throw new CalciteError('bad_mod', `Not a mod jar: "${name}"`);
|
|
12
|
+
}
|
|
13
|
+
return clean;
|
|
14
|
+
}
|
|
15
|
+
async function modrinthVersion(project, version, mc, loader) {
|
|
16
|
+
const query = `loaders=${encodeURIComponent(JSON.stringify([loader]))}&game_versions=${encodeURIComponent(JSON.stringify([mc]))}`;
|
|
17
|
+
let versions;
|
|
18
|
+
try {
|
|
19
|
+
versions = await httpJson(`${MODRINTH_API}/project/${encodeURIComponent(project)}/version?${query}`);
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
if (err.status === 404)
|
|
23
|
+
throw new CalciteError('mod_not_found', `Modrinth has no project "${project}"`);
|
|
24
|
+
throw err;
|
|
25
|
+
}
|
|
26
|
+
const pick = version
|
|
27
|
+
? versions.find((v) => v.version_number === version || v.id === version)
|
|
28
|
+
: (versions.find((v) => v.version_type === 'release') ?? versions[0]);
|
|
29
|
+
if (!pick) {
|
|
30
|
+
throw new CalciteError('mod_not_found', `Modrinth project "${project}" has no ${version ? `version "${version}"` : 'version'} for ${loader} on Minecraft ${mc}`);
|
|
31
|
+
}
|
|
32
|
+
return pick;
|
|
33
|
+
}
|
|
34
|
+
async function modrinthFile(paths, v) {
|
|
35
|
+
const f = v.files.find((x) => x.primary) ?? v.files[0];
|
|
36
|
+
if (!f)
|
|
37
|
+
throw new CalciteError('mod_not_found', `Modrinth version ${v.id} has no files`);
|
|
38
|
+
const name = safeName(f.filename);
|
|
39
|
+
const file = join(paths.mods, 'modrinth', f.hashes.sha1, name);
|
|
40
|
+
await download(f.url, file, { sha1: f.hashes.sha1 });
|
|
41
|
+
return { name, file };
|
|
42
|
+
}
|
|
43
|
+
async function localJars(spec) {
|
|
44
|
+
const path = resolve(spec);
|
|
45
|
+
let info;
|
|
46
|
+
try {
|
|
47
|
+
info = await stat(path);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
throw new CalciteError('mod_not_found', `Mod file or folder not found: ${path}`);
|
|
51
|
+
}
|
|
52
|
+
if (!info.isDirectory())
|
|
53
|
+
return [path];
|
|
54
|
+
return (await readdir(path)).filter((n) => n.toLowerCase().endsWith('.jar')).sort().map((n) => join(path, n));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Resolves mod specs to local jars: a jar or folder of jars, an http(s) URL, or "modrinth:<project>[@<version>]"
|
|
58
|
+
* (the newest release for this Minecraft version and loader, plus its required dependencies).
|
|
59
|
+
*/
|
|
60
|
+
export async function resolveMods(paths, specs, mc, loader) {
|
|
61
|
+
const mods = [];
|
|
62
|
+
const projects = new Set();
|
|
63
|
+
const pending = [];
|
|
64
|
+
for (const raw of specs) {
|
|
65
|
+
const spec = raw.trim();
|
|
66
|
+
if (!spec)
|
|
67
|
+
continue;
|
|
68
|
+
const modrinth = /^modrinth:([^@\s]+)(?:@(\S+))?$/i.exec(spec);
|
|
69
|
+
if (modrinth) {
|
|
70
|
+
pending.push({ project: modrinth[1], version: modrinth[2], source: spec });
|
|
71
|
+
}
|
|
72
|
+
else if (/^https?:\/\//i.test(spec)) {
|
|
73
|
+
const url = new URL(spec);
|
|
74
|
+
const name = safeName(decodeURIComponent(url.pathname));
|
|
75
|
+
const file = join(paths.mods, 'url', createHash('sha256').update(spec).digest('hex').slice(0, 16), name);
|
|
76
|
+
await download(spec, file);
|
|
77
|
+
mods.push({ name, file, source: spec });
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
for (const file of await localJars(spec))
|
|
81
|
+
mods.push({ name: safeName(file), file, source: spec });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Modrinth projects and their required dependencies, breadth first
|
|
85
|
+
while (pending.length) {
|
|
86
|
+
const next = pending.shift();
|
|
87
|
+
const v = await modrinthVersion(next.project, next.version, mc, loader);
|
|
88
|
+
if (projects.has(v.project_id))
|
|
89
|
+
continue;
|
|
90
|
+
projects.add(v.project_id);
|
|
91
|
+
mods.push({ ...(await modrinthFile(paths, v)), source: next.source });
|
|
92
|
+
for (const dep of v.dependencies) {
|
|
93
|
+
if (dep.dependency_type !== 'required' || !dep.project_id || projects.has(dep.project_id))
|
|
94
|
+
continue;
|
|
95
|
+
pending.push({ project: dep.project_id, source: `${next.source} → dependency` });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
const seen = new Map();
|
|
99
|
+
for (const m of mods) {
|
|
100
|
+
const other = seen.get(m.name);
|
|
101
|
+
if (other && other !== m.file)
|
|
102
|
+
throw new CalciteError('bad_mod', `Two mods share the file name ${m.name}`);
|
|
103
|
+
seen.set(m.name, m.file);
|
|
104
|
+
}
|
|
105
|
+
return mods.filter((m, i) => mods.findIndex((x) => x.name === m.name) === i);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Makes {@code gameDir}/mods contain exactly the given Calcite-managed mods. Files Calcite did not place there are
|
|
109
|
+
* left alone; managed files no longer requested are removed.
|
|
110
|
+
*/
|
|
111
|
+
export async function syncMods(gameDir, mods) {
|
|
112
|
+
const dir = join(gameDir, 'mods');
|
|
113
|
+
const manifest = join(dir, MANIFEST);
|
|
114
|
+
let previous = [];
|
|
115
|
+
try {
|
|
116
|
+
previous = JSON.parse(await readFile(manifest, 'utf8')).files ?? [];
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// first sync
|
|
120
|
+
}
|
|
121
|
+
const wanted = new Set(mods.map((m) => m.name));
|
|
122
|
+
for (const name of previous) {
|
|
123
|
+
if (!wanted.has(name))
|
|
124
|
+
await rm(join(dir, basename(name)), { force: true });
|
|
125
|
+
}
|
|
126
|
+
if (!mods.length) {
|
|
127
|
+
await rm(manifest, { force: true });
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
await mkdir(dir, { recursive: true });
|
|
131
|
+
for (const m of mods)
|
|
132
|
+
await copyFile(m.file, join(dir, m.name));
|
|
133
|
+
await writeFile(manifest, JSON.stringify({ files: [...wanted] }, null, 2));
|
|
134
|
+
}
|
|
135
|
+
/** Resolves extension specs (local jars or http(s) URLs, downloaded once) to absolute jar paths. */
|
|
136
|
+
export async function resolveExtensions(paths, specs) {
|
|
137
|
+
const jars = [];
|
|
138
|
+
for (const raw of specs) {
|
|
139
|
+
const spec = raw.trim();
|
|
140
|
+
if (!spec)
|
|
141
|
+
continue;
|
|
142
|
+
if (/^https?:\/\//i.test(spec)) {
|
|
143
|
+
const name = safeName(decodeURIComponent(new URL(spec).pathname));
|
|
144
|
+
const file = join(paths.mods, 'extensions', createHash('sha256').update(spec).digest('hex').slice(0, 16), name);
|
|
145
|
+
await download(spec, file);
|
|
146
|
+
jars.push(file);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const file = resolve(spec);
|
|
150
|
+
let info;
|
|
151
|
+
try {
|
|
152
|
+
info = await stat(file);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
throw new CalciteError('extension_not_found', `Extension jar not found: ${file}`);
|
|
156
|
+
}
|
|
157
|
+
if (!info.isFile())
|
|
158
|
+
throw new CalciteError('extension_not_found', `Extension is not a file: ${file}`);
|
|
159
|
+
safeName(file);
|
|
160
|
+
jars.push(file);
|
|
161
|
+
}
|
|
162
|
+
return [...new Set(jars)];
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=mods.js.map
|
package/dist/mods.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mods.js","sourceRoot":"","sources":["../src/mods.ts"],"names":[],"mappings":"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"}
|
package/dist/mojang.d.ts
CHANGED
|
@@ -51,20 +51,4 @@ export declare function ensureClientJar(paths: CalcitePaths, json: VersionJson):
|
|
|
51
51
|
export declare function requiredJavaMajor(json: VersionJson): number;
|
|
52
52
|
/** Whether the game understands --quickPlayMultiplayer (1.20+); older versions use --server/--port. */
|
|
53
53
|
export declare function supportsQuickPlay(json: VersionJson): boolean;
|
|
54
|
-
export type NameMode = {
|
|
55
|
-
kind: 'mappings';
|
|
56
|
-
file: string;
|
|
57
|
-
} | {
|
|
58
|
-
kind: 'official';
|
|
59
|
-
} | {
|
|
60
|
-
kind: 'unsupported';
|
|
61
|
-
reason: string;
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* How the probe can find game classes: Mojang mappings (obfuscated 1.14.4+), official names (unobfuscated
|
|
65
|
-
* releases such as 26.1+), or unsupported (obfuscated versions without published mappings, before 1.14.4).
|
|
66
|
-
*/
|
|
67
|
-
export declare function resolveNames(paths: CalcitePaths, json: VersionJson, clientJar: string): Promise<NameMode>;
|
|
68
|
-
/** Checks the zip central directory for an entry name (no full extraction). */
|
|
69
|
-
export declare function zipContains(file: string, entry: string): Promise<boolean>;
|
|
70
54
|
export {};
|
package/dist/mojang.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { mkdir,
|
|
1
|
+
import { mkdir, readFile, stat, writeFile } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { download, httpJson } from './net.js';
|
|
4
4
|
export const MANIFEST_URL = 'https://piston-meta.mojang.com/mc/game/version_manifest_v2.json';
|
|
@@ -70,40 +70,4 @@ export function requiredJavaMajor(json) {
|
|
|
70
70
|
export function supportsQuickPlay(json) {
|
|
71
71
|
return JSON.stringify(json.arguments?.game ?? []).includes('quickPlayMultiplayer');
|
|
72
72
|
}
|
|
73
|
-
/**
|
|
74
|
-
* How the probe can find game classes: Mojang mappings (obfuscated 1.14.4+), official names (unobfuscated
|
|
75
|
-
* releases such as 26.1+), or unsupported (obfuscated versions without published mappings, before 1.14.4).
|
|
76
|
-
*/
|
|
77
|
-
export async function resolveNames(paths, json, clientJar) {
|
|
78
|
-
if (json.downloads.client_mappings) {
|
|
79
|
-
const file = join(paths.mappings, `${json.id}-client.txt`);
|
|
80
|
-
await download(json.downloads.client_mappings.url, file, { sha1: json.downloads.client_mappings.sha1 });
|
|
81
|
-
return { kind: 'mappings', file };
|
|
82
|
-
}
|
|
83
|
-
if (await zipContains(clientJar, 'net/minecraft/client/Minecraft.class')) {
|
|
84
|
-
return { kind: 'official' };
|
|
85
|
-
}
|
|
86
|
-
return { kind: 'unsupported', reason: `Minecraft ${json.id} is obfuscated and Mojang published no mappings for it (needs 1.14.4+)` };
|
|
87
|
-
}
|
|
88
|
-
/** Checks the zip central directory for an entry name (no full extraction). */
|
|
89
|
-
export async function zipContains(file, entry) {
|
|
90
|
-
const handle = await open(file, 'r');
|
|
91
|
-
try {
|
|
92
|
-
const { size } = await handle.stat();
|
|
93
|
-
const tailSize = Math.min(size, 65_557);
|
|
94
|
-
const tail = Buffer.alloc(tailSize);
|
|
95
|
-
await handle.read(tail, 0, tailSize, size - tailSize);
|
|
96
|
-
const eocd = tail.lastIndexOf(Buffer.from([0x50, 0x4b, 0x05, 0x06]));
|
|
97
|
-
if (eocd < 0)
|
|
98
|
-
throw new Error(`Not a zip file: ${file}`);
|
|
99
|
-
const cdSize = tail.readUInt32LE(eocd + 12);
|
|
100
|
-
const cdOffset = tail.readUInt32LE(eocd + 16);
|
|
101
|
-
const cd = Buffer.alloc(cdSize);
|
|
102
|
-
await handle.read(cd, 0, cdSize, cdOffset);
|
|
103
|
-
return cd.includes(Buffer.from(entry, 'utf8'));
|
|
104
|
-
}
|
|
105
|
-
finally {
|
|
106
|
-
await handle.close();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
73
|
//# sourceMappingURL=mojang.js.map
|
package/dist/mojang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mojang.js","sourceRoot":"","sources":["../src/mojang.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"mojang.js","sourceRoot":"","sources":["../src/mojang.ts"],"names":[],"mappings":"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"}
|
package/dist/names.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type InstalledLoader } from './loaders.js';
|
|
2
|
+
import type { VersionJson } from './mojang.js';
|
|
3
|
+
import type { CalcitePaths } from './paths.js';
|
|
4
|
+
/** Probe name candidate meaning "the game runs with official (Mojang) names". */
|
|
5
|
+
export declare const OFFICIAL = "official";
|
|
6
|
+
/**
|
|
7
|
+
* How the probe finds game classes: candidate name tables (mapping files or {@link OFFICIAL}), tried in order by the
|
|
8
|
+
* probe until one matches the running game; or unsupported (no names known for this game).
|
|
9
|
+
*/
|
|
10
|
+
export type NameMode = {
|
|
11
|
+
kind: 'probe';
|
|
12
|
+
candidates: string[];
|
|
13
|
+
} | {
|
|
14
|
+
kind: 'unsupported';
|
|
15
|
+
reason: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Name candidates for the probe. Vanilla and loaders running on Mojang names use Mojang's mappings (or official
|
|
19
|
+
* names on unobfuscated releases such as 26.1+); Fabric uses intermediary names and Forge/NeoForge before 1.20.5/6
|
|
20
|
+
* use SRG member names, both composed with Mojang's mappings.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveNames(paths: CalcitePaths, json: VersionJson, clientJar: string, loader?: InstalledLoader): Promise<NameMode>;
|
|
23
|
+
/** Names of obfuscated members in some namespace, keyed by obfuscated owner (internal name), name and descriptor. */
|
|
24
|
+
export interface TargetNames {
|
|
25
|
+
classes: Map<string, string>;
|
|
26
|
+
/** "owner.name:desc" and "owner.name" */
|
|
27
|
+
fields: Map<string, string>;
|
|
28
|
+
/** "owner.name(desc)" */
|
|
29
|
+
methods: Map<string, string>;
|
|
30
|
+
}
|
|
31
|
+
/** Fabric tiny v1 or v2 mappings, "official" → "intermediary". */
|
|
32
|
+
export declare function parseTiny(text: string): TargetNames;
|
|
33
|
+
/** MCPConfig/NeoForm tsrg (v1) or tsrg2 mappings, obfuscated → SRG. */
|
|
34
|
+
export declare function parseTsrg(text: string): TargetNames;
|
|
35
|
+
interface MojangClass {
|
|
36
|
+
named: string;
|
|
37
|
+
obf: string;
|
|
38
|
+
members: {
|
|
39
|
+
text: string;
|
|
40
|
+
name: string;
|
|
41
|
+
type: string;
|
|
42
|
+
params?: string[];
|
|
43
|
+
obf: string;
|
|
44
|
+
}[];
|
|
45
|
+
}
|
|
46
|
+
export declare function parseMojang(text: string): MojangClass[];
|
|
47
|
+
/**
|
|
48
|
+
* Composes Mojang's mappings (named → obfuscated) with {@code target} (obfuscated → runtime) into a ProGuard style
|
|
49
|
+
* file named → runtime, which the probe reads like Mojang's own. Members the target does not rename keep their
|
|
50
|
+
* name when it is not obfuscated; other unmapped members are left out.
|
|
51
|
+
*/
|
|
52
|
+
export declare function compose(mojang: MojangClass[], target: TargetNames, classRuntime: (cls: MojangClass) => string | undefined): string;
|
|
53
|
+
export {};
|
package/dist/names.js
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { mkdir, readFile, rename, rm, stat, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { loaderGameArg } from './loaders.js';
|
|
4
|
+
import { download } from './net.js';
|
|
5
|
+
import { readZipEntry, zipContains } from './zip.js';
|
|
6
|
+
/** Probe name candidate meaning "the game runs with official (Mojang) names". */
|
|
7
|
+
export const OFFICIAL = 'official';
|
|
8
|
+
/** Bumped when the composed mapping format changes, so cached files are rebuilt. */
|
|
9
|
+
const COMPOSE_FORMAT = 1;
|
|
10
|
+
// releases where the loaders changed the runtime names of Minecraft
|
|
11
|
+
const FORGE_MOJANG_CLASSES = Date.parse('2021-06-08T00:00:00Z'); // 1.17: Mojang class names + SRG members
|
|
12
|
+
const NEOFORGE_MOJMAP = Date.parse('2024-04-23T00:00:00Z'); // 1.20.5: NeoForge runs on Mojang names
|
|
13
|
+
const FORGE_MOJMAP = Date.parse('2024-04-29T00:00:00Z'); // 1.20.6: Forge runs on Mojang names
|
|
14
|
+
/**
|
|
15
|
+
* Name candidates for the probe. Vanilla and loaders running on Mojang names use Mojang's mappings (or official
|
|
16
|
+
* names on unobfuscated releases such as 26.1+); Fabric uses intermediary names and Forge/NeoForge before 1.20.5/6
|
|
17
|
+
* use SRG member names, both composed with Mojang's mappings.
|
|
18
|
+
*/
|
|
19
|
+
export async function resolveNames(paths, json, clientJar, loader) {
|
|
20
|
+
if (!json.downloads.client_mappings) {
|
|
21
|
+
if (await zipContains(clientJar, 'net/minecraft/client/Minecraft.class'))
|
|
22
|
+
return { kind: 'probe', candidates: [OFFICIAL] };
|
|
23
|
+
return { kind: 'unsupported', reason: `Minecraft ${json.id} is obfuscated and Mojang published no mappings for it (needs 1.14.4+)` };
|
|
24
|
+
}
|
|
25
|
+
const mojang = join(paths.mappings, `${json.id}-client.txt`);
|
|
26
|
+
await download(json.downloads.client_mappings.url, mojang, { sha1: json.downloads.client_mappings.sha1 });
|
|
27
|
+
if (!loader)
|
|
28
|
+
return { kind: 'probe', candidates: [mojang] };
|
|
29
|
+
const released = Date.parse(json.releaseTime);
|
|
30
|
+
if (loader.kind === 'fabric') {
|
|
31
|
+
return { kind: 'probe', candidates: [await composeFabric(paths, json.id, mojang, loader)] };
|
|
32
|
+
}
|
|
33
|
+
if ((loader.kind === 'forge' && released >= FORGE_MOJMAP) || (loader.kind === 'neoforge' && released >= NEOFORGE_MOJMAP)) {
|
|
34
|
+
return { kind: 'probe', candidates: [OFFICIAL] };
|
|
35
|
+
}
|
|
36
|
+
if (loader.kind === 'forge' && released < FORGE_MOJANG_CLASSES) {
|
|
37
|
+
return { kind: 'unsupported', reason: `Forge for Minecraft ${json.id} runs on MCP names, which the probe does not support (needs 1.17+)` };
|
|
38
|
+
}
|
|
39
|
+
// the exact switch to Mojang names is not tied to a version number for every build: let the probe check both
|
|
40
|
+
const srg = await composeSrg(paths, json.id, mojang, loader);
|
|
41
|
+
return { kind: 'probe', candidates: srg ? [srg, OFFICIAL] : [OFFICIAL] };
|
|
42
|
+
}
|
|
43
|
+
function emptyTarget() {
|
|
44
|
+
return { classes: new Map(), fields: new Map(), methods: new Map() };
|
|
45
|
+
}
|
|
46
|
+
function addField(t, owner, name, desc, value) {
|
|
47
|
+
if (desc)
|
|
48
|
+
t.fields.set(`${owner}.${name}:${desc}`, value);
|
|
49
|
+
const plain = `${owner}.${name}`;
|
|
50
|
+
// obfuscated field names repeat with different types; a bare key is only usable when unique
|
|
51
|
+
if (t.fields.has(plain) && t.fields.get(plain) !== value)
|
|
52
|
+
t.fields.set(plain, '');
|
|
53
|
+
else
|
|
54
|
+
t.fields.set(plain, value);
|
|
55
|
+
}
|
|
56
|
+
/** Fabric tiny v1 or v2 mappings, "official" → "intermediary". */
|
|
57
|
+
export function parseTiny(text) {
|
|
58
|
+
const t = emptyTarget();
|
|
59
|
+
const lines = text.split(/\r?\n/);
|
|
60
|
+
const header = lines[0]?.split('\t') ?? [];
|
|
61
|
+
if (header[0] === 'v1') {
|
|
62
|
+
const from = header.indexOf('official') - 1;
|
|
63
|
+
const to = header.indexOf('intermediary') - 1;
|
|
64
|
+
if (from < 0 || to < 0)
|
|
65
|
+
throw new Error('tiny v1 mappings without official/intermediary namespaces');
|
|
66
|
+
for (const line of lines.slice(1)) {
|
|
67
|
+
const p = line.split('\t');
|
|
68
|
+
if (p[0] === 'CLASS')
|
|
69
|
+
t.classes.set(p[1 + from], p[1 + to]);
|
|
70
|
+
else if (p[0] === 'FIELD')
|
|
71
|
+
addField(t, p[1], p[3 + from], p[2], p[3 + to]);
|
|
72
|
+
else if (p[0] === 'METHOD')
|
|
73
|
+
t.methods.set(`${p[1]}.${p[3 + from]}${p[2]}`, p[3 + to]);
|
|
74
|
+
}
|
|
75
|
+
return t;
|
|
76
|
+
}
|
|
77
|
+
if (header[0] === 'tiny' && header[1] === '2') {
|
|
78
|
+
const ns = header.slice(3);
|
|
79
|
+
const from = ns.indexOf('official');
|
|
80
|
+
const to = ns.indexOf('intermediary');
|
|
81
|
+
if (from < 0 || to < 0)
|
|
82
|
+
throw new Error('tiny v2 mappings without official/intermediary namespaces');
|
|
83
|
+
let owner = '';
|
|
84
|
+
for (const line of lines.slice(1)) {
|
|
85
|
+
if (line.startsWith('c\t')) {
|
|
86
|
+
const p = line.split('\t').slice(1);
|
|
87
|
+
owner = p[from];
|
|
88
|
+
t.classes.set(owner, p[to]);
|
|
89
|
+
}
|
|
90
|
+
else if (line.startsWith('\tf\t') || line.startsWith('\tm\t')) {
|
|
91
|
+
const p = line.split('\t').slice(2);
|
|
92
|
+
const desc = p[0]; // descriptors use the first namespace
|
|
93
|
+
const names = p.slice(1);
|
|
94
|
+
if (from !== 0)
|
|
95
|
+
continue; // descriptors would need remapping; Fabric's files always start with official
|
|
96
|
+
if (line[1] === 'f')
|
|
97
|
+
addField(t, owner, names[from], desc, names[to]);
|
|
98
|
+
else
|
|
99
|
+
t.methods.set(`${owner}.${names[from]}${desc}`, names[to]);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return t;
|
|
103
|
+
}
|
|
104
|
+
throw new Error(`Unknown tiny mappings header: ${lines[0]}`);
|
|
105
|
+
}
|
|
106
|
+
/** MCPConfig/NeoForm tsrg (v1) or tsrg2 mappings, obfuscated → SRG. */
|
|
107
|
+
export function parseTsrg(text) {
|
|
108
|
+
const t = emptyTarget();
|
|
109
|
+
let owner = '';
|
|
110
|
+
for (const line of text.split(/\r?\n/)) {
|
|
111
|
+
if (!line || line.startsWith('tsrg2 ') || line.startsWith('\t\t'))
|
|
112
|
+
continue;
|
|
113
|
+
const p = line.trim().split(' ');
|
|
114
|
+
if (line[0] !== '\t') {
|
|
115
|
+
owner = p[0];
|
|
116
|
+
t.classes.set(owner, p[1]);
|
|
117
|
+
}
|
|
118
|
+
else if (p[1]?.startsWith('(')) {
|
|
119
|
+
t.methods.set(`${owner}.${p[0]}${p[1]}`, p[2]);
|
|
120
|
+
}
|
|
121
|
+
else if (p.length >= 2) {
|
|
122
|
+
addField(t, owner, p[0], undefined, p[1]);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return t;
|
|
126
|
+
}
|
|
127
|
+
// ---------------------------------------------------------------- composition
|
|
128
|
+
const PRIMITIVES = { boolean: 'Z', byte: 'B', char: 'C', short: 'S', int: 'I', long: 'J', float: 'F', double: 'D', void: 'V' };
|
|
129
|
+
export function parseMojang(text) {
|
|
130
|
+
const classes = [];
|
|
131
|
+
let current;
|
|
132
|
+
for (const line of text.split(/\r?\n/)) {
|
|
133
|
+
if (!line || line[0] === '#')
|
|
134
|
+
continue;
|
|
135
|
+
if (line[0] !== ' ') {
|
|
136
|
+
const m = /^(\S+) -> (\S+):$/.exec(line);
|
|
137
|
+
current = m ? { named: m[1], obf: m[2], members: [] } : undefined;
|
|
138
|
+
if (current)
|
|
139
|
+
classes.push(current);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const m = /^\s+(?:\d+:\d+:)?(\S+) ([^\s(]+)(?:\((.*)\))?(?::\d+:\d+)? -> (\S+)$/.exec(line);
|
|
143
|
+
if (!current || !m)
|
|
144
|
+
continue;
|
|
145
|
+
const [, type, name, params, obf] = m;
|
|
146
|
+
current.members.push({
|
|
147
|
+
text: params === undefined ? `${type} ${name}` : `${type} ${name}(${params})`,
|
|
148
|
+
name,
|
|
149
|
+
type,
|
|
150
|
+
params: params === undefined ? undefined : params ? params.split(',') : [],
|
|
151
|
+
obf,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
return classes;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Composes Mojang's mappings (named → obfuscated) with {@code target} (obfuscated → runtime) into a ProGuard style
|
|
158
|
+
* file named → runtime, which the probe reads like Mojang's own. Members the target does not rename keep their
|
|
159
|
+
* name when it is not obfuscated; other unmapped members are left out.
|
|
160
|
+
*/
|
|
161
|
+
export function compose(mojang, target, classRuntime) {
|
|
162
|
+
const obfOf = new Map(mojang.map((c) => [c.named, c.obf]));
|
|
163
|
+
const desc = (type) => {
|
|
164
|
+
let dims = 0;
|
|
165
|
+
while (type.endsWith('[]')) {
|
|
166
|
+
dims++;
|
|
167
|
+
type = type.slice(0, -2);
|
|
168
|
+
}
|
|
169
|
+
const base = PRIMITIVES[type] ?? `L${(obfOf.get(type) ?? type).replace(/\./g, '/')};`;
|
|
170
|
+
return '['.repeat(dims) + base;
|
|
171
|
+
};
|
|
172
|
+
const out = [];
|
|
173
|
+
for (const cls of mojang) {
|
|
174
|
+
const runtime = classRuntime(cls);
|
|
175
|
+
if (!runtime)
|
|
176
|
+
continue;
|
|
177
|
+
out.push(`${cls.named} -> ${runtime}:`);
|
|
178
|
+
const owner = cls.obf.replace(/\./g, '/');
|
|
179
|
+
for (const m of cls.members) {
|
|
180
|
+
if (m.name === '<init>' || m.name === '<clinit>')
|
|
181
|
+
continue;
|
|
182
|
+
let mapped;
|
|
183
|
+
if (m.params === undefined) {
|
|
184
|
+
mapped = target.fields.get(`${owner}.${m.obf}:${desc(m.type)}`) || target.fields.get(`${owner}.${m.obf}`) || undefined;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
mapped = target.methods.get(`${owner}.${m.obf}(${m.params.map(desc).join('')})${desc(m.type)}`);
|
|
188
|
+
}
|
|
189
|
+
if (!mapped && m.obf === m.name)
|
|
190
|
+
mapped = m.name;
|
|
191
|
+
if (mapped)
|
|
192
|
+
out.push(` ${m.text} -> ${mapped}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return `${out.join('\n')}\n`;
|
|
196
|
+
}
|
|
197
|
+
async function exists(file) {
|
|
198
|
+
try {
|
|
199
|
+
await stat(file);
|
|
200
|
+
return true;
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
async function writeComposed(file, build) {
|
|
207
|
+
if (await exists(file))
|
|
208
|
+
return file;
|
|
209
|
+
const text = await build();
|
|
210
|
+
await mkdir(join(file, '..'), { recursive: true });
|
|
211
|
+
const tmp = `${file}.${process.pid}.tmp`;
|
|
212
|
+
await writeFile(tmp, text);
|
|
213
|
+
await rename(tmp, file).catch(async (err) => {
|
|
214
|
+
await rm(tmp, { force: true });
|
|
215
|
+
if (!(await exists(file)))
|
|
216
|
+
throw err;
|
|
217
|
+
});
|
|
218
|
+
return file;
|
|
219
|
+
}
|
|
220
|
+
function mavenPath(group, artifact, version, ext = 'jar') {
|
|
221
|
+
return `${group.replace(/\./g, '/')}/${artifact}/${version}/${artifact}-${version}.${ext}`;
|
|
222
|
+
}
|
|
223
|
+
/** A library from the shared libraries directory, downloaded from {@code repo} when HeadlessMC did not fetch it. */
|
|
224
|
+
async function library(paths, repo, relative) {
|
|
225
|
+
const file = join(paths.minecraft, 'libraries', ...relative.split('/'));
|
|
226
|
+
if (!(await exists(file)))
|
|
227
|
+
await download(`${repo}/${relative}`, file);
|
|
228
|
+
return file;
|
|
229
|
+
}
|
|
230
|
+
async function composeFabric(paths, mc, mojangFile, loader) {
|
|
231
|
+
const lib = loader.json.libraries?.find((l) => l.name.startsWith('net.fabricmc:intermediary:'));
|
|
232
|
+
const version = lib?.name.split(':')[2] ?? mc;
|
|
233
|
+
const file = join(paths.mappings, `${mc}-intermediary-${version}-c${COMPOSE_FORMAT}.txt`);
|
|
234
|
+
return writeComposed(file, async () => {
|
|
235
|
+
const jar = await library(paths, 'https://maven.fabricmc.net', mavenPath('net.fabricmc', 'intermediary', version));
|
|
236
|
+
const tiny = await readZipEntry(jar, 'mappings/mappings.tiny');
|
|
237
|
+
if (!tiny)
|
|
238
|
+
throw new Error(`${jar} contains no mappings/mappings.tiny`);
|
|
239
|
+
const target = parseTiny(tiny.toString('utf8'));
|
|
240
|
+
return compose(parseMojang(await readFile(mojangFile, 'utf8')), target, (c) => target.classes.get(c.obf.replace(/\./g, '/'))?.replace(/\//g, '.') ?? (c.obf === c.named ? c.named : undefined));
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
/** Mojang class names with SRG member names (Forge 1.17-1.20.5, NeoForge 1.20.1-1.20.4); null when unknown. */
|
|
244
|
+
async function composeSrg(paths, mc, mojangFile, loader) {
|
|
245
|
+
const mcp = loaderGameArg(loader.json, '--fml.mcpVersion');
|
|
246
|
+
const neoForm = loaderGameArg(loader.json, '--fml.neoFormVersion');
|
|
247
|
+
const source = neoForm
|
|
248
|
+
? { repo: 'https://maven.neoforged.net/releases', path: mavenPath('net.neoforged', 'neoform', `${mc}-${neoForm}`, 'zip'), tag: `neoform-${neoForm}` }
|
|
249
|
+
: mcp
|
|
250
|
+
? { repo: 'https://maven.minecraftforge.net', path: mavenPath('de.oceanlabs.mcp', 'mcp_config', `${mc}-${mcp}`, 'zip'), tag: `mcp-${mcp}` }
|
|
251
|
+
: null;
|
|
252
|
+
if (!source)
|
|
253
|
+
return null;
|
|
254
|
+
const file = join(paths.mappings, `${mc}-srg-${source.tag}-c${COMPOSE_FORMAT}.txt`);
|
|
255
|
+
return writeComposed(file, async () => {
|
|
256
|
+
const zip = await library(paths, source.repo, source.path);
|
|
257
|
+
let entry = 'config/joined.tsrg';
|
|
258
|
+
const config = await readZipEntry(zip, 'config.json');
|
|
259
|
+
if (config)
|
|
260
|
+
entry = JSON.parse(config.toString('utf8')).data?.mappings ?? entry;
|
|
261
|
+
const tsrg = await readZipEntry(zip, entry);
|
|
262
|
+
if (!tsrg)
|
|
263
|
+
throw new Error(`${zip} contains no ${entry}`);
|
|
264
|
+
return compose(parseMojang(await readFile(mojangFile, 'utf8')), parseTsrg(tsrg.toString('utf8')), (c) => c.named);
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.js","sourceRoot":"","sources":["../src/names.ts"],"names":[],"mappings":"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"}
|
package/dist/net.d.ts
CHANGED
|
@@ -8,6 +8,11 @@ export declare class HttpError extends Error {
|
|
|
8
8
|
export declare function bypassProxy(target: URL, noProxy?: string): boolean;
|
|
9
9
|
/** The proxy to use for {@code target}, honouring HTTPS_PROXY / HTTP_PROXY / NO_PROXY (any case). */
|
|
10
10
|
export declare function proxyFor(target: URL): URL | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Java system properties that route a JVM (HeadlessMC, the game) through the HTTPS_PROXY / HTTP_PROXY / NO_PROXY
|
|
13
|
+
* proxies; Java ignores those variables. Proxy credentials are not supported by Java's CONNECT handling.
|
|
14
|
+
*/
|
|
15
|
+
export declare function javaProxyProps(): Record<string, string>;
|
|
11
16
|
export declare function httpText(url: string): Promise<string>;
|
|
12
17
|
export declare function httpJson<T>(url: string): Promise<T>;
|
|
13
18
|
export declare function hashFile(file: string, algorithm: 'sha1' | 'sha256'): Promise<string>;
|