From 08c868fd0f8c5828fdbde203a3f0a76ec05fb3c3 Mon Sep 17 00:00:00 2001 From: cuhlors Date: Fri, 6 Jun 2025 00:46:16 -0600 Subject: [PATCH] Create neoforge.js --- profiles.d/neoforge.js | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 profiles.d/neoforge.js diff --git a/profiles.d/neoforge.js b/profiles.d/neoforge.js new file mode 100644 index 00000000..5f0aafe1 --- /dev/null +++ b/profiles.d/neoforge.js @@ -0,0 +1,59 @@ +/* -------------------------------------------------------------------------- * + * NeoForge profile + * -------------------------------------------------------------------------- */ +const path = require('path'); +const fs = require('fs-extra'); +const https = require('https'); +const profile = require('./template'); + +const REMOTE_XML = 'https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml'; +const BASE = 'https://maven.neoforged.net/releases/net/neoforged/neoforge/'; + +module.exports.profile = { + name : 'NeoForge', + id : 'neoforge', + type : 'release', + group: 'neoforge', + request_args : { url: REMOTE_XML, json: false }, + + handler(profile_dir, xmlBody, cb) { + let versions = extract(xmlBody); + + if (versions.length) return cb(null, build(versions, profile_dir)); + + cb(null, build(versions, profile_dir)); // list may be empty + } +}; + +/* ------------ helpers --------------------------------------------------- */ +function extract(xml) { + return (xml.match(/([^<]+)<\/version>/g) || []) + .map(v => v.slice(9, -10)) + .filter(v => !v.includes('SNAPSHOT')) + .filter(v => !v.includes('craftmine')); +} + +function mcVersion(name) { + const idSplit = name.split(/[.-]/); + if (idSplit[1] == 0) { + return `1.${idSplit[0]}`; + } + return `1.${idSplit[0]}.${idSplit[1]}`; +} + +function build(list, dir) { + return list.reverse().map(v => { + const it = new profile(); + const mcversion = mcVersion(v); + + it.id = mcversion; + it.group = 'neoforge'; + it.webui_desc = 'NeoForge ' + mcversion + ` (build ${v})`; + it.type = v.toLowerCase().includes('-beta') ? 'beta' : 'release'; + it.version = it.release_version = v; + it.filename = `neoforge-${v}-installer.jar`; + it.url = BASE + v + '/' + it.filename; + it.downloaded = fs.existsSync(path.join(dir, v, it.filename)); + return it; + }); +}