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 {
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"))
}
}

View File

@ -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
}
}

View File

@ -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 {