fix: paper/purpur vers mismatch (#5687)
* fix: paper/purpur * fix: use fill api * fix: lint
This commit is contained in:
@@ -256,6 +256,26 @@ const purpurBuildsQuery = useQuery({
|
||||
staleTime: 5 * 60 * 1000,
|
||||
})
|
||||
|
||||
const paperSupportedVersionsQuery = useQuery({
|
||||
queryKey: ['paper-supported-versions'] as const,
|
||||
queryFn: async () => {
|
||||
const project = await client.paper.versions_v3.getProject()
|
||||
return new Set(Object.values(project.versions).flat())
|
||||
},
|
||||
enabled: computed(() => editingPlatform.value === 'paper'),
|
||||
staleTime: 5 * 60 * 1000,
|
||||
})
|
||||
|
||||
const purpurSupportedVersionsQuery = useQuery({
|
||||
queryKey: ['purpur-supported-versions'] as const,
|
||||
queryFn: async () => {
|
||||
const project = await client.purpur.versions_v2.getProject()
|
||||
return new Set(project.versions)
|
||||
},
|
||||
enabled: computed(() => editingPlatform.value === 'purpur'),
|
||||
staleTime: 5 * 60 * 1000,
|
||||
})
|
||||
|
||||
type LoaderVersionEntry = LauncherMeta.Manifest.v0.LoaderVersion
|
||||
|
||||
function getLoaderVersionsForGameVersion(
|
||||
@@ -363,18 +383,34 @@ provideInstallationSettings({
|
||||
? tags.gameVersions.value
|
||||
: tags.gameVersions.value.filter((v) => v.version_type === 'release')
|
||||
|
||||
if (loader && loader !== 'vanilla' && !['paper', 'purpur'].includes(loader)) {
|
||||
const manifest = manifestQuery.data.value?.gameVersions
|
||||
if (manifest) {
|
||||
const hasPlaceholder = manifest.some((x) => x.id === '${modrinth.gameVersion}')
|
||||
if (!hasPlaceholder) {
|
||||
const supportedVersions = new Set(
|
||||
manifest.filter((x) => x.loaders.length > 0).map((x) => x.id),
|
||||
)
|
||||
if (loader && loader !== 'vanilla') {
|
||||
if (loader === 'paper') {
|
||||
const supported = paperSupportedVersionsQuery.data.value
|
||||
if (supported) {
|
||||
return versions
|
||||
.filter((v) => supportedVersions.has(v.version))
|
||||
.filter((v) => supported.has(v.version))
|
||||
.map((v) => ({ value: v.version, label: v.version }))
|
||||
}
|
||||
} else if (loader === 'purpur') {
|
||||
const supported = purpurSupportedVersionsQuery.data.value
|
||||
if (supported) {
|
||||
return versions
|
||||
.filter((v) => supported.has(v.version))
|
||||
.map((v) => ({ value: v.version, label: v.version }))
|
||||
}
|
||||
} else {
|
||||
const manifest = manifestQuery.data.value?.gameVersions
|
||||
if (manifest) {
|
||||
const hasPlaceholder = manifest.some((x) => x.id === '${modrinth.gameVersion}')
|
||||
if (!hasPlaceholder) {
|
||||
const supportedVersions = new Set(
|
||||
manifest.filter((x) => x.loaders.length > 0).map((x) => x.id),
|
||||
)
|
||||
return versions
|
||||
.filter((v) => supportedVersions.has(v.version))
|
||||
.map((v) => ({ value: v.version, label: v.version }))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -387,9 +423,23 @@ provideInstallationSettings({
|
||||
},
|
||||
|
||||
resolveHasSnapshots(loader) {
|
||||
if (loader === 'vanilla' || ['paper', 'purpur'].includes(loader)) {
|
||||
if (loader === 'vanilla') {
|
||||
return tags.gameVersions.value.some((v) => v.version_type !== 'release')
|
||||
}
|
||||
if (loader === 'paper') {
|
||||
const supported = paperSupportedVersionsQuery.data.value
|
||||
if (!supported) return false
|
||||
return tags.gameVersions.value.some(
|
||||
(v) => v.version_type !== 'release' && supported.has(v.version),
|
||||
)
|
||||
}
|
||||
if (loader === 'purpur') {
|
||||
const supported = purpurSupportedVersionsQuery.data.value
|
||||
if (!supported) return false
|
||||
return tags.gameVersions.value.some(
|
||||
(v) => v.version_type !== 'release' && supported.has(v.version),
|
||||
)
|
||||
}
|
||||
const manifest = manifestQuery.data.value?.gameVersions
|
||||
if (!manifest) return false
|
||||
const hasPlaceholder = manifest.some((x) => x.id === '${modrinth.gameVersion}')
|
||||
|
||||
@@ -14,18 +14,18 @@ import { LabrinthAffiliateInternalModule } from './labrinth/affiliate/internal'
|
||||
import { LabrinthAuthInternalModule } from './labrinth/auth/internal'
|
||||
import { LabrinthAuthV2Module } from './labrinth/auth/v2'
|
||||
import { LabrinthBillingInternalModule } from './labrinth/billing/internal'
|
||||
import { LabrinthCollectionsModule } from './labrinth/collections'
|
||||
import { LabrinthGlobalsInternalModule } from './labrinth/globals/internal'
|
||||
import { LabrinthLimitsV3Module } from './labrinth/limits/v3'
|
||||
import { LabrinthNotificationsV2Module } from './labrinth/notifications/v2'
|
||||
import { LabrinthOAuthInternalModule } from './labrinth/oauth/internal'
|
||||
import { LabrinthCollectionsModule } from './labrinth/collections'
|
||||
import { LabrinthOrganizationsV3Module } from './labrinth/organizations/v3'
|
||||
import { LabrinthPatsV2Module } from './labrinth/pats/v2'
|
||||
import { LabrinthLimitsV3Module } from './labrinth/limits/v3'
|
||||
import { LabrinthPayoutV3Module } from './labrinth/payout/v3'
|
||||
import { LabrinthPayoutsV3Module } from './labrinth/payouts/v3'
|
||||
import { LabrinthReportsV3Module } from './labrinth/reports/v3'
|
||||
import { LabrinthProjectsV2Module } from './labrinth/projects/v2'
|
||||
import { LabrinthProjectsV3Module } from './labrinth/projects/v3'
|
||||
import { LabrinthReportsV3Module } from './labrinth/reports/v3'
|
||||
import { LabrinthServerPingInternalModule } from './labrinth/server-ping/internal'
|
||||
import { LabrinthSessionsV2Module } from './labrinth/sessions/v2'
|
||||
import { LabrinthStateModule } from './labrinth/state'
|
||||
|
||||
@@ -3,11 +3,11 @@ export * from './auth/v2'
|
||||
export * from './billing/internal'
|
||||
export * from './collections'
|
||||
export * from './globals/internal'
|
||||
export * from './limits/v3'
|
||||
export * from './notifications/v2'
|
||||
export * from './oauth/internal'
|
||||
export * from './organizations/v3'
|
||||
export * from './pats/v2'
|
||||
export * from './limits/v3'
|
||||
export * from './payout/v3'
|
||||
export * from './payouts/v3'
|
||||
export * from './projects/v2'
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
export namespace Paper {
|
||||
export namespace Versions {
|
||||
export namespace v3 {
|
||||
export type Project = {
|
||||
project: { id: string; name: string }
|
||||
versions: Record<string, string[]>
|
||||
}
|
||||
|
||||
export type VersionBuilds = {
|
||||
builds: number[]
|
||||
}
|
||||
|
||||
@@ -12,6 +12,13 @@ export class PaperVersionsV3Module extends AbstractModule {
|
||||
return 'paper_versions_v3'
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Paper project info including all supported Minecraft versions.
|
||||
*/
|
||||
public async getProject(): Promise<Paper.Versions.v3.Project> {
|
||||
return $fetch<Paper.Versions.v3.Project>(`${BASE_URL}/projects/paper`)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get available Paper builds for a Minecraft version.
|
||||
*
|
||||
|
||||
@@ -1,6 +1,11 @@
|
||||
export namespace Purpur {
|
||||
export namespace Versions {
|
||||
export namespace v2 {
|
||||
export type Project = {
|
||||
project: string
|
||||
versions: string[]
|
||||
}
|
||||
|
||||
export type VersionBuilds = {
|
||||
builds: {
|
||||
all: string[]
|
||||
|
||||
@@ -12,6 +12,13 @@ export class PurpurVersionsV2Module extends AbstractModule {
|
||||
return 'purpur_versions_v2'
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Purpur project info including all supported Minecraft versions.
|
||||
*/
|
||||
public async getProject(): Promise<Purpur.Versions.v2.Project> {
|
||||
return $fetch<Purpur.Versions.v2.Project>(`${BASE_URL}/purpur`)
|
||||
}
|
||||
|
||||
/**
|
||||
* Get available Purpur builds for a Minecraft version.
|
||||
*
|
||||
|
||||
@@ -104,7 +104,7 @@ import { computed, onMounted, ref, watch } from 'vue'
|
||||
|
||||
import { useDebugLogger } from '#ui/composables/debug-logger'
|
||||
|
||||
import { injectFilePicker, injectTags } from '../../../../providers'
|
||||
import { injectFilePicker, injectModrinthClient, injectTags } from '../../../../providers'
|
||||
import Avatar from '../../../base/Avatar.vue'
|
||||
import ButtonStyled from '../../../base/ButtonStyled.vue'
|
||||
import Chips from '../../../base/Chips.vue'
|
||||
@@ -116,6 +116,7 @@ import { injectCreationFlowContext } from '../creation-flow-context'
|
||||
import { capitalize, formatLoaderLabel } from '../shared'
|
||||
|
||||
const debug = useDebugLogger('CustomSetupStage')
|
||||
const client = injectModrinthClient()
|
||||
const ctx = injectCreationFlowContext()
|
||||
const {
|
||||
selectedLoader,
|
||||
@@ -280,9 +281,8 @@ async function fetchLoaderManifest(loader: string) {
|
||||
async function fetchPaperSupportedVersions() {
|
||||
if (paperSupportedVersions.value) return
|
||||
try {
|
||||
const res = await fetch('https://api.papermc.io/v2/projects/paper')
|
||||
const data = (await res.json()) as { versions: string[] }
|
||||
paperSupportedVersions.value = new Set(data.versions)
|
||||
const project = await client.paper.versions_v3.getProject()
|
||||
paperSupportedVersions.value = new Set(Object.values(project.versions).flat())
|
||||
} catch {
|
||||
paperSupportedVersions.value = new Set()
|
||||
}
|
||||
@@ -291,9 +291,8 @@ async function fetchPaperSupportedVersions() {
|
||||
async function fetchPurpurSupportedVersions() {
|
||||
if (purpurSupportedVersions.value) return
|
||||
try {
|
||||
const res = await fetch('https://api.purpurmc.org/v2/purpur')
|
||||
const data = (await res.json()) as { versions: string[] }
|
||||
purpurSupportedVersions.value = new Set(data.versions)
|
||||
const project = await client.purpur.versions_v2.getProject()
|
||||
purpurSupportedVersions.value = new Set(project.versions)
|
||||
} catch {
|
||||
purpurSupportedVersions.value = new Set()
|
||||
}
|
||||
@@ -302,8 +301,7 @@ async function fetchPurpurSupportedVersions() {
|
||||
async function fetchPaperVersions(mcVersion: string) {
|
||||
if (paperVersions.value[mcVersion]) return
|
||||
try {
|
||||
const res = await fetch(`https://fill.papermc.io/v3/projects/paper/versions/${mcVersion}`)
|
||||
const data = (await res.json()) as { builds: number[] }
|
||||
const data = await client.paper.versions_v3.getBuilds(mcVersion)
|
||||
paperVersions.value[mcVersion] = data.builds.sort((a, b) => b - a)
|
||||
} catch {
|
||||
paperVersions.value[mcVersion] = []
|
||||
@@ -313,8 +311,7 @@ async function fetchPaperVersions(mcVersion: string) {
|
||||
async function fetchPurpurVersions(mcVersion: string) {
|
||||
if (purpurVersions.value[mcVersion]) return
|
||||
try {
|
||||
const res = await fetch(`https://api.purpurmc.org/v2/purpur/${mcVersion}`)
|
||||
const data = (await res.json()) as { builds: { all: string[] } }
|
||||
const data = await client.purpur.versions_v2.getBuilds(mcVersion)
|
||||
purpurVersions.value[mcVersion] = data.builds.all.sort((a, b) => parseInt(b) - parseInt(a))
|
||||
} catch {
|
||||
purpurVersions.value[mcVersion] = []
|
||||
|
||||
Reference in New Issue
Block a user