diff --git a/helpers/infer.js b/helpers/infer.js index 92d118f77..9f1a5e14b 100644 --- a/helpers/infer.js +++ b/helpers/infer.js @@ -95,7 +95,7 @@ export const inferVersionInfo = async function (rawFile, project, gameVersions) .map((it) => it.version) const inferFunctions = { - // Forge 1.13+ + // Forge 1.13+ and NeoForge 'META-INF/mods.toml': async (file, zip) => { const metadata = TOML.parse(file, { joiner: '\n' }) @@ -122,6 +122,7 @@ export const inferVersionInfo = async function (rawFile, project, gameVersions) const mcDependencies = Object.values(metadata.dependencies) .flat() .filter((dependency) => dependency.modId === 'minecraft') + if (mcDependencies.length > 0) { gameVersions = getGameVersionsMatchingMavenRange( mcDependencies[0].versionRange, @@ -129,11 +130,31 @@ export const inferVersionInfo = async function (rawFile, project, gameVersions) ) } + const hasNeoForge = + Object.values(metadata.dependencies) + .flat() + .filter((dependency) => dependency.modId === 'neoforge').length > 0 + + const hasForge = + Object.values(metadata.dependencies) + .flat() + .filter((dependency) => dependency.modId === 'forge').length > 0 + + // Checks if game version is below 1.20.2 as NeoForge full split and id change was in 1.20.2 + const below1202 = getGameVersionsMatchingSemverRange('<=1.20.1', simplifiedGameVersions) + + const isOlderThan1202 = below1202.some((r) => gameVersions.includes(r)) + + const loaders = [] + + if (hasNeoForge) loaders.push('neoforge') + if (hasForge || isOlderThan1202) loaders.push('forge') + return { name: `${project.title} ${versionNum}`, version_number: versionNum, version_type: versionType(versionNum), - loaders: ['forge'], + loaders, game_versions: gameVersions, } } else { @@ -250,6 +271,9 @@ export const inferVersionInfo = async function (rawFile, project, gameVersions) if ('forge' in metadata.dependencies) { loaders.push('forge') } + if ('neoforge' in metadata.dependencies) { + loaders.push('neoforge') + } if ('fabric-loader' in metadata.dependencies) { loaders.push('fabric') }