UNPKG

onelnchr-mc-loaders

Version:
112 lines 4.52 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.tomateModsModLoader = exports.url = exports.id = void 0; exports.downloadNeoForge = downloadNeoForge; exports.getMavenMetadata = getMavenMetadata; exports.listAllLoaderVersions = listAllLoaderVersions; exports.listLoaderVersions = listLoaderVersions; exports.getMCLCLaunchConfig = getMCLCLaunchConfig; exports.listSupportedGameVersions = listSupportedGameVersions; const axios_1 = __importDefault(require("axios")); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const xml2js_1 = __importDefault(require("xml2js")); const errors_1 = require("../errors"); exports.id = 'neoforge'; exports.url = 'https://neoforged.net/'; async function downloadNeoForge(neoForgeFilePath, loaderVersion) { fs_1.default.mkdirSync(path_1.default.dirname(neoForgeFilePath), { recursive: true }); const downloadLink = `https://maven.neoforged.net/releases/net/neoforged/neoforge/${loaderVersion}/neoforge-${loaderVersion}-installer.jar`; try { const response = await axios_1.default.get(downloadLink, { responseType: 'arraybuffer', }); const buffer = Buffer.from(response.data); await fs_1.default.promises.writeFile(neoForgeFilePath, buffer); } catch (error) { console.error('Error downloading NeoForge:', error); } } async function getMavenMetadata() { const metadataUrl = 'https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml'; const response = await axios_1.default.get(metadataUrl); const xmlData = response.data; const { metadata } = await xml2js_1.default.parseStringPromise(xmlData); return metadata; } /** * Returns all loader versions. Note that these might not be available for all game versions * On forge they are structured like this: `${gameVersion.minor}.${gameVersion.patch}.${loaderVersion}` */ async function listAllLoaderVersions() { const metadata = await getMavenMetadata(); return metadata.versioning[0].versions[0].version; } /** * Returns all loader versions that are available for a given game version. * On forge they are structured like this: `${gameVersion.minor}.${gameVersion.patch}.${loaderVersion}` */ async function listLoaderVersions(gameVersion) { const [_major, minor, patch] = gameVersion.split('.'); const versions = await listAllLoaderVersions(); const filteredVersions = versions.filter((version) => !version.includes('-beta') && version.includes(`${minor}.${patch}.`)); return filteredVersions; } /** * Downloads the latest version json and returns a partial MCLC config */ async function getMCLCLaunchConfig(config) { if (!config.loaderVersion) { const [loaderVersion] = await listLoaderVersions(config.gameVersion); config.loaderVersion = loaderVersion; } if (!config.loaderVersion) { throw new errors_1.InvalidVersionError(config.gameVersion); } const versionPath = path_1.default.join(config.rootPath, 'versions', `neoforge-${config.gameVersion}-${config.loaderVersion}`, 'neoforge.jar'); await downloadNeoForge(versionPath, config.loaderVersion); return { root: config.rootPath, clientPackage: null, version: { number: config.gameVersion, type: 'release', custom: `neoforge-${config.gameVersion}-${config.loaderVersion}`, }, forge: versionPath, }; } /** * Returns all game versions a loader supports */ async function listSupportedGameVersions() { const metadata = await getMavenMetadata(); const versions = metadata.versioning[0].versions[0].version; const supportedVersions = new Set(); for (let i = 0; i < versions.length; i++) { const version = versions[i]; // Filter out beta versions if (version.includes('-beta')) { continue; } const [major, minor] = version.split('.'); supportedVersions.add(`1.${major}.${minor}`); } return Array.from(supportedVersions).map((v) => ({ version: v, stable: true, })); } /** * The loader config for the 'tomate-mods' package */ exports.tomateModsModLoader = { overrideMods: {}, modrinthCategories: ['neoforge'], curseforgeCategory: '6', }; //# sourceMappingURL=neoforge.js.map