refactor: fix neoforge version naming and remove duplicate/unused code

This commit is contained in:
HerozDotExe 2026-03-26 22:14:16 +01:00
parent 1d9f4b9bc6
commit 34d690d6a6
3 changed files with 38 additions and 53 deletions

View file

@ -1,6 +1,9 @@
import path from "path";
import { readJson } from "../utils/fs";
import { Version } from "../utils/types";
import { getVersionId, ModloaderConfig } from "./modloaders";
export function mergeManifests(base: Version, layer: Version) {
function mergeManifests(base: Version, layer: Version) {
// Copy needed properties to base
// Those properties should be enough for forge at least
const result = { ...base }
@ -61,3 +64,21 @@ export function mergeManifests(base: Version, layer: Version) {
return result;
}
export async function prepareManifest(config: ModloaderConfig, versionManifest: Version) {
const versionId = getVersionId(config)
const moddedVersionManifest = await readJson<Version>(
path.join(
config.paths.versions,
versionId,
`${versionId}.json`,
),
);
versionManifest = mergeManifests(
versionManifest!,
moddedVersionManifest,
);
return versionManifest
}

View file

@ -24,6 +24,10 @@ export interface ModloaderConfig extends Config {
modloader: Modloader
}
export function getVersionId(config: ModloaderConfig) {
return `${config.version}-${config.modloader.name}-${config.modloader.version}`
}
async function downloadJar(
config: ModloaderConfig,
type: "universal" | "installer",
@ -81,7 +85,6 @@ async function downloadJar(
throw new InstallError("An error occured while downloadng natives", "natives", config, logger, { cause: error })
}
console.log(filePath)
return filePath;
}
@ -190,6 +193,9 @@ export async function installForge(
);
}
const versionId = getVersionId(config)
console.log(versionId)
if (isModernForge(config.version)) {
// Modern forge (version >= 1.12.2)
const fakeLauncherProfiles = await readJson<LauncherProfiles>(
@ -201,9 +207,10 @@ export async function installForge(
await fs.cp(
path.join(fakeLauncher, "versions", originalVersionId),
path.join(config.paths.versions, originalVersionId),
path.join(config.paths.versions, versionId),
{ recursive: true },
);
if (config.modloader.name === "neoforge") await fs.rename(path.join(config.paths.versions, versionId, `${originalVersionId}.json`), path.join(config.paths.versions, versionId, `${versionId}.json`))
} else {
// Older versions (from 1.5.2 to 1.12.2, even older versions are not supported)
const universalPath = path.join(fakeLauncher, `forge-${config.version}-${config.modloader.version}-universal.jar`)
@ -218,8 +225,8 @@ export async function installForge(
// Copy version json
const zip = new AdmZip(universalPath)
zip.extractEntryTo("version.json", path.join(config.paths.versions, `${config.version}-forge-${config.modloader.version}`))
await fs.rename(path.join(config.paths.versions, `${config.version}-forge-${config.modloader.version}`, "version.json"), path.join(config.paths.versions, `${config.version}-forge-${config.modloader.version}`, `${config.version}-forge-${config.modloader.version}.json`))
zip.extractEntryTo("version.json", path.join(config.paths.versions, versionId))
await fs.cp(path.join(config.paths.versions, versionId, "version.json"), path.join(config.paths.versions, versionId, `${versionId}.json`))
}
}
@ -303,7 +310,7 @@ export async function installFabric(config: ModloaderConfig, logger: logger) {
fakeLauncherProfiles.profiles[Object.keys(fakeLauncherProfiles.profiles)[0]]
.lastVersionId;
const versionId = `${config.version}-fabric-${config.modloader.version}`
const versionId = getVersionId(config)
await ensureDir(path.join(config.paths.versions, versionId))
console.log(path.join(config.paths.versions, originalVersionId, `${originalVersionId}.json`), path.join(config.paths.versions, versionId, `${versionId}.json`))
await fs.cp(path.join(fakeLauncher, "versions", originalVersionId, `${originalVersionId}.json`), path.join(config.paths.versions, versionId, `${versionId}.json`))

View file

@ -6,8 +6,7 @@ import { ConfigError, InstallError, LaunchError } from "../utils/errors";
import { checkJava } from "./java";
import { fixVersionWithDoubleName, installFabric, installForge, ModloaderConfig } from "../core/modloaders";
import { ChildProcessWithoutNullStreams } from "node:child_process";
import { readJson } from "../utils/fs";
import { mergeManifests } from "../core/mergeManifests";
import { prepareManifest } from "../core/mergeManifests";
export interface BaseConfig {
version: string;
@ -201,53 +200,11 @@ export class Instance extends EventEmitter<InstanceEvents> {
if (this.config.modloader) {
try {
switch (this.config.modloader.name) {
case "forge": {
const forgeVersionManifest = await readJson<Version>(
path.join(
this.config.paths.versions,
`${this.config.version}-${this.config.modloader.name}-${this.config.modloader.version}`,
`${this.config.version}-${this.config.modloader.name}-${this.config.modloader.version}.json`,
),
);
this.versionManifest = mergeManifests(
this.versionManifest!,
forgeVersionManifest,
);
break;
}
case "forge":
case "neoforge":
{
const neoForgeVersionManifest = await readJson<Version>(
path.join(
this.config.paths.versions,
`${this.config.modloader.name}-${this.config.modloader.version}`,
`${this.config.modloader.name}-${this.config.modloader.version}.json`,
),
);
this.versionManifest = mergeManifests(
this.versionManifest!,
neoForgeVersionManifest,
);
}
break;
case "fabric":
{
const fabricVersionManifest = await readJson<Version>(
path.join(
this.config.paths.versions,
`${this.config.version}-${this.config.modloader.name}-${this.config.modloader.version}`,
`${this.config.version}-${this.config.modloader.name}-${this.config.modloader.version}.json`,
),
);
this.versionManifest = mergeManifests(
this.versionManifest!,
fabricVersionManifest,
);
break;
}
this.versionManifest = await prepareManifest(this.config as ModloaderConfig, this.versionManifest)
break
default:
throw new Error("Unknown modloader");
}