UNPKG

onelnchr-mc-loaders

Version:
119 lines 4.65 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.downloadForge = downloadForge; 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 = 'forge'; exports.url = 'https://files.minecraftforge.net/'; async function downloadForge(forgeFilePath, loaderVersion) { fs_1.default.mkdirSync(path_1.default.dirname(forgeFilePath), { recursive: true }); const downloadLink = getDownloadLink(loaderVersion); try { const response = await axios_1.default.get(downloadLink, { responseType: 'arraybuffer', }); const buffer = Buffer.from(response.data); await fs_1.default.promises.writeFile(forgeFilePath, buffer); } catch (error) { console.error('Error downloading Forge:', error); } } async function getMavenMetadata() { const metadataUrl = 'https://maven.minecraftforge.net/net/minecraftforge/forge/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}-${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}-${loaderVersion}` */ async function listLoaderVersions(gameVersion) { const versions = await listAllLoaderVersions(); const filteredVersions = versions.filter((version) => version.includes(gameVersion + '-')); return filteredVersions; } function getDownloadLink(loaderVersion) { const split = loaderVersion.split('.'); const minor = split[1]; const t = split.pop(); if (minor && parseInt(minor) <= 12 && (loaderVersion.split('-')[0] !== '1.12.2' || (t && parseInt(t) <= 2847))) { return `https://maven.minecraftforge.net/net/minecraftforge/forge/${loaderVersion}/forge-${loaderVersion}-universal.jar`; } else { return `https://maven.minecraftforge.net/net/minecraftforge/forge/${loaderVersion}/forge-${loaderVersion}-installer.jar`; } } /** * 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', `forge-${config.gameVersion}-${config.loaderVersion}`, 'forge.jar'); await downloadForge(versionPath, config.loaderVersion); return { root: config.rootPath, clientPackage: null, version: { number: config.gameVersion, type: 'release', custom: `forge-${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].split('-')[0]; supportedVersions.add(version); } return Array.from(supportedVersions).map((v) => ({ version: v, stable: true, })); } /** * The loader config for the 'tomate-mods' package */ exports.tomateModsModLoader = { overrideMods: {}, modrinthCategories: ['forge'], curseforgeCategory: '1', }; //# sourceMappingURL=forge.js.map