onelnchr-mc-loaders
Version:
Provides metadata for minecraft modloaders
119 lines • 4.65 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.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