From 96a2d5fdf64c7b7bf8c7ed4aba3d033182452bac Mon Sep 17 00:00:00 2001 From: comp500 Date: Mon, 22 Nov 2021 14:44:08 +0000 Subject: [PATCH] Update loader/mc versions from imported CF packs (fixes #70) also refactored internal modloader handling! --- cmd/init.go | 51 ++++++++++++++++++++------------------------ core/versionutil.go | 43 +++++++++++++++++++------------------ curseforge/import.go | 10 +++++++++ 3 files changed, 55 insertions(+), 49 deletions(-) diff --git a/cmd/init.go b/cmd/init.go index 8ebee34..a5de8da 100644 --- a/cmd/init.go +++ b/cmd/init.go @@ -87,36 +87,22 @@ var initCmd = &cobra.Command{ if len(modLoaderName) == 0 { modLoaderName = strings.ToLower(initReadValue("Mod loader [fabric]: ", "fabric")) } - _, ok := core.ModLoaders[modLoaderName] - if modLoaderName != "none" && !ok { - fmt.Println("Given mod loader is not supported! Use \"none\" to specify no modloader, or to configure one manually.") - fmt.Print("The following mod loaders are supported: ") - keys := make([]string, len(core.ModLoaders)) - i := 0 - for k := range core.ModLoaders { - keys[i] = k - i++ - } - fmt.Println(strings.Join(keys, ", ")) - os.Exit(1) - } + loader, ok := core.ModLoaders[modLoaderName] modLoaderVersions := make(map[string]string) if modLoaderName != "none" { - components := core.ModLoaders[modLoaderName] - - for _, component := range components { - versions, latestVersion, err := component.VersionListGetter(mcVersion) + if ok { + versions, latestVersion, err := loader.VersionListGetter(mcVersion) if err != nil { fmt.Printf("Error loading versions: %s\n", err) os.Exit(1) } - componentVersion := viper.GetString("init." + component.Name + "-version") + componentVersion := viper.GetString("init." + loader.Name + "-version") if len(componentVersion) == 0 { - if viper.GetBool("init." + component.Name + "-latest") { + if viper.GetBool("init." + loader.Name + "-latest") { componentVersion = latestVersion } else { - componentVersion = initReadValue(component.FriendlyName+" version ["+latestVersion+"]: ", latestVersion) + componentVersion = initReadValue(loader.FriendlyName+" version ["+latestVersion+"]: ", latestVersion) } } found := false @@ -127,10 +113,21 @@ var initCmd = &cobra.Command{ } } if !found { - fmt.Println("Given " + component.FriendlyName + " version cannot be found!") + fmt.Println("Given " + loader.FriendlyName + " version cannot be found!") os.Exit(1) } - modLoaderVersions[component.Name] = componentVersion + modLoaderVersions[loader.Name] = componentVersion + } else { + fmt.Println("Given mod loader is not supported! Use \"none\" to specify no modloader, or to configure one manually.") + fmt.Print("The following mod loaders are supported: ") + keys := make([]string, len(core.ModLoaders)) + i := 0 + for k := range core.ModLoaders { + keys[i] = k + i++ + } + fmt.Println(strings.Join(keys, ", ")) + os.Exit(1) } } @@ -223,12 +220,10 @@ func init() { // ok this is epic for _, loader := range core.ModLoaders { - for _, component := range loader { - initCmd.Flags().String(component.Name+"-version", "", "The "+component.FriendlyName+" version to use (omit to define interactively)") - _ = viper.BindPFlag("init."+component.Name+"-version", initCmd.Flags().Lookup(component.Name+"-version")) - initCmd.Flags().Bool(component.Name+"-latest", false, "Automatically select the latest version of "+component.FriendlyName) - _ = viper.BindPFlag("init."+component.Name+"-latest", initCmd.Flags().Lookup(component.Name+"-latest")) - } + initCmd.Flags().String(loader.Name+"-version", "", "The "+loader.FriendlyName+" version to use (omit to define interactively)") + _ = viper.BindPFlag("init."+loader.Name+"-version", initCmd.Flags().Lookup(loader.Name+"-version")) + initCmd.Flags().Bool(loader.Name+"-latest", false, "Automatically select the latest version of "+loader.FriendlyName) + _ = viper.BindPFlag("init."+loader.Name+"-latest", initCmd.Flags().Lookup(loader.Name+"-latest")) } } diff --git a/core/versionutil.go b/core/versionutil.go index 1423d66..2919637 100644 --- a/core/versionutil.go +++ b/core/versionutil.go @@ -27,33 +27,22 @@ type ModLoaderComponent struct { VersionListGetter func(mcVersion string) ([]string, string, error) } -var ModLoaders = map[string][]ModLoaderComponent{ +var ModLoaders = map[string]ModLoaderComponent{ "fabric": { - { - Name: "fabric", - FriendlyName: "Fabric loader", - VersionListGetter: FetchMavenVersionList("https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml"), - }, // There's no need to specify yarn version - yarn isn't used outside a dev environment, and intermediary corresponds to game version anyway - //{ - // Name: "yarn", - // FriendlyName: "Yarn (mappings)", - // VersionListGetter: fetchMavenVersionPrefixedList("https://maven.fabricmc.net/net/fabricmc/yarn/maven-metadata.xml", "Yarn"), - //}, + Name: "fabric", + FriendlyName: "Fabric loader", + VersionListGetter: FetchMavenVersionList("https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml"), }, "forge": { - { - Name: "forge", - FriendlyName: "Forge", - VersionListGetter: FetchMavenVersionPrefixedListStrip("https://files.minecraftforge.net/maven/net/minecraftforge/forge/maven-metadata.xml", "Forge"), - }, + Name: "forge", + FriendlyName: "Forge", + VersionListGetter: FetchMavenVersionPrefixedListStrip("https://files.minecraftforge.net/maven/net/minecraftforge/forge/maven-metadata.xml", "Forge"), }, "liteloader": { - { - Name: "liteloader", - FriendlyName: "LiteLoader", - VersionListGetter: FetchMavenVersionPrefixedList("http://repo.mumfrey.com/content/repositories/snapshots/com/mumfrey/liteloader/maven-metadata.xml", "LiteLoader"), - }, + Name: "liteloader", + FriendlyName: "LiteLoader", + VersionListGetter: FetchMavenVersionPrefixedList("http://repo.mumfrey.com/content/repositories/snapshots/com/mumfrey/liteloader/maven-metadata.xml", "LiteLoader"), }, } @@ -137,3 +126,15 @@ func hasPrefixSplitDash(str string, prefix string) bool { } return false } + +func ComponentToFriendlyName(component string) string { + if component == "minecraft" { + return "Minecraft" + } + loader, ok := ModLoaders[component] + if ok { + return loader.FriendlyName + } else { + return component + } +} diff --git a/curseforge/import.go b/curseforge/import.go index 5f12d1c..4348ce0 100644 --- a/curseforge/import.go +++ b/curseforge/import.go @@ -166,6 +166,16 @@ var importCmd = &cobra.Command{ }, Versions: packImport.Versions(), } + } else { + for component, version := range packImport.Versions() { + packVersion, ok := pack.Versions[component] + if !ok { + fmt.Println("Set " + core.ComponentToFriendlyName(component) + " version to " + version) + } else if packVersion != version { + fmt.Println("Set " + core.ComponentToFriendlyName(component) + " version to " + version + " (previously " + version + ")") + } + pack.Versions[component] = version + } } index, err := pack.LoadIndex() if err != nil {