Skip to content

Commit

Permalink
Support NeoForge as a loader (compatible with Forge mods)
Browse files Browse the repository at this point in the history
TODO: implement support in migrate command
  • Loading branch information
comp500 committed Jul 30, 2023
1 parent 38dcc50 commit 234f927
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 14 deletions.
5 changes: 4 additions & 1 deletion core/pack.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,10 @@ func (pack Pack) GetLoaders() (loaders []string) {
} else if _, hasFabric := pack.Versions["fabric"]; hasFabric {
loaders = append(loaders, "fabric")
}
if _, hasForge := pack.Versions["forge"]; hasForge {
if _, hasNeoForge := pack.Versions["neoforge"]; hasNeoForge {
loaders = append(loaders, "neoforge")
loaders = append(loaders, "forge") // Backwards-compatible; for now (could be configurable later)
} else if _, hasForge := pack.Versions["forge"]; hasForge {
loaders = append(loaders, "forge")
}
return
Expand Down
5 changes: 5 additions & 0 deletions core/versionutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ var ModLoaders = map[string]ModLoaderComponent{
FriendlyName: "Quilt loader",
VersionListGetter: FetchMavenVersionList("https://maven.quiltmc.org/repository/release/org/quiltmc/quilt-loader/maven-metadata.xml"),
},
"neoforge": {
Name: "neoforge",
FriendlyName: "NeoForge",
VersionListGetter: FetchMavenVersionPrefixedListStrip("https://maven.neoforged.net/releases/net/neoforged/forge/maven-metadata.xml", "NeoForge"),
},
}

func FetchMavenVersionList(url string) func(mcVersion string) ([]string, string, error) {
Expand Down
20 changes: 8 additions & 12 deletions curseforge/curseforge.go
Original file line number Diff line number Diff line change
Expand Up @@ -230,23 +230,19 @@ func getSearchLoaderType(pack core.Pack) modloaderType {
_, hasFabric := dependencies["fabric"]
_, hasQuilt := dependencies["quilt"]
_, hasForge := dependencies["forge"]
if (hasFabric || hasQuilt) && hasForge {
return modloaderTypeAny
} else if hasFabric || hasQuilt {
_, hasNeoForge := dependencies["neoforge"]
if hasFabric && !hasQuilt && !hasForge && !hasNeoForge {
return modloaderTypeFabric
} else if hasQuilt {
// Backwards-compatible with Fabric for now (could be configurable later)
// since we can't filter by more than one loader, just accept any and filter the response
return modloaderTypeAny
} else if hasForge {
}
if hasForge && !hasNeoForge && !hasFabric && !hasQuilt {
return modloaderTypeForge
} else {
return modloaderTypeAny
}
// We can't filter by more than one loader: accept any and filter the response
return modloaderTypeAny
}

// Crude way of preferring Quilt to Fabric: larger types are preferred
// so Quilt > Fabric > Forge > Any
// Crude way of preferring Quilt to Fabric / NeoForge to Forge: larger types are preferred
// so NeoForge > Quilt > Fabric > Forge > Any

func filterLoaderTypeIndex(packLoaders []string, modLoaderType modloaderType) (modloaderType, bool) {
if len(packLoaders) == 0 || modLoaderType == modloaderTypeAny {
Expand Down
2 changes: 2 additions & 0 deletions modrinth/export.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,8 @@ var exportCmd = &cobra.Command{
dependencies["fabric-loader"] = fabricVersion
} else if forgeVersion, ok := pack.Versions["forge"]; ok {
dependencies["forge"] = forgeVersion
} else if neoforgeVersion, ok := pack.Versions["neoforge"]; ok {
dependencies["neoforge"] = neoforgeVersion
}

manifest := Pack{
Expand Down
2 changes: 1 addition & 1 deletion modrinth/modrinth.go
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ func getProjectTypeFolder(projectType string, fileLoaders []string, packLoaders
}
return "shaderpacks", nil
} else if projectType == "mod" {
// Look up pack loaders in the list of loaders (note this is currently filtered to quilt/fabric/forge)
// Look up pack loaders in the list of loaders (note this is currently filtered to quilt/fabric/neoforge/forge)
bestLoaderIdx := math.MaxInt
for _, v := range fileLoaders {
if slices.Contains(packLoaders, v) {
Expand Down

0 comments on commit 234f927

Please sign in to comment.