mirror of
https://github.com/unmojang/meta.git
synced 2025-09-24 03:31:03 -04:00
Merge pull request #30 from PrismLauncher/feat/neoforge/support-1.20.2
This commit is contained in:
commit
59caa856b2
@ -1,3 +1,4 @@
|
||||
from copy import deepcopy
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
@ -60,7 +61,7 @@ def version_from_build_system_installer(
|
||||
)
|
||||
installer_lib = Library(
|
||||
name=GradleSpecifier(
|
||||
"net.neoforged", "forge", version.long_version, "installer"
|
||||
"net.neoforged", version.artifact, version.long_version, "installer"
|
||||
)
|
||||
)
|
||||
installer_lib.downloads = MojangLibraryDownloads()
|
||||
@ -78,11 +79,17 @@ def version_from_build_system_installer(
|
||||
|
||||
if (
|
||||
forge_lib.name.group == "net.neoforged"
|
||||
and forge_lib.name.artifact == "forge"
|
||||
and forge_lib.name.artifact == version.artifact
|
||||
and forge_lib.name.classifier == "universal"
|
||||
):
|
||||
# WORKAROUND: Early NeoForge 20.2 versions have an invalid version for universal jars. Instead of 1.20.2-20.2.20-beta it should just be 20.2.20-beta
|
||||
# See https://github.com/neoforged/NeoGradle/issues/23
|
||||
download_name = forge_lib.name
|
||||
if version.artifact == "neoforge":
|
||||
download_name = deepcopy(forge_lib.name)
|
||||
download_name.version = version.long_version
|
||||
forge_lib.downloads.artifact.url = (
|
||||
"https://maven.neoforged.net/%s" % forge_lib.name.path()
|
||||
"https://maven.neoforged.net/%s" % download_name.path()
|
||||
)
|
||||
v.maven_files.append(forge_lib)
|
||||
|
||||
@ -96,7 +103,7 @@ def version_from_build_system_installer(
|
||||
continue
|
||||
|
||||
if forge_lib.name.group == "net.neoforged":
|
||||
if forge_lib.name.artifact == "forge":
|
||||
if forge_lib.name.artifact == version.artifact:
|
||||
forge_lib.name.classifier = "launcher"
|
||||
forge_lib.downloads.artifact.path = forge_lib.name.path()
|
||||
forge_lib.downloads.artifact.url = (
|
||||
|
@ -16,8 +16,8 @@ STATIC_LEGACYINFO_FILE = join(BASE_DIR, "forge-legacyinfo.json")
|
||||
FORGE_COMPONENT = "net.minecraftforge"
|
||||
|
||||
FORGEWRAPPER_LIBRARY = make_launcher_library(
|
||||
GradleSpecifier("io.github.zekerzhayard", "ForgeWrapper", "1.5.6-prism"),
|
||||
"b059aa8c4d2508055c6ed2a2561923a5e670a5eb",
|
||||
34860,
|
||||
GradleSpecifier("io.github.zekerzhayard", "ForgeWrapper", "1.5.7-prism"),
|
||||
"29139276224c3b8eac414607ade28b90ba9113ba",
|
||||
35062,
|
||||
)
|
||||
BAD_VERSIONS = ["1.12.2-14.23.5.2851"]
|
||||
|
@ -8,20 +8,28 @@ from .mojang import MojangVersion
|
||||
|
||||
|
||||
class NeoForgeFile(MetaBase):
|
||||
artifact: str
|
||||
classifier: str
|
||||
extension: str
|
||||
|
||||
def filename(self, long_version):
|
||||
return "%s-%s-%s.%s" % ("forge", long_version, self.classifier, self.extension)
|
||||
return "%s-%s-%s.%s" % (
|
||||
self.artifact,
|
||||
long_version,
|
||||
self.classifier,
|
||||
self.extension,
|
||||
)
|
||||
|
||||
def url(self, long_version):
|
||||
return "https://maven.neoforged.net/net/neoforged/forge/%s/%s" % (
|
||||
return "https://maven.neoforged.net/net/neoforged/%s/%s/%s" % (
|
||||
self.artifact,
|
||||
long_version,
|
||||
self.filename(long_version),
|
||||
)
|
||||
|
||||
|
||||
class NeoForgeEntry(MetaBase):
|
||||
artifact: str
|
||||
long_version: str = Field(alias="longversion")
|
||||
mc_version: str = Field(alias="mcversion")
|
||||
version: str
|
||||
@ -172,8 +180,12 @@ class InstallerInfo(MetaBase):
|
||||
# A post-processed entry constructed from the reconstructed NeoForge version index
|
||||
class NeoForgeVersion:
|
||||
def __init__(self, entry: NeoForgeEntry):
|
||||
self.artifact = entry.artifact
|
||||
self.build = entry.build
|
||||
self.rawVersion = entry.version
|
||||
if self.artifact == "neoforge":
|
||||
self.rawVersion = entry.long_version
|
||||
|
||||
self.mc_version = entry.mc_version
|
||||
self.mc_version_sane = self.mc_version.replace("_pre", "-pre", 1)
|
||||
self.branch = entry.branch
|
||||
@ -182,9 +194,7 @@ class NeoForgeVersion:
|
||||
self.universal_filename = None
|
||||
self.universal_url = None
|
||||
self.changelog_url = None
|
||||
self.long_version = "%s-%s" % (self.mc_version, self.rawVersion)
|
||||
if self.branch is not None:
|
||||
self.long_version += "-%s" % self.branch
|
||||
self.long_version = entry.long_version
|
||||
|
||||
# this comment's whole purpose is to say this: cringe
|
||||
for classifier, file in entry.files.items():
|
||||
|
@ -67,7 +67,7 @@ def find_nth(haystack, needle, n):
|
||||
return start
|
||||
|
||||
|
||||
def get_single_forge_files_manifest(longversion):
|
||||
def get_single_forge_files_manifest(longversion, artifact: str):
|
||||
print(f"Getting NeoForge manifest for {longversion}")
|
||||
path_thing = UPSTREAM_DIR + "/neoforge/files_manifests/%s.json" % longversion
|
||||
files_manifest_file = Path(path_thing)
|
||||
@ -78,7 +78,7 @@ def get_single_forge_files_manifest(longversion):
|
||||
from_file = True
|
||||
else:
|
||||
file_url = (
|
||||
"https://maven.neoforged.net/api/maven/details/releases/net%2Fneoforged%2Fforge%2F"
|
||||
f"https://maven.neoforged.net/api/maven/details/releases/net%2Fneoforged%2F{artifact}%2F"
|
||||
+ urllib.parse.quote(longversion)
|
||||
)
|
||||
r = sess.get(file_url)
|
||||
@ -90,14 +90,25 @@ def get_single_forge_files_manifest(longversion):
|
||||
for file in files_json.get("files"):
|
||||
assert type(file) == dict
|
||||
name = file["name"]
|
||||
file_name, file_ext = os.path.splitext(name)
|
||||
if file_ext in [".md5", ".sha1", ".sha256", ".sha512"]:
|
||||
prefix = f"{artifact}-{longversion}"
|
||||
assert name.startswith(
|
||||
prefix
|
||||
), f"{longversion} classifier {name} doesn't start with {prefix}"
|
||||
file_name = name[len(prefix) :]
|
||||
if file_name.startswith("-"):
|
||||
file_name = file_name[1:]
|
||||
if file_name.startswith("."):
|
||||
continue
|
||||
|
||||
classifier = file["name"][find_nth(name, "-", 3) + 1 : len(file_name)]
|
||||
classifier, ext = os.path.splitext(file_name)
|
||||
|
||||
if ext in [".md5", ".sha1", ".sha256", ".sha512"]:
|
||||
continue
|
||||
|
||||
# assert len(extensionObj.items()) == 1
|
||||
file_obj = NeoForgeFile(classifier=classifier, extension=file_ext[1:])
|
||||
file_obj = NeoForgeFile(
|
||||
artifact=artifact, classifier=classifier, extension=ext[1:]
|
||||
)
|
||||
ret_dict[classifier] = file_obj
|
||||
|
||||
if not from_file:
|
||||
@ -117,32 +128,58 @@ def main():
|
||||
main_json = r.json()["versions"]
|
||||
assert type(main_json) == list
|
||||
|
||||
# get the new remote version list fragments
|
||||
r = sess.get(
|
||||
"https://maven.neoforged.net/api/maven/versions/releases/net%2Fneoforged%2Fneoforge"
|
||||
)
|
||||
r.raise_for_status()
|
||||
new_main_json = r.json()["versions"]
|
||||
assert type(new_main_json) == list
|
||||
|
||||
main_json += new_main_json
|
||||
|
||||
new_index = DerivedNeoForgeIndex()
|
||||
|
||||
version_expression = re.compile(
|
||||
"^(?P<mc>[0-9a-zA-Z_\\.]+)-(?P<ver>[0-9\\.]+\\.(?P<build>[0-9]+))(-(?P<branch>[a-zA-Z0-9\\.]+))?$"
|
||||
r"^(?P<mc>[0-9a-zA-Z_\.]+)-(?P<ver>[0-9\.]+\.(?P<build>[0-9]+))(-(?P<branch>[a-zA-Z0-9\.]+))?$"
|
||||
)
|
||||
neoforge_version_re = re.compile(
|
||||
r"^(?P<mcminor>\d+).(?P<mcpatch>\d+).(?P<number>\d+)(?:-(?P<tag>\w+))?$"
|
||||
)
|
||||
|
||||
print("")
|
||||
print("Processing versions:")
|
||||
for long_version in main_json:
|
||||
assert type(long_version) == str
|
||||
mc_version = long_version.split("-")[0]
|
||||
|
||||
match = version_expression.match(long_version)
|
||||
if match:
|
||||
mc_version = match.group("mc")
|
||||
build = int(match.group("build"))
|
||||
version = match.group("ver")
|
||||
branch = match.group("branch")
|
||||
artifact = "forge"
|
||||
|
||||
match_nf = neoforge_version_re.match(long_version)
|
||||
if match_nf:
|
||||
mc_version = f"1.{match_nf.group('mcminor')}.{match_nf.group('mcpatch')}"
|
||||
build = int(match_nf.group("number"))
|
||||
version = match_nf.group("number")
|
||||
branch = match_nf.group("tag")
|
||||
match = match_nf
|
||||
artifact = "neoforge"
|
||||
|
||||
assert match, f"{long_version} doesn't match version regex"
|
||||
assert match.group("mc") == mc_version
|
||||
try:
|
||||
files = get_single_forge_files_manifest(long_version)
|
||||
files = get_single_forge_files_manifest(long_version, artifact)
|
||||
except:
|
||||
continue
|
||||
build = int(match.group("build"))
|
||||
version = match.group("ver")
|
||||
branch = match.group("branch")
|
||||
|
||||
# TODO: what *is* recommended?
|
||||
is_recommended = False
|
||||
|
||||
entry = NeoForgeEntry(
|
||||
artifact=artifact,
|
||||
long_version=long_version,
|
||||
mc_version=mc_version,
|
||||
version=version,
|
||||
|
Loading…
x
Reference in New Issue
Block a user