From cda18fb95742676d6ade8fc2b815778af339e39d Mon Sep 17 00:00:00 2001 From: Prospector <6166773+Prospector@users.noreply.github.com> Date: Wed, 11 Jan 2023 09:55:55 -0800 Subject: [PATCH] Add support for loading Implementation-Version from MANIFEST.MF for Forge mods (#894) * Add support for loading Implementation-Version from MANIFEST.MF for Forge mods * Remove debug lines * Replace just the key instead of the whole version number --- plugins/fileUtils.js | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/plugins/fileUtils.js b/plugins/fileUtils.js index 3ce43652..973d63c3 100644 --- a/plugins/fileUtils.js +++ b/plugins/fileUtils.js @@ -106,17 +106,33 @@ export const inferVersionInfo = async function ( const inferFunctions = { // Forge 1.13+ - 'META-INF/mods.toml': (file, zip) => { + 'META-INF/mods.toml': async (file, zip) => { const metadata = TOML.parse(file) - // ${file.jarVersion} -> Implementation-Version from manifest - // TODO: Parse minecraft version ranges, handle if version is set to value from manifest if (metadata.mods && metadata.mods.length > 0) { + let versionNum = metadata.mods[0].version + + // ${file.jarVersion} -> Implementation-Version from manifest + const manifestFile = zip.file('META-INF/MANIFEST.MF') + if ( + // eslint-disable-next-line no-template-curly-in-string + metadata.mods[0].version.includes('${file.jarVersion}') && + manifestFile !== null + ) { + const manifestText = await manifestFile.async('text') + const regex = /Implementation-Version: (.*)$/m + const match = manifestText.match(regex) + if (match) { + // eslint-disable-next-line no-template-curly-in-string + versionNum = versionNum.replace('${file.jarVersion}', match[1]) + } + } + return { - name: `${project.title} ${metadata.mods[0].version}`, - version_number: metadata.mods[0].version, - version_type: versionType(metadata.mods[0].version), + name: `${project.title} ${versionNum}`, + version_number: versionNum, + version_type: versionType(versionNum), loaders: ['forge'], } } else {