fix: neoforge mc version inferring incorrectly (#6068)
* fix: neoforge mc version infering * fix: check if versionRange exists
This commit is contained in:
@@ -28,26 +28,44 @@ export function createLoaderParsers(
|
|||||||
if (metadata.dependencies) {
|
if (metadata.dependencies) {
|
||||||
const neoForgeDependency = Object.values(metadata.dependencies)
|
const neoForgeDependency = Object.values(metadata.dependencies)
|
||||||
.flat()
|
.flat()
|
||||||
.find((dependency: any) => dependency.modId === 'neoforge')
|
.filter((dependency: any) => dependency.modId === 'neoforge')
|
||||||
|
.map((dependency: any) => dependency.versionRange)
|
||||||
|
.find((range) => range)
|
||||||
|
const minecraftDependency = Object.values(metadata.dependencies)
|
||||||
|
.flat()
|
||||||
|
.filter((dependency: any) => dependency.modId === 'minecraft')
|
||||||
|
.map((dependency: any) => dependency.versionRange)
|
||||||
|
.find((range) => range)
|
||||||
|
|
||||||
if (neoForgeDependency) {
|
if (minecraftDependency) {
|
||||||
try {
|
newGameVersions = getGameVersionsMatchingMavenRange(
|
||||||
// https://docs.neoforged.net/docs/gettingstarted/versioning/#neoforge
|
minecraftDependency,
|
||||||
const mcVersionRange = (neoForgeDependency as any).versionRange
|
simplifiedGameVersions,
|
||||||
.replace('-beta', '')
|
)
|
||||||
.replace(
|
} else if (neoForgeDependency) {
|
||||||
/(\d+)(?:\.(\d+))?(?:\.(\d+)?)?/g,
|
// https://docs.neoforged.net/docs/gettingstarted/versioning/#neoforge
|
||||||
(_match: string, major: string, minor: string) => {
|
// NeoForge's versioning changed after Mojang changed from 1.<major>.<minor> to <year>.<drop>.<patch>, so both cases need to be handled
|
||||||
return `1.${major}${minor ? '.' + minor : ''}`
|
const neoPre26Regex = /^(?<mc_major>\d+)(?:\.(?<mc_minor>\d+))?(?:\.(?<neo>\d+)?)?$/
|
||||||
},
|
const neoPost26Regex =
|
||||||
)
|
/^(?<mc_year>\d+)(?:\.(?<mc_drop>\d+))?(?:\.(?<mc_patch>\d+)?)?(?:\.(\d+))?$/
|
||||||
newGameVersions = getGameVersionsMatchingMavenRange(
|
|
||||||
mcVersionRange,
|
newGameVersions = getGameVersionsMatchingMavenRange(
|
||||||
simplifiedGameVersions,
|
neoForgeDependency.replace('-beta', ''),
|
||||||
)
|
simplifiedGameVersions,
|
||||||
} catch {
|
(version) => {
|
||||||
// Ignore parsing errors, just leave game_versions empty
|
const matchPre26 = version.match(neoPre26Regex)
|
||||||
}
|
if (matchPre26 && matchPre26.groups) {
|
||||||
|
const { mc_major, mc_minor } = matchPre26.groups
|
||||||
|
return mc_minor ? `1.${mc_major}.${mc_minor}` : `1.${mc_major}`
|
||||||
|
}
|
||||||
|
const matchPost26 = version.match(neoPost26Regex)
|
||||||
|
if (matchPost26 && matchPost26.groups) {
|
||||||
|
const { mc_year, mc_drop, mc_patch } = matchPost26.groups
|
||||||
|
return `${mc_year}${mc_drop ? `.${mc_drop}` : ''}${mc_patch ? `.${mc_patch}` : ''}`
|
||||||
|
}
|
||||||
|
return version
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export function getGameVersionsMatchingSemverRange(
|
|||||||
export function getGameVersionsMatchingMavenRange(
|
export function getGameVersionsMatchingMavenRange(
|
||||||
range: string | undefined,
|
range: string | undefined,
|
||||||
gameVersions: string[],
|
gameVersions: string[],
|
||||||
|
processor: (version: string) => string | null = (v) => v,
|
||||||
): string[] {
|
): string[] {
|
||||||
if (!range) {
|
if (!range) {
|
||||||
return []
|
return []
|
||||||
@@ -63,24 +64,42 @@ export function getGameVersionsMatchingMavenRange(
|
|||||||
|
|
||||||
for (const range of ranges) {
|
for (const range of ranges) {
|
||||||
let result
|
let result
|
||||||
if ((result = range.match(LESS_THAN_EQUAL))) {
|
let version1
|
||||||
semverRanges.push(`<=${result[1]}`)
|
let version2
|
||||||
} else if ((result = range.match(LESS_THAN))) {
|
if ((result = range.match(LESS_THAN_EQUAL)) && (version1 = processor(result[1]))) {
|
||||||
semverRanges.push(`<${result[1]}`)
|
semverRanges.push(`<=${version1}`)
|
||||||
} else if ((result = range.match(EQUAL))) {
|
} else if ((result = range.match(LESS_THAN)) && (version1 = processor(result[1]))) {
|
||||||
semverRanges.push(`${result[1]}`)
|
semverRanges.push(`<${version1}`)
|
||||||
} else if ((result = range.match(GREATER_THAN_EQUAL))) {
|
} else if ((result = range.match(EQUAL)) && (version1 = processor(result[1]))) {
|
||||||
semverRanges.push(`>=${result[1]}`)
|
semverRanges.push(`${version1}`)
|
||||||
} else if ((result = range.match(GREATER_THAN))) {
|
} else if ((result = range.match(GREATER_THAN_EQUAL)) && (version1 = processor(result[1]))) {
|
||||||
semverRanges.push(`>${result[1]}`)
|
semverRanges.push(`>=${version1}`)
|
||||||
} else if ((result = range.match(BETWEEN))) {
|
} else if ((result = range.match(GREATER_THAN)) && (version1 = processor(result[1]))) {
|
||||||
semverRanges.push(`>${result[1]} <${result[2]}`)
|
semverRanges.push(`>${version1}`)
|
||||||
} else if ((result = range.match(BETWEEN_EQUAL))) {
|
} else if (
|
||||||
semverRanges.push(`>=${result[1]} <=${result[2]}`)
|
(result = range.match(BETWEEN)) &&
|
||||||
} else if ((result = range.match(BETWEEN_LESS_THAN_EQUAL))) {
|
(version1 = processor(result[1])) &&
|
||||||
semverRanges.push(`>${result[1]} <=${result[2]}`)
|
(version2 = processor(result[2]))
|
||||||
} else if ((result = range.match(BETWEEN_GREATER_THAN_EQUAL))) {
|
) {
|
||||||
semverRanges.push(`>=${result[1]} <${result[2]}`)
|
semverRanges.push(`>${version1} <${version2}`)
|
||||||
|
} else if (
|
||||||
|
(result = range.match(BETWEEN_EQUAL)) &&
|
||||||
|
(version1 = processor(result[1])) &&
|
||||||
|
(version2 = processor(result[2]))
|
||||||
|
) {
|
||||||
|
semverRanges.push(`>=${version1} <=${version2}`)
|
||||||
|
} else if (
|
||||||
|
(result = range.match(BETWEEN_LESS_THAN_EQUAL)) &&
|
||||||
|
(version1 = processor(result[1])) &&
|
||||||
|
(version2 = processor(result[2]))
|
||||||
|
) {
|
||||||
|
semverRanges.push(`>${version1} <=${version2}`)
|
||||||
|
} else if (
|
||||||
|
(result = range.match(BETWEEN_GREATER_THAN_EQUAL)) &&
|
||||||
|
(version1 = processor(result[1])) &&
|
||||||
|
(version2 = processor(result[2]))
|
||||||
|
) {
|
||||||
|
semverRanges.push(`>=${version1} <${version2}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return getGameVersionsMatchingSemverRange(semverRanges, gameVersions)
|
return getGameVersionsMatchingSemverRange(semverRanges, gameVersions)
|
||||||
|
|||||||
Reference in New Issue
Block a user