onelnchr-mc-loaders
Version:
Provides metadata for minecraft modloaders
112 lines • 4.52 kB
JavaScript
;
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