From bd71ad5679ccb47b45bc36029474fff8928b19e0 Mon Sep 17 00:00:00 2001 From: comp500 Date: Thu, 13 Apr 2023 16:45:10 +0100 Subject: [PATCH] Manually replace FAPI deps with QFAPI/QSL when using Quilt (fixes #212) --- curseforge/curseforge.go | 8 ++++++++ curseforge/install.go | 6 ++++-- modrinth/install.go | 7 ++++--- modrinth/modrinth.go | 8 ++++++++ 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/curseforge/curseforge.go b/curseforge/curseforge.go index 9841e17..d832681 100644 --- a/curseforge/curseforge.go +++ b/curseforge/curseforge.go @@ -589,3 +589,11 @@ func (m *cfDownloadMetadata) DownloadFile() (io.ReadCloser, error) { } return resp.Body, nil } + +func mapDepOverride(depID uint32, isQuilt bool) uint32 { + if isQuilt && depID == 306612 { + // Transform FAPI dependencies to QFAPI/QSL dependencies when using Quilt + return 634179 + } + return depID +} diff --git a/curseforge/install.go b/curseforge/install.go index b9a292b..736720d 100644 --- a/curseforge/install.go +++ b/curseforge/install.go @@ -122,11 +122,13 @@ var installCmd = &cobra.Command{ } if len(fileInfoData.Dependencies) > 0 { + isQuilt := slices.Contains(pack.GetLoaders(), "quilt") + var depsInstallable []installableDep var depIDPendingQueue []uint32 for _, dep := range fileInfoData.Dependencies { if dep.Type == dependencyTypeRequired { - depIDPendingQueue = append(depIDPendingQueue, dep.ModID) + depIDPendingQueue = append(depIDPendingQueue, mapDepOverride(dep.ModID, isQuilt)) } } @@ -190,7 +192,7 @@ var installCmd = &cobra.Command{ for _, dep := range depFileInfo.Dependencies { if dep.Type == dependencyTypeRequired { - depIDPendingQueue = append(depIDPendingQueue, dep.ModID) + depIDPendingQueue = append(depIDPendingQueue, mapDepOverride(dep.ModID, isQuilt)) } } diff --git a/modrinth/install.go b/modrinth/install.go index 7dac2a5..7520b24 100644 --- a/modrinth/install.go +++ b/modrinth/install.go @@ -227,6 +227,7 @@ func installVersion(project *modrinthApi.Project, version *modrinthApi.Version, if len(version.Dependencies) > 0 { // TODO: could get installed version IDs, and compare to install the newest - i.e. preferring pinned versions over getting absolute latest? installedProjects := getInstalledProjectIDs(index) + isQuilt := slices.Contains(pack.GetLoaders(), "quilt") var depMetadata []depMetadataStore var depProjectIDPendingQueue []string @@ -236,7 +237,7 @@ func installVersion(project *modrinthApi.Project, version *modrinthApi.Version, // TODO: recommend optional dependencies? if dep.DependencyType != nil && *dep.DependencyType == "required" { if dep.ProjectID != nil { - depProjectIDPendingQueue = append(depProjectIDPendingQueue, *dep.ProjectID) + depProjectIDPendingQueue = append(depProjectIDPendingQueue, mapDepOverride(*dep.ProjectID, isQuilt)) } if dep.VersionID != nil { depVersionIDPendingQueue = append(depVersionIDPendingQueue, *dep.VersionID) @@ -255,7 +256,7 @@ func installVersion(project *modrinthApi.Project, version *modrinthApi.Version, if err == nil { for _, v := range depVersions { // Add project ID to queue - depProjectIDPendingQueue = append(depProjectIDPendingQueue, *v.ProjectID) + depProjectIDPendingQueue = append(depProjectIDPendingQueue, mapDepOverride(*v.ProjectID, isQuilt)) } } else { fmt.Printf("Error retrieving dependency data: %s\n", err.Error()) @@ -304,7 +305,7 @@ func installVersion(project *modrinthApi.Project, version *modrinthApi.Version, // TODO: recommend optional dependencies? if dep.DependencyType != nil && *dep.DependencyType == "required" { if dep.ProjectID != nil { - depProjectIDPendingQueue = append(depProjectIDPendingQueue, *dep.ProjectID) + depProjectIDPendingQueue = append(depProjectIDPendingQueue, mapDepOverride(*dep.ProjectID, isQuilt)) } if dep.VersionID != nil { depVersionIDPendingQueue = append(depVersionIDPendingQueue, *dep.VersionID) diff --git a/modrinth/modrinth.go b/modrinth/modrinth.go index 64cb40b..45448df 100644 --- a/modrinth/modrinth.go +++ b/modrinth/modrinth.go @@ -426,3 +426,11 @@ func resolveVersion(project *modrinthApi.Project, version string) (*modrinthApi. } return nil, fmt.Errorf("unable to find version %s", version) } + +func mapDepOverride(depID string, isQuilt bool) string { + if isQuilt && (depID == "P7dR8mSH" || depID == "fabric-api") { + // Transform FAPI dependencies to QFAPI/QSL dependencies when using Quilt + return "qvIfYCYJ" + } + return depID +}