Update loader/mc versions from imported CF packs (fixes #70)

also refactored internal modloader handling!
This commit is contained in:
comp500 2021-11-22 14:44:08 +00:00
parent b628e2762c
commit 96a2d5fdf6
3 changed files with 55 additions and 49 deletions

View File

@ -87,36 +87,22 @@ var initCmd = &cobra.Command{
if len(modLoaderName) == 0 { if len(modLoaderName) == 0 {
modLoaderName = strings.ToLower(initReadValue("Mod loader [fabric]: ", "fabric")) 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) modLoaderVersions := make(map[string]string)
if modLoaderName != "none" { if modLoaderName != "none" {
components := core.ModLoaders[modLoaderName] if ok {
versions, latestVersion, err := loader.VersionListGetter(mcVersion)
for _, component := range components {
versions, latestVersion, err := component.VersionListGetter(mcVersion)
if err != nil { if err != nil {
fmt.Printf("Error loading versions: %s\n", err) fmt.Printf("Error loading versions: %s\n", err)
os.Exit(1) os.Exit(1)
} }
componentVersion := viper.GetString("init." + component.Name + "-version") componentVersion := viper.GetString("init." + loader.Name + "-version")
if len(componentVersion) == 0 { if len(componentVersion) == 0 {
if viper.GetBool("init." + component.Name + "-latest") { if viper.GetBool("init." + loader.Name + "-latest") {
componentVersion = latestVersion componentVersion = latestVersion
} else { } else {
componentVersion = initReadValue(component.FriendlyName+" version ["+latestVersion+"]: ", latestVersion) componentVersion = initReadValue(loader.FriendlyName+" version ["+latestVersion+"]: ", latestVersion)
} }
} }
found := false found := false
@ -127,10 +113,21 @@ var initCmd = &cobra.Command{
} }
} }
if !found { if !found {
fmt.Println("Given " + component.FriendlyName + " version cannot be found!") fmt.Println("Given " + loader.FriendlyName + " version cannot be found!")
os.Exit(1) 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 // ok this is epic
for _, loader := range core.ModLoaders { for _, loader := range core.ModLoaders {
for _, component := range loader { initCmd.Flags().String(loader.Name+"-version", "", "The "+loader.FriendlyName+" version to use (omit to define interactively)")
initCmd.Flags().String(component.Name+"-version", "", "The "+component.FriendlyName+" version to use (omit to define interactively)") _ = viper.BindPFlag("init."+loader.Name+"-version", initCmd.Flags().Lookup(loader.Name+"-version"))
_ = viper.BindPFlag("init."+component.Name+"-version", initCmd.Flags().Lookup(component.Name+"-version")) initCmd.Flags().Bool(loader.Name+"-latest", false, "Automatically select the latest version of "+loader.FriendlyName)
initCmd.Flags().Bool(component.Name+"-latest", false, "Automatically select the latest version of "+component.FriendlyName) _ = viper.BindPFlag("init."+loader.Name+"-latest", initCmd.Flags().Lookup(loader.Name+"-latest"))
_ = viper.BindPFlag("init."+component.Name+"-latest", initCmd.Flags().Lookup(component.Name+"-latest"))
}
} }
} }

View File

@ -27,34 +27,23 @@ type ModLoaderComponent struct {
VersionListGetter func(mcVersion string) ([]string, string, error) VersionListGetter func(mcVersion string) ([]string, string, error)
} }
var ModLoaders = map[string][]ModLoaderComponent{ var ModLoaders = map[string]ModLoaderComponent{
"fabric": { "fabric": {
{ // There's no need to specify yarn version - yarn isn't used outside a dev environment, and intermediary corresponds to game version anyway
Name: "fabric", Name: "fabric",
FriendlyName: "Fabric loader", FriendlyName: "Fabric loader",
VersionListGetter: FetchMavenVersionList("https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml"), 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"),
//},
},
"forge": { "forge": {
{
Name: "forge", Name: "forge",
FriendlyName: "Forge", FriendlyName: "Forge",
VersionListGetter: FetchMavenVersionPrefixedListStrip("https://files.minecraftforge.net/maven/net/minecraftforge/forge/maven-metadata.xml", "Forge"), VersionListGetter: FetchMavenVersionPrefixedListStrip("https://files.minecraftforge.net/maven/net/minecraftforge/forge/maven-metadata.xml", "Forge"),
}, },
},
"liteloader": { "liteloader": {
{
Name: "liteloader", Name: "liteloader",
FriendlyName: "LiteLoader", FriendlyName: "LiteLoader",
VersionListGetter: FetchMavenVersionPrefixedList("http://repo.mumfrey.com/content/repositories/snapshots/com/mumfrey/liteloader/maven-metadata.xml", "LiteLoader"), VersionListGetter: FetchMavenVersionPrefixedList("http://repo.mumfrey.com/content/repositories/snapshots/com/mumfrey/liteloader/maven-metadata.xml", "LiteLoader"),
}, },
},
} }
func FetchMavenVersionList(url string) func(mcVersion string) ([]string, string, error) { func FetchMavenVersionList(url string) func(mcVersion string) ([]string, string, error) {
@ -137,3 +126,15 @@ func hasPrefixSplitDash(str string, prefix string) bool {
} }
return false return false
} }
func ComponentToFriendlyName(component string) string {
if component == "minecraft" {
return "Minecraft"
}
loader, ok := ModLoaders[component]
if ok {
return loader.FriendlyName
} else {
return component
}
}

View File

@ -166,6 +166,16 @@ var importCmd = &cobra.Command{
}, },
Versions: packImport.Versions(), 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() index, err := pack.LoadIndex()
if err != nil { if err != nil {