mirror of
https://github.com/packwiz/packwiz.git
synced 2026-02-19 19:00:37 +01:00
Support neoforge for 26.1 and above (#386)
This commit is contained in:
@@ -161,6 +161,7 @@
|
|||||||
<version>21.10.23-beta</version>
|
<version>21.10.23-beta</version>
|
||||||
<version>21.10.24-beta</version>
|
<version>21.10.24-beta</version>
|
||||||
<version>21.10.25-beta</version>
|
<version>21.10.25-beta</version>
|
||||||
|
<version>26.1.0.0-alpha.1+snapshot-1</version>
|
||||||
<version>21.1.212</version>
|
<version>21.1.212</version>
|
||||||
<version>21.8.48</version>
|
<version>21.8.48</version>
|
||||||
<version>21.10.28-beta</version>
|
<version>21.10.28-beta</version>
|
||||||
@@ -177,6 +178,10 @@
|
|||||||
<version>21.10.34-beta</version>
|
<version>21.10.34-beta</version>
|
||||||
<version>21.10.42-beta</version>
|
<version>21.10.42-beta</version>
|
||||||
<version>21.10.43-beta</version>
|
<version>21.10.43-beta</version>
|
||||||
|
<version>26.1.0.0-alpha.9+snapshot-6</version>
|
||||||
|
<version>26.1.0.0-alpha.10+snapshot-6</version>
|
||||||
|
<version>26.1.0.0-alpha.11+snapshot-7</version>
|
||||||
|
<version>26.1.0.0-alpha.12+snapshot-7</version>
|
||||||
</versions>
|
</versions>
|
||||||
<lastUpdated>20251101100329</lastUpdated>
|
<lastUpdated>20251101100329</lastUpdated>
|
||||||
</versioning>
|
</versioning>
|
||||||
|
|||||||
@@ -154,7 +154,42 @@ func fetchForgeStyle(q VersionListQuery, url string) (*ModLoaderVersions, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func fetchNeoForgeStyle(q VersionListQuery, url string) (*ModLoaderVersions, error) {
|
func fetchNeoForgeStyle(q VersionListQuery, url string) (*ModLoaderVersions, error) {
|
||||||
// NeoForge style:
|
// NeoForge style, for mc versions above 26.1:
|
||||||
|
// If minecraft versions are in the form of year.major.minor-(pre-release),
|
||||||
|
// then neoforge versions are in the form of year.major.minor.x(nf-pre-release)+(pre-release)
|
||||||
|
// Eg, for minecraft 26.1-snapshot-6, neoforge has versions 26.1.0.0-alpha.9+snapshot-6 and 26.1.0.0-alpha.10+snapshot-6
|
||||||
|
|
||||||
|
var mcSplit = strings.SplitN(q.McVersion, ".", 3)
|
||||||
|
|
||||||
|
if len(mcSplit) < 2 {
|
||||||
|
// This does not appear to be a minecraft version that's formatted in a way that neoforge's scheme supports
|
||||||
|
return nil, fmt.Errorf("packwiz cannot detect compatible %s versions for this Minecraft version (%s)", q.Loader.FriendlyName, q.McVersion)
|
||||||
|
}
|
||||||
|
|
||||||
|
var year = mcSplit[0]
|
||||||
|
var major = mcSplit[1]
|
||||||
|
var minor = "0"
|
||||||
|
var prerelease = ""
|
||||||
|
|
||||||
|
if len(mcSplit) == 3 {
|
||||||
|
minor, prerelease, _ = strings.Cut(mcSplit[2], "-")
|
||||||
|
} else {
|
||||||
|
major, prerelease, _ = strings.Cut(mcSplit[1], "-")
|
||||||
|
}
|
||||||
|
|
||||||
|
var requiredPrefix = year + "." + major + "." + minor
|
||||||
|
var requiredSuffix = prerelease
|
||||||
|
|
||||||
|
return fetchMavenWithFilterMap(q, url, func(version string) *string {
|
||||||
|
if strings.HasPrefix(version, requiredPrefix) && strings.HasSuffix(version, requiredSuffix) {
|
||||||
|
return &version
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func fetchOldNeoForgeStyle(q VersionListQuery, url string) (*ModLoaderVersions, error) {
|
||||||
|
// NeoForge style, for mc versions below 1.21.11:
|
||||||
// If minecraft versions are in the form of 1.a.b, then neoforge versions are in the form of a.b.x
|
// If minecraft versions are in the form of 1.a.b, then neoforge versions are in the form of a.b.x
|
||||||
// Eg, for minecraft 1.20.6, neoforge version 20.6.2 and 20.6.83-beta would both be valid versions
|
// Eg, for minecraft 1.20.6, neoforge version 20.6.2 and 20.6.83-beta would both be valid versions
|
||||||
// for minecraft 1.20.2, neoforge version 20.2.23-beta
|
// for minecraft 1.20.2, neoforge version 20.2.23-beta
|
||||||
@@ -162,7 +197,7 @@ func fetchNeoForgeStyle(q VersionListQuery, url string) (*ModLoaderVersions, err
|
|||||||
|
|
||||||
var mcSplit = strings.Split(q.McVersion, ".")
|
var mcSplit = strings.Split(q.McVersion, ".")
|
||||||
if len(mcSplit) < 2 {
|
if len(mcSplit) < 2 {
|
||||||
// This does not appear to be a minecraft version that's formatted in a way that matches neoforge
|
// This does not appear to be a minecraft version that's formatted in a way that neoforge's scheme supports
|
||||||
return nil, fmt.Errorf("packwiz cannot detect compatible %s versions for this Minecraft version (%s)", q.Loader.FriendlyName, q.McVersion)
|
return nil, fmt.Errorf("packwiz cannot detect compatible %s versions for this Minecraft version (%s)", q.Loader.FriendlyName, q.McVersion)
|
||||||
}
|
}
|
||||||
var mcMajor = mcSplit[1]
|
var mcMajor = mcSplit[1]
|
||||||
@@ -246,10 +281,21 @@ func fetchForNeoForge(q VersionListQuery) (*ModLoaderVersions, error) {
|
|||||||
// NeoForge reused Forge's versioning scheme for 1.20.1, but moved to their own versioning scheme for 1.20.2 and above
|
// NeoForge reused Forge's versioning scheme for 1.20.1, but moved to their own versioning scheme for 1.20.2 and above
|
||||||
if q.McVersion == "1.20.1" {
|
if q.McVersion == "1.20.1" {
|
||||||
return fetchForgeStyle(q, "https://maven.neoforged.net/releases/net/neoforged/forge/maven-metadata.xml")
|
return fetchForgeStyle(q, "https://maven.neoforged.net/releases/net/neoforged/forge/maven-metadata.xml")
|
||||||
|
} else {
|
||||||
|
// Mojang changed versioning schemes between 1.21.11 and 26.1
|
||||||
|
// The old versioning scheme was 1.major.minor, which changed to year.major(.patch)
|
||||||
|
// With snapshot releases for 26.1 being eg 26.1-snapshot.1
|
||||||
|
|
||||||
|
// NeoForge's versioning scheme changed with that. Luckily all versions using the old versioning
|
||||||
|
// scheme start with "1.". Well, some things don't (alpha versions, snapshot versions, etc) but NeoForge
|
||||||
|
// doesn't support any of those either way.
|
||||||
|
if strings.HasPrefix(q.McVersion, "1.") {
|
||||||
|
return fetchOldNeoForgeStyle(q, "https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml")
|
||||||
} else {
|
} else {
|
||||||
return fetchNeoForgeStyle(q, "https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml")
|
return fetchNeoForgeStyle(q, "https://maven.neoforged.net/releases/net/neoforged/neoforge/maven-metadata.xml")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func fetchForForge(q VersionListQuery) (*ModLoaderVersions, error) {
|
func fetchForForge(q VersionListQuery) (*ModLoaderVersions, error) {
|
||||||
result, err := fetchForgeStyle(q, "https://files.minecraftforge.net/maven/net/minecraftforge/forge/maven-metadata.xml")
|
result, err := fetchForgeStyle(q, "https://files.minecraftforge.net/maven/net/minecraftforge/forge/maven-metadata.xml")
|
||||||
|
|||||||
@@ -127,3 +127,9 @@ func TestNeoForge1211(t *testing.T) {
|
|||||||
func TestNeoForge1210(t *testing.T) {
|
func TestNeoForge1210(t *testing.T) {
|
||||||
expectLatest(t, "neoforge", "1.21.10", "21.10.43-beta")
|
expectLatest(t, "neoforge", "1.21.10", "21.10.43-beta")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNeoForge261snapshot6(t *testing.T) {
|
||||||
|
expectLatest(t, "neoforge", "26.1-snapshot-6", "26.1.0.0-alpha.10+snapshot-6")
|
||||||
|
expectValid(t, "neoforge", "26.1-snapshot-6", "26.1.0.0-alpha.9+snapshot-6")
|
||||||
|
expectInvalid(t, "neoforge", "26.1-snapshot-6", "26.1.0.0-alpha.11+snapshot-7")
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user