fix: neoforge not existing for 26.1 breaking vers picker (#5674)
* fix: neoforge for 26.1 -> other vers being picked not existing causing version picker to break * fix: lint
This commit is contained in:
@@ -254,6 +254,14 @@ async function fetchLoaderManifest(loader: string) {
|
|||||||
let apiLoader = loader
|
let apiLoader = loader
|
||||||
if (apiLoader === 'neoforge') apiLoader = 'neo'
|
if (apiLoader === 'neoforge') apiLoader = 'neo'
|
||||||
|
|
||||||
|
debug(
|
||||||
|
'fetchLoaderManifest:',
|
||||||
|
loader,
|
||||||
|
'apiLoader:',
|
||||||
|
apiLoader,
|
||||||
|
'cached:',
|
||||||
|
!!loaderVersionsCache.value[apiLoader],
|
||||||
|
)
|
||||||
if (loaderVersionsCache.value[apiLoader]) return
|
if (loaderVersionsCache.value[apiLoader]) return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -262,7 +270,9 @@ async function fetchLoaderManifest(loader: string) {
|
|||||||
gameVersions: { id: string; loaders: LoaderVersionEntry[] }[]
|
gameVersions: { id: string; loaders: LoaderVersionEntry[] }[]
|
||||||
}
|
}
|
||||||
loaderVersionsCache.value[apiLoader] = data.gameVersions
|
loaderVersionsCache.value[apiLoader] = data.gameVersions
|
||||||
} catch {
|
debug('fetchLoaderManifest: loaded', apiLoader, 'gameVersions:', data.gameVersions.length)
|
||||||
|
} catch (e) {
|
||||||
|
debug('fetchLoaderManifest: FAILED', apiLoader, e)
|
||||||
loaderVersionsCache.value[apiLoader] = []
|
loaderVersionsCache.value[apiLoader] = []
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -319,13 +329,32 @@ function getLoaderVersionsForGameVersion(
|
|||||||
if (apiLoader === 'neoforge') apiLoader = 'neo'
|
if (apiLoader === 'neoforge') apiLoader = 'neo'
|
||||||
|
|
||||||
const manifest = loaderVersionsCache.value[apiLoader]
|
const manifest = loaderVersionsCache.value[apiLoader]
|
||||||
|
debug('getLoaderVersionsForGameVersion:', {
|
||||||
|
loader,
|
||||||
|
apiLoader,
|
||||||
|
gameVersion,
|
||||||
|
hasManifest: !!manifest,
|
||||||
|
manifestLength: manifest?.length,
|
||||||
|
})
|
||||||
if (!manifest) return []
|
if (!manifest) return []
|
||||||
|
|
||||||
// Some loaders (e.g. Fabric) list all versions under a placeholder entry
|
// Some loaders (e.g. Fabric) list all versions under a placeholder entry
|
||||||
const placeholder = manifest.find((x) => x.id === '${modrinth.gameVersion}')
|
const placeholder = manifest.find((x) => x.id === '${modrinth.gameVersion}')
|
||||||
if (placeholder) return placeholder.loaders
|
if (placeholder) {
|
||||||
|
debug(
|
||||||
|
'getLoaderVersionsForGameVersion: using placeholder, loaders:',
|
||||||
|
placeholder.loaders.length,
|
||||||
|
)
|
||||||
|
return placeholder.loaders
|
||||||
|
}
|
||||||
|
|
||||||
const entry = manifest.find((x) => x.id === gameVersion)
|
const entry = manifest.find((x) => x.id === gameVersion)
|
||||||
|
debug(
|
||||||
|
'getLoaderVersionsForGameVersion: entry for',
|
||||||
|
gameVersion,
|
||||||
|
':',
|
||||||
|
entry ? entry.loaders.length + ' loaders' : 'NOT FOUND',
|
||||||
|
)
|
||||||
return entry?.loaders ?? []
|
return entry?.loaders ?? []
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -348,9 +377,12 @@ watch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Watch loader + game version to resolve loader versions
|
// Watch loader + game version to resolve loader versions
|
||||||
|
let loaderVersionWatchId = 0
|
||||||
watch(
|
watch(
|
||||||
[() => selectedLoader.value, () => selectedGameVersion.value],
|
[() => selectedLoader.value, () => selectedGameVersion.value],
|
||||||
async ([loader, gameVersion]) => {
|
async ([loader, gameVersion]) => {
|
||||||
|
const watchId = ++loaderVersionWatchId
|
||||||
|
debug('watch [loader, gameVersion] fired:', { loader, gameVersion, watchId })
|
||||||
loaderVersionsData.value = []
|
loaderVersionsData.value = []
|
||||||
selectedLoaderVersion.value = null
|
selectedLoaderVersion.value = null
|
||||||
|
|
||||||
@@ -360,8 +392,8 @@ watch(
|
|||||||
|
|
||||||
if (loader === 'paper') {
|
if (loader === 'paper') {
|
||||||
await fetchPaperVersions(gameVersion)
|
await fetchPaperVersions(gameVersion)
|
||||||
|
if (watchId !== loaderVersionWatchId) return
|
||||||
loaderVersionsLoading.value = false
|
loaderVersionsLoading.value = false
|
||||||
// Auto-select latest build
|
|
||||||
const builds = paperVersions.value[gameVersion]
|
const builds = paperVersions.value[gameVersion]
|
||||||
if (builds?.length) {
|
if (builds?.length) {
|
||||||
selectedLoaderVersion.value = `${builds[0]}`
|
selectedLoaderVersion.value = `${builds[0]}`
|
||||||
@@ -371,8 +403,8 @@ watch(
|
|||||||
|
|
||||||
if (loader === 'purpur') {
|
if (loader === 'purpur') {
|
||||||
await fetchPurpurVersions(gameVersion)
|
await fetchPurpurVersions(gameVersion)
|
||||||
|
if (watchId !== loaderVersionWatchId) return
|
||||||
loaderVersionsLoading.value = false
|
loaderVersionsLoading.value = false
|
||||||
// Auto-select latest build
|
|
||||||
const builds = purpurVersions.value[gameVersion]
|
const builds = purpurVersions.value[gameVersion]
|
||||||
if (builds?.length) {
|
if (builds?.length) {
|
||||||
selectedLoaderVersion.value = builds[0]
|
selectedLoaderVersion.value = builds[0]
|
||||||
@@ -381,7 +413,18 @@ watch(
|
|||||||
}
|
}
|
||||||
|
|
||||||
await fetchLoaderManifest(loader)
|
await fetchLoaderManifest(loader)
|
||||||
|
if (watchId !== loaderVersionWatchId) {
|
||||||
|
debug('watch [loader, gameVersion]: stale execution, skipping', {
|
||||||
|
watchId,
|
||||||
|
current: loaderVersionWatchId,
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
loaderVersionsData.value = getLoaderVersionsForGameVersion(loader, gameVersion)
|
loaderVersionsData.value = getLoaderVersionsForGameVersion(loader, gameVersion)
|
||||||
|
debug(
|
||||||
|
'watch [loader, gameVersion]: loaderVersionsData set, count:',
|
||||||
|
loaderVersionsData.value.length,
|
||||||
|
)
|
||||||
loaderVersionsLoading.value = false
|
loaderVersionsLoading.value = false
|
||||||
|
|
||||||
// Auto-select based on loaderVersionType
|
// Auto-select based on loaderVersionType
|
||||||
@@ -395,6 +438,16 @@ watch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
function autoSelectLoaderVersion() {
|
function autoSelectLoaderVersion() {
|
||||||
|
debug(
|
||||||
|
'autoSelectLoaderVersion: type:',
|
||||||
|
loaderVersionType.value,
|
||||||
|
'dataCount:',
|
||||||
|
loaderVersionsData.value.length,
|
||||||
|
'stableCount:',
|
||||||
|
loaderVersionsData.value.filter((v) => v.stable).length,
|
||||||
|
'first:',
|
||||||
|
loaderVersionsData.value[0]?.id,
|
||||||
|
)
|
||||||
if (loaderVersionType.value === 'stable') {
|
if (loaderVersionType.value === 'stable') {
|
||||||
const stable = loaderVersionsData.value.find((v) => v.stable)
|
const stable = loaderVersionsData.value.find((v) => v.stable)
|
||||||
selectedLoaderVersion.value = stable?.id ?? loaderVersionsData.value[0]?.id ?? null
|
selectedLoaderVersion.value = stable?.id ?? loaderVersionsData.value[0]?.id ?? null
|
||||||
@@ -403,7 +456,7 @@ function autoSelectLoaderVersion() {
|
|||||||
} else if (loaderVersionType.value === 'other' && !selectedLoaderVersion.value) {
|
} else if (loaderVersionType.value === 'other' && !selectedLoaderVersion.value) {
|
||||||
selectedLoaderVersion.value = loaderVersionsData.value[0]?.id ?? null
|
selectedLoaderVersion.value = loaderVersionsData.value[0]?.id ?? null
|
||||||
}
|
}
|
||||||
debug('autoSelectLoaderVersion:', selectedLoaderVersion.value, 'type:', loaderVersionType.value)
|
debug('autoSelectLoaderVersion: result:', selectedLoaderVersion.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
const loaderVersionOptions = computed<ComboboxOption<string>[]>(() => {
|
const loaderVersionOptions = computed<ComboboxOption<string>[]>(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user