From e966eaffc0ad37b1f21f420bfcb6be91f9f22845 Mon Sep 17 00:00:00 2001 From: comp500 Date: Thu, 13 Apr 2023 17:12:44 +0100 Subject: [PATCH] Manually replace FLK deps with QKL when using Quilt >=1.19.2 (fixes #212) --- curseforge/curseforge.go | 10 +++++++++- curseforge/install.go | 9 +++++++-- modrinth/install.go | 10 +++++++--- modrinth/modrinth.go | 9 ++++++++- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/curseforge/curseforge.go b/curseforge/curseforge.go index d832681..2c72937 100644 --- a/curseforge/curseforge.go +++ b/curseforge/curseforge.go @@ -4,6 +4,7 @@ import ( "errors" "fmt" "github.com/spf13/viper" + "github.com/unascribed/FlexVer/go/flexver" "golang.org/x/exp/slices" "io" "path/filepath" @@ -590,10 +591,17 @@ func (m *cfDownloadMetadata) DownloadFile() (io.ReadCloser, error) { return resp.Body, nil } -func mapDepOverride(depID uint32, isQuilt bool) uint32 { +// mapDepOverride transforms manual dependency overrides (which will likely be removed when packwiz is able to determine provided mods) +func mapDepOverride(depID uint32, isQuilt bool, mcVersion string) uint32 { if isQuilt && depID == 306612 { // Transform FAPI dependencies to QFAPI/QSL dependencies when using Quilt return 634179 } + if isQuilt && depID == 308769 { + // Transform FLK dependencies to QKL dependencies when using Quilt >=1.19.2 non-snapshot + if flexver.Less("1.19.1", mcVersion) && flexver.Less(mcVersion, "2.0.0") { + return 720410 + } + } return depID } diff --git a/curseforge/install.go b/curseforge/install.go index 736720d..91a5924 100644 --- a/curseforge/install.go +++ b/curseforge/install.go @@ -44,6 +44,11 @@ var installCmd = &cobra.Command{ fmt.Println(err) os.Exit(1) } + primaryMCVersion, err := pack.GetMCVersion() + if err != nil { + fmt.Println(err) + os.Exit(1) + } game := gameFlag category := categoryFlag @@ -128,7 +133,7 @@ var installCmd = &cobra.Command{ var depIDPendingQueue []uint32 for _, dep := range fileInfoData.Dependencies { if dep.Type == dependencyTypeRequired { - depIDPendingQueue = append(depIDPendingQueue, mapDepOverride(dep.ModID, isQuilt)) + depIDPendingQueue = append(depIDPendingQueue, mapDepOverride(dep.ModID, isQuilt, primaryMCVersion)) } } @@ -192,7 +197,7 @@ var installCmd = &cobra.Command{ for _, dep := range depFileInfo.Dependencies { if dep.Type == dependencyTypeRequired { - depIDPendingQueue = append(depIDPendingQueue, mapDepOverride(dep.ModID, isQuilt)) + depIDPendingQueue = append(depIDPendingQueue, mapDepOverride(dep.ModID, isQuilt, primaryMCVersion)) } } diff --git a/modrinth/install.go b/modrinth/install.go index 7520b24..dfb462d 100644 --- a/modrinth/install.go +++ b/modrinth/install.go @@ -228,6 +228,10 @@ func installVersion(project *modrinthApi.Project, version *modrinthApi.Version, // 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") + mcVersion, err := pack.GetMCVersion() + if err != nil { + return err + } var depMetadata []depMetadataStore var depProjectIDPendingQueue []string @@ -237,7 +241,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, mapDepOverride(*dep.ProjectID, isQuilt)) + depProjectIDPendingQueue = append(depProjectIDPendingQueue, mapDepOverride(*dep.ProjectID, isQuilt, mcVersion)) } if dep.VersionID != nil { depVersionIDPendingQueue = append(depVersionIDPendingQueue, *dep.VersionID) @@ -256,7 +260,7 @@ func installVersion(project *modrinthApi.Project, version *modrinthApi.Version, if err == nil { for _, v := range depVersions { // Add project ID to queue - depProjectIDPendingQueue = append(depProjectIDPendingQueue, mapDepOverride(*v.ProjectID, isQuilt)) + depProjectIDPendingQueue = append(depProjectIDPendingQueue, mapDepOverride(*v.ProjectID, isQuilt, mcVersion)) } } else { fmt.Printf("Error retrieving dependency data: %s\n", err.Error()) @@ -305,7 +309,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, mapDepOverride(*dep.ProjectID, isQuilt)) + depProjectIDPendingQueue = append(depProjectIDPendingQueue, mapDepOverride(*dep.ProjectID, isQuilt, mcVersion)) } if dep.VersionID != nil { depVersionIDPendingQueue = append(depVersionIDPendingQueue, *dep.VersionID) diff --git a/modrinth/modrinth.go b/modrinth/modrinth.go index 45448df..3b238c9 100644 --- a/modrinth/modrinth.go +++ b/modrinth/modrinth.go @@ -427,10 +427,17 @@ 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 { +// mapDepOverride transforms manual dependency overrides (which will likely be removed when packwiz is able to determine provided mods) +func mapDepOverride(depID string, isQuilt bool, mcVersion string) string { if isQuilt && (depID == "P7dR8mSH" || depID == "fabric-api") { // Transform FAPI dependencies to QFAPI/QSL dependencies when using Quilt return "qvIfYCYJ" } + if isQuilt && (depID == "Ha28R6CL" || depID == "fabric-language-kotlin") { + // Transform FLK dependencies to QKL dependencies when using Quilt >=1.19.2 non-snapshot + if flexver.Less("1.19.1", mcVersion) && flexver.Less(mcVersion, "2.0.0") { + return "lwVhp9o5" + } + } return depID }