summaryrefslogtreecommitdiff
path: root/generateForge.py
diff options
context:
space:
mode:
Diffstat (limited to 'generateForge.py')
-rwxr-xr-xgenerateForge.py478
1 files changed, 212 insertions, 266 deletions
diff --git a/generateForge.py b/generateForge.py
index 222233023c..b161b29a3e 100755
--- a/generateForge.py
+++ b/generateForge.py
@@ -1,17 +1,24 @@
+import os
import re
import sys
+from datetime import timezone
from distutils.version import LooseVersion
-from meta.forgeutil import *
-from meta.metautil import *
-from meta.common import ensure_component_dir, polymc_path, upstream_path
+from meta.common import ensure_component_dir, polymc_path, upstream_path, static_path
+from meta.common.forge import FORGE_COMPONENT, INSTALLER_MANIFEST_DIR, VERSION_MANIFEST_DIR, DERIVED_INDEX_FILE, \
+ STATIC_LEGACYINFO_FILE, INSTALLER_INFO_DIR, BAD_VERSIONS, FORGEWRAPPER_MAVEN
+from meta.common.mojang import MINECRAFT_COMPONENT
+from meta.model import MetaVersion, Dependency, Library, GradleSpecifier, MojangLibraryDownloads, MojangArtifact, \
+ MetaPackage
+from meta.model.forge import ForgeVersion, ForgeInstallerProfile, ForgeLegacyInfo, fml_libs_for_version, \
+ ForgeInstallerProfileV2, InstallerInfo, DerivedForgeIndex, ForgeLegacyInfoList
+from meta.model.mojang import MojangVersion
PMC_DIR = polymc_path()
UPSTREAM_DIR = upstream_path()
+STATIC_DIR = static_path()
-ensure_component_dir("net.minecraftforge")
-
-FORGEWRAPPER_MAVEN = "https://polymc.github.io/files/maven/%s"
+ensure_component_dir(FORGE_COMPONENT)
def eprint(*args, **kwargs):
@@ -26,12 +33,11 @@ def loadMcVersionFilter(version):
if version in mcVersionCache:
return mcVersionCache[version]
libSet = set()
- with open(PMC_DIR + "/net.minecraft/%s.json" % version, 'r', encoding='utf-8') as mcFile:
- mcVersion = PolyMCVersionFile(json.load(mcFile))
- for lib in mcVersion.libraries:
- libSet.add(lib.name)
- mcVersionCache[version] = libSet
- return libSet
+ mcVersion = MetaVersion.parse_file(os.path.join(PMC_DIR, MINECRAFT_COMPONENT, f"{version}.json"))
+ for lib in mcVersion.libraries:
+ libSet.add(lib.name)
+ mcVersionCache[version] = libSet
+ return libSet
'''
@@ -58,30 +64,30 @@ def shouldIgnoreArtifact(libSet, match):
return False
-def versionFromProfile(profile, version):
- result = PolyMCVersionFile({"name": "Forge", "version": version.rawVersion, "uid": "net.minecraftforge"})
+def versionFromProfile(profile: ForgeInstallerProfile, version):
+ result = MetaVersion(name="Forge", version=version.rawVersion, uid=FORGE_COMPONENT)
mcversion = profile.install.minecraft
- result.requires = [DependencyEntry(uid='net.minecraft', equals=mcversion)]
- result.mainClass = profile.versionInfo.mainClass
- args = profile.versionInfo.minecraftArguments
+ result.requires = [Dependency(uid=MINECRAFT_COMPONENT, equals=mcversion)]
+ result.main_class = profile.versionInfo.main_class
+ args = profile.versionInfo.minecraft_arguments
tweakers = []
expression = re.compile("--tweakClass ([a-zA-Z0-9\\.]+)")
match = expression.search(args)
- while match != None:
- tweakers.append(match.group(1));
+ while match is not None:
+ tweakers.append(match.group(1))
args = args[:match.start()] + args[match.end():]
- match = expression.search(args);
+ match = expression.search(args)
if len(tweakers) > 0:
args = args.strip()
- result.addTweakers = tweakers;
+ result.additional_tweakers = tweakers
# result.minecraftArguments = args
- result.releaseTime = profile.versionInfo.time
+ result.release_time = profile.versionInfo.time
libs = []
mcFilter = loadMcVersionFilter(mcversion)
for forgeLib in profile.versionInfo.libraries:
- if forgeLib.name.isLwjgl():
+ if forgeLib.name.is_lwjgl():
continue
- if forgeLib.name.isLog4j():
+ if forgeLib.name.is_log4j():
continue
if shouldIgnoreArtifact(mcFilter, forgeLib.name):
continue
@@ -93,7 +99,7 @@ def versionFromProfile(profile, version):
fixedName.version = "%s-%s" % (mcversion, fixedName.version)
elif fixedName.artifact == "forge":
fixedName.classifier = "universal"
- ourLib = PolyMCLibrary(name=fixedName)
+ ourLib = Library(name=fixedName)
if forgeLib.url == "http://files.minecraftforge.net/maven/":
ourLib.url = "https://maven.minecraftforge.net/"
else:
@@ -106,32 +112,32 @@ def versionFromProfile(profile, version):
return result
-def versionFromModernizedInstaller(installerVersion: MojangVersionFile, version: ForgeVersion):
+def versionFromModernizedInstaller(installerVersion: MojangVersion, version: ForgeVersion):
eprint("Generating Modernized Forge %s." % version.longVersion)
- result = PolyMCVersionFile({"name": "Forge", "version": version.rawVersion, "uid": "net.minecraftforge"})
+ result = MetaVersion(name="Forge", version=version.rawVersion, uid=FORGE_COMPONENT)
mcversion = version.mcversion
- result.requires = [DependencyEntry(uid='net.minecraft', equals=mcversion)]
- result.mainClass = installerVersion.mainClass
- args = installerVersion.minecraftArguments
+ result.requires = [Dependency(uid=MINECRAFT_COMPONENT, equals=mcversion)]
+ result.main_class = installerVersion.main_class
+ args = installerVersion.minecraft_arguments
tweakers = []
expression = re.compile("--tweakClass ([a-zA-Z0-9\\.]+)")
match = expression.search(args)
- while match != None:
- tweakers.append(match.group(1));
+ while match is not None:
+ tweakers.append(match.group(1))
args = args[:match.start()] + args[match.end():]
- match = expression.search(args);
+ match = expression.search(args)
if len(tweakers) > 0:
args = args.strip()
- result.addTweakers = tweakers;
+ result.additional_tweakers = tweakers
# result.minecraftArguments = args
- result.releaseTime = installerVersion.releaseTime
+ result.release_time = installerVersion.release_time
libs = []
mcFilter = loadMcVersionFilter(mcversion)
for upstreamLib in installerVersion.libraries:
- pmcLib = PolyMCLibrary(upstreamLib.to_json())
- if pmcLib.name.isLwjgl():
+ pmcLib = Library.parse_obj(upstreamLib.dict())
+ if pmcLib.name.is_lwjgl():
continue
- if pmcLib.name.isLog4j():
+ if pmcLib.name.is_log4j():
continue
if shouldIgnoreArtifact(mcFilter, pmcLib.name):
continue
@@ -139,8 +145,8 @@ def versionFromModernizedInstaller(installerVersion: MojangVersionFile, version:
if pmcLib.name.artifact == "forge":
fixedName = pmcLib.name
fixedName.classifier = "universal"
- pmcLib.downloads.artifact.path = fixedName.getPath()
- pmcLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % fixedName.getPath()
+ pmcLib.downloads.artifact.path = fixedName.path()
+ pmcLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % fixedName.path()
pmcLib.name = fixedName
libs.append(pmcLib)
continue
@@ -149,8 +155,8 @@ def versionFromModernizedInstaller(installerVersion: MojangVersionFile, version:
fixedName.artifact = "forge"
fixedName.classifier = "universal"
fixedName.version = "%s-%s" % (mcversion, fixedName.version)
- pmcLib.downloads.artifact.path = fixedName.getPath()
- pmcLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % fixedName.getPath()
+ pmcLib.downloads.artifact.path = fixedName.path()
+ pmcLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % fixedName.path()
pmcLib.name = fixedName
libs.append(pmcLib)
continue
@@ -161,288 +167,228 @@ def versionFromModernizedInstaller(installerVersion: MojangVersionFile, version:
return result
-def versionFromLegacy(version, legacyinfo: ForgeLegacyInfo):
- result = PolyMCVersionFile({"name": "Forge", "version": version.rawVersion, "uid": "net.minecraftforge"})
+def versionFromLegacy(version: ForgeVersion, legacyinfo: ForgeLegacyInfo):
+ result = MetaVersion(name="Forge", version=version.rawVersion, uid=FORGE_COMPONENT)
mcversion = version.mcversion_sane
- result.requires = [DependencyEntry(uid='net.minecraft', equals=mcversion)]
- result.releaseTime = legacyinfo.releaseTime
+ result.requires = [Dependency(uid=MINECRAFT_COMPONENT, equals=mcversion)]
+ result.release_time = legacyinfo.releaseTime
result.order = 5
- if mcversion in fmlLibsMapping:
- result.addTraits = ["legacyFML"]
+ if fml_libs_for_version(mcversion): # WHY, WHY DID I WASTE MY TIME REWRITING FMLLIBSMAPPING
+ result.additional_traits = ["legacyFML"]
url = version.url()
- classifier = None
if "universal" in url:
classifier = "universal"
else:
classifier = "client"
- coord = GradleSpecifier("net.minecraftforge:forge:%s:%s" % (version.longVersion, classifier))
- mainmod = PolyMCLibrary(name=coord)
+ coord = GradleSpecifier("net.minecraftforge", "forge", version.longVersion, classifier)
+ mainmod = Library(name=coord)
mainmod.downloads = MojangLibraryDownloads()
- mainmod.downloads.artifact = MojangArtifact()
+ mainmod.downloads.artifact = MojangArtifact(url=version.url(), sha1=legacyinfo.sha1, size=legacyinfo.size)
mainmod.downloads.artifact.path = None
- mainmod.downloads.artifact.url = version.url()
- mainmod.downloads.artifact.sha1 = legacyinfo.sha1
- mainmod.downloads.artifact.size = legacyinfo.size
- result.jarMods = [mainmod]
+ result.jar_mods = [mainmod]
return result
-def versionFromBuildSystemInstaller(installerVersion: MojangVersionFile, installerProfile: ForgeInstallerProfileV2,
+def versionFromBuildSystemInstaller(installerVersion: MojangVersion, installerProfile: ForgeInstallerProfileV2,
version: ForgeVersion):
eprint("Generating Forge %s." % version.longVersion)
- result = PolyMCVersionFile({"name": "Forge", "version": version.rawVersion, "uid": "net.minecraftforge"})
- result.requires = [DependencyEntry(uid='net.minecraft', equals=version.mcversion_sane)]
- result.mainClass = "io.github.zekerzhayard.forgewrapper.installer.Main"
+ result = MetaVersion(name="Forge", version=version.rawVersion, uid=FORGE_COMPONENT)
+ result.requires = [Dependency(uid=MINECRAFT_COMPONENT, equals=version.mcversion_sane)]
+ result.main_class = "io.github.zekerzhayard.forgewrapper.installer.Main"
# FIXME: Add the size and hash here
mavenLibs = []
# load the locally cached installer file info and use it to add the installer entry in the json
- with open(UPSTREAM_DIR + "/forge/installer_info/%s.json" % version.longVersion, 'r', encoding='utf-8') as f:
- installerInfo = InstallerInfo(json.load(f))
- InstallerLib = PolyMCLibrary(
- name=GradleSpecifier("net.minecraftforge:forge:%s:installer" % (version.longVersion)))
- InstallerLib.downloads = MojangLibraryDownloads()
- InstallerLib.downloads.artifact = MojangArtifact()
- InstallerLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % (
- InstallerLib.name.getPath())
- InstallerLib.downloads.artifact.sha1 = installerInfo.sha1hash
- InstallerLib.downloads.artifact.size = installerInfo.size
- mavenLibs.append(InstallerLib)
+ installerInfo = InstallerInfo.parse_file(
+ os.path.join(UPSTREAM_DIR, INSTALLER_INFO_DIR, f"{version.longVersion}.json"))
+ InstallerLib = Library(
+ name=GradleSpecifier("net.minecraftforge", "forge", version.longVersion, "installer"))
+ InstallerLib.downloads = MojangLibraryDownloads()
+ InstallerLib.downloads.artifact = MojangArtifact(
+ url="https://files.minecraftforge.net/maven/%s" % (InstallerLib.name.path()),
+ sha1=installerInfo.sha1hash,
+ size=installerInfo.size)
+ mavenLibs.append(InstallerLib)
for upstreamLib in installerProfile.libraries:
- pmcLib = PolyMCLibrary(upstreamLib.to_json())
+ pmcLib = Library.parse_obj(upstreamLib.dict())
if pmcLib.name.group == "net.minecraftforge":
if pmcLib.name.artifact == "forge":
if pmcLib.name.classifier == "universal":
- pmcLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % pmcLib.name.getPath()
+ pmcLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % pmcLib.name.path()
mavenLibs.append(pmcLib)
continue
- if pmcLib.name.isLog4j():
+ if pmcLib.name.is_log4j():
continue
mavenLibs.append(pmcLib)
- result.mavenFiles = mavenLibs
+ result.maven_files = mavenLibs
libraries = []
- # wrapperLib = PolyMCLibrary(name=GradleSpecifier("io.github.zekerzhayard:ForgeWrapper:1.4.1"))
- # wrapperLib.downloads = MojangLibraryDownloads()
- # wrapperLib.downloads.artifact = MojangArtifact()
- # wrapperLib.downloads.artifact.url = "https://meta.polymc.org/maven/%s" % (wrapperLib.name.getPath())
- # wrapperLib.downloads.artifact.sha1 = "82f01de97e29ba34be9fc628084b6d10ce2235c5"
- # wrapperLib.downloads.artifact.size = 14351
- # libraries.append(wrapperLib)
-
- # wrapperLib = PolyMCLibrary(name=GradleSpecifier("io.github.zekerzhayard:ForgeWrapper:1.4.2"))
- # wrapperLib.downloads = MojangLibraryDownloads()
- # wrapperLib.downloads.artifact = MojangArtifact()
- # wrapperLib.downloads.artifact.url = "https://meta.polymc.org/maven/%s" % (wrapperLib.name.getPath())
- # wrapperLib.downloads.artifact.sha1 = "79ff9c1530e8743450c5c3ebc6e07b535437aa6e"
- # wrapperLib.downloads.artifact.size = 22346
- # libraries.append(wrapperLib)
-
- # wrapperLib = PolyMCLibrary(name=GradleSpecifier("io.github.zekerzhayard:ForgeWrapper:1.5.1"))
- # wrapperLib.downloads = MojangLibraryDownloads()
- # wrapperLib.downloads.artifact = MojangArtifact()
- # wrapperLib.downloads.artifact.url = "https://meta.polymc.org/maven/%s" % (wrapperLib.name.getPath())
- # wrapperLib.downloads.artifact.sha1 = "90104e9aaa8fbedf6c3d1f6d0b90cabce080b5a9"
- # wrapperLib.downloads.artifact.size = 29892
- # libraries.append(wrapperLib)
-
- # wrapperLib = PolyMCLibrary(name=GradleSpecifier("io.github.zekerzhayard:ForgeWrapper:1.5.3"))
- # wrapperLib.downloads = MojangLibraryDownloads()
- # wrapperLib.downloads.artifact = MojangArtifact()
- # wrapperLib.downloads.artifact.url = "https://meta.polymc.org/maven/%s" % (wrapperLib.name.getPath())
- # wrapperLib.downloads.artifact.sha1 = "2b0e06937349a209dbb90dca6381258daa456ad7"
- # wrapperLib.downloads.artifact.size = 30486
- # libraries.append(wrapperLib)
-
- # wrapperLib = PolyMCLibrary(name=GradleSpecifier("io.github.zekerzhayard:ForgeWrapper:1.5.4"))
- # wrapperLib.downloads = MojangLibraryDownloads()
- # wrapperLib.downloads.artifact = MojangArtifact()
- # wrapperLib.downloads.artifact.url = "https://meta.polymc.org/maven/%s" % (wrapperLib.name.getPath())
- # wrapperLib.downloads.artifact.sha1 = "e97805af76d4c1cebb753132eadbabd92e67a17b"
- # wrapperLib.downloads.artifact.size = 34299
- # libraries.append(wrapperLib)
-
- # wrapperLib = PolyMCLibrary(name=GradleSpecifier("io.github.zekerzhayard:ForgeWrapper:pmc1"))
- # wrapperLib.downloads = MojangLibraryDownloads()
- # wrapperLib.downloads.artifact = MojangArtifact()
- # wrapperLib.downloads.artifact.url = "https://meta.polymc.org/maven/%s" % (wrapperLib.name.getPath())
- # wrapperLib.downloads.artifact.sha1 = "e8e0fe708742ecf15ab4af55ae8227fa4349362d"
- # wrapperLib.downloads.artifact.size = 34628
- # libraries.append(wrapperLib)
-
- # wrapperLib = PolyMCLibrary(name=GradleSpecifier("io.github.zekerzhayard:ForgeWrapper:1.5.5"))
- # wrapperLib.downloads = MojangLibraryDownloads()
- # wrapperLib.downloads.artifact = MojangArtifact()
- # wrapperLib.downloads.artifact.url = "https://meta.polymc.org/maven/%s" % (wrapperLib.name.getPath())
- # wrapperLib.downloads.artifact.sha1 = "566dfd60aacffaa02884614835f1151d36f1f985"
- # wrapperLib.downloads.artifact.size = 34331
- # libraries.append(wrapperLib)
-
- wrapperLib = PolyMCLibrary(name=GradleSpecifier("io.github.zekerzhayard:ForgeWrapper:mmc2"))
+
+ wrapperLib = Library(name=GradleSpecifier("io.github.zekerzhayard", "ForgeWrapper", "mmc2"))
wrapperLib.downloads = MojangLibraryDownloads()
- wrapperLib.downloads.artifact = MojangArtifact()
- wrapperLib.downloads.artifact.url = FORGEWRAPPER_MAVEN % (wrapperLib.name.getPath())
- wrapperLib.downloads.artifact.sha1 = "4ee5f25cc9c7efbf54aff4c695da1054c1a1d7a3"
- wrapperLib.downloads.artifact.size = 34444
+ wrapperLib.downloads.artifact = MojangArtifact(url=FORGEWRAPPER_MAVEN % (wrapperLib.name.path()),
+ sha1="4ee5f25cc9c7efbf54aff4c695da1054c1a1d7a3",
+ size=34444)
libraries.append(wrapperLib)
for upstreamLib in installerVersion.libraries:
- pmcLib = PolyMCLibrary(upstreamLib.to_json())
+ pmcLib = Library.parse_obj(upstreamLib.dict())
if pmcLib.name.group == "net.minecraftforge":
if pmcLib.name.artifact == "forge":
fixedName = pmcLib.name
fixedName.classifier = "launcher"
- pmcLib.downloads.artifact.path = fixedName.getPath()
- pmcLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % fixedName.getPath()
+ pmcLib.downloads.artifact.path = fixedName.path()
+ pmcLib.downloads.artifact.url = "https://files.minecraftforge.net/maven/%s" % fixedName.path()
pmcLib.name = fixedName
libraries.append(pmcLib)
continue
- if pmcLib.name.isLog4j():
+ if pmcLib.name.is_log4j():
continue
libraries.append(pmcLib)
result.libraries = libraries
- result.releaseTime = installerVersion.releaseTime
+ result.release_time = installerVersion.release_time
result.order = 5
mcArgs = "--username ${auth_player_name} --version ${version_name} --gameDir ${game_directory} --assetsDir ${assets_root} --assetIndex ${assets_index_name} --uuid ${auth_uuid} --accessToken ${auth_access_token} --userType ${user_type} --versionType ${version_type}"
for arg in installerVersion.arguments.game:
mcArgs += " %s" % arg
- result.minecraftArguments = mcArgs
+ result.minecraft_arguments = mcArgs
return result
-# load the locally cached version list
-with open(UPSTREAM_DIR + "/forge/derived_index.json", 'r', encoding='utf-8') as f:
- main_json = json.load(f)
- remoteVersionlist = DerivedForgeIndex(main_json)
-
-recommendedVersions = []
-
-tsPath = "static/forge-legacyinfo.json"
-
-legacyinfolist = None
-with open(tsPath, 'r', encoding='utf-8') as tsFile:
- legacyinfolist = ForgeLegacyInfoList(json.load(tsFile))
-
-legacyVersions = [
- "1.1",
- "1.2.3",
- "1.2.4",
- "1.2.5",
- "1.3.2",
- "1.4.1",
- "1.4.2",
- "1.4.3",
- "1.4.4",
- "1.4.5",
- "1.4.6",
- "1.4.7",
- "1.5",
- "1.5.1",
- "1.5.2",
- "1.6.1",
- "1.6.2",
- "1.6.3",
- "1.6.4",
- "1.7.10",
- "1.7.10-pre4",
- "1.7.2",
- "1.8",
- "1.8.8",
- "1.8.9",
- "1.9",
- "1.9.4",
- "1.10",
- "1.10.2",
- "1.11",
- "1.11.2",
- "1.12",
- "1.12.1",
- "1.12.2",
-]
-
-for id, entry in remoteVersionlist.versions.items():
- if entry.mcversion == None:
- eprint("Skipping %s with invalid MC version" % id)
- continue
-
- version = ForgeVersion(entry)
- if version.url() == None:
- eprint("Skipping %s with no valid files" % id)
- continue
- eprint("Processing Forge %s" % version.rawVersion)
- versionElements = version.rawVersion.split('.')
- if len(versionElements) < 1:
- eprint("Skipping version %s with not enough version elements" % (id))
- continue
-
- majorVersionStr = versionElements[0]
- if not majorVersionStr.isnumeric():
- eprint("Skipping version %s with non-numeric major version %s" % (id, majorVersionStr))
- continue
-
- majorVersion = int(majorVersionStr)
- # if majorVersion >= 37:
- # eprint ("Skipping unsupported major version %d (%s)" % (majorVersion, id))
- # continue
-
- if entry.recommended:
- recommendedVersions.append(version.rawVersion)
-
- # If we do not have the corresponding Minecraft version, we ignore it
- if not os.path.isfile(PMC_DIR + "/net.minecraft/%s.json" % version.mcversion_sane):
- eprint("Skipping %s with no corresponding Minecraft version %s" % (id, version.mcversion_sane))
- continue
-
- outVersion = None
-
- # Path for new-style build system based installers
- installerVersionFilepath = UPSTREAM_DIR + "/forge/version_manifests/%s.json" % version.longVersion
- profileFilepath = UPSTREAM_DIR + "/forge/installer_manifests/%s.json" % version.longVersion
-
- eprint(installerVersionFilepath)
- if os.path.isfile(installerVersionFilepath):
- with open(installerVersionFilepath, 'r', encoding='utf-8') as installerVersionFile:
- installerVersion = MojangVersionFile(json.load(installerVersionFile))
- if entry.mcversion in legacyVersions:
- outVersion = versionFromModernizedInstaller(installerVersion, version)
+def main():
+ # load the locally cached version list
+ remoteVersionlist = DerivedForgeIndex.parse_file(os.path.join(UPSTREAM_DIR, DERIVED_INDEX_FILE))
+
+ recommendedVersions = []
+
+ legacyinfolist = ForgeLegacyInfoList.parse_file(os.path.join(STATIC_DIR, STATIC_LEGACYINFO_FILE))
+
+ legacyVersions = [
+ "1.1",
+ "1.2.3",
+ "1.2.4",
+ "1.2.5",
+ "1.3.2",
+ "1.4.1",
+ "1.4.2",
+ "1.4.3",
+ "1.4.4",
+ "1.4.5",
+ "1.4.6",
+ "1.4.7",
+ "1.5",
+ "1.5.1",
+ "1.5.2",
+ "1.6.1",
+ "1.6.2",
+ "1.6.3",
+ "1.6.4",
+ "1.7.10",
+ "1.7.10-pre4",
+ "1.7.2",
+ "1.8",
+ "1.8.8",
+ "1.8.9",
+ "1.9",
+ "1.9.4",
+ "1.10",
+ "1.10.2",
+ "1.11",
+ "1.11.2",
+ "1.12",
+ "1.12.1",
+ "1.12.2",
+ ]
+
+ for id, entry in remoteVersionlist.versions.items():
+ if entry.mcversion is None:
+ eprint("Skipping %s with invalid MC version" % id)
+ continue
+
+ version = ForgeVersion(entry)
+
+ if version.longVersion in BAD_VERSIONS:
+ # Version 1.12.2-14.23.5.2851 is ultra cringe, I can't imagine why you would even spend one second on
+ # actually adding support for this version.
+ # It is cringe, because it's installer info is broken af
+ eprint(f"Skipping bad version {version.longVersion}")
+ continue
+
+ if version.url() is None:
+ eprint("Skipping %s with no valid files" % id)
+ continue
+ eprint("Processing Forge %s" % version.rawVersion)
+ versionElements = version.rawVersion.split('.')
+ if len(versionElements) < 1:
+ eprint("Skipping version %s with not enough version elements" % (id))
+ continue
+
+ majorVersionStr = versionElements[0]
+ if not majorVersionStr.isnumeric():
+ eprint("Skipping version %s with non-numeric major version %s" % (id, majorVersionStr))
+ continue
+
+ majorVersion = int(majorVersionStr)
+ # if majorVersion >= 37:
+ # eprint ("Skipping unsupported major version %d (%s)" % (majorVersion, id))
+ # continue
+
+ if entry.recommended:
+ recommendedVersions.append(version.rawVersion)
+
+ # If we do not have the corresponding Minecraft version, we ignore it
+ if not os.path.isfile(os.path.join(PMC_DIR, MINECRAFT_COMPONENT, f"{version.mcversion_sane}.json")):
+ eprint("Skipping %s with no corresponding Minecraft version %s" % (id, version.mcversion_sane))
+ continue
+
+ outVersion = None
+
+ # Path for new-style build system based installers
+ installerVersionFilepath = os.path.join(UPSTREAM_DIR, VERSION_MANIFEST_DIR, f"{version.longVersion}.json")
+ profileFilepath = os.path.join(UPSTREAM_DIR, INSTALLER_MANIFEST_DIR, f"{version.longVersion}.json")
+
+ eprint(installerVersionFilepath)
+ if os.path.isfile(installerVersionFilepath):
+ installerVersion = MojangVersion.parse_file(installerVersionFilepath)
+ if entry.mcversion in legacyVersions:
+ outVersion = versionFromModernizedInstaller(installerVersion, version)
+ else:
+ installerProfile = ForgeInstallerProfileV2.parse_file(profileFilepath)
+ outVersion = versionFromBuildSystemInstaller(installerVersion, installerProfile, version)
else:
- with open(profileFilepath, 'r', encoding='utf-8') as profileFile:
- installerProfile = ForgeInstallerProfileV2(json.load(profileFile))
- outVersion = versionFromBuildSystemInstaller(installerVersion, installerProfile, version)
- else:
- if version.usesInstaller():
+ if version.uses_installer():
- # If we do not have the Forge json, we ignore this version
- if not os.path.isfile(profileFilepath):
- eprint("Skipping %s with missing profile json" % id)
- continue
- with open(profileFilepath, 'r', encoding='utf-8') as profileFile:
- profile = ForgeInstallerProfile(json.load(profileFile))
+ # If we do not have the Forge json, we ignore this version
+ if not os.path.isfile(profileFilepath):
+ eprint("Skipping %s with missing profile json" % id)
+ continue
+ profile = ForgeInstallerProfile.parse_file(profileFilepath)
outVersion = versionFromProfile(profile, version)
- else:
- # Generate json for legacy here
- if version.mcversion_sane == "1.6.1":
- continue
- build = version.build
- if not str(build).encode('utf-8').decode('utf8') in legacyinfolist.number:
- eprint("Legacy build %d is missing in legacy info. Ignoring." % build)
- continue
+ else:
+ # Generate json for legacy here
+ if version.mcversion_sane == "1.6.1":
+ continue
+ build = version.build
+ if not str(build).encode('utf-8').decode('utf8') in legacyinfolist.number:
+ eprint("Legacy build %d is missing in legacy info. Ignoring." % build)
+ continue
+
+ outVersion = versionFromLegacy(version, legacyinfolist.number[str(build)])
- outVersion = versionFromLegacy(version, legacyinfolist.number[build])
+ outFilepath = os.path.join(PMC_DIR, FORGE_COMPONENT, f"{outVersion.version}.json")
+ outVersion.write(outFilepath)
- outFilepath = PMC_DIR + "/net.minecraftforge/%s.json" % outVersion.version
- with open(outFilepath, 'w') as outfile:
- json.dump(outVersion.to_json(), outfile, sort_keys=True, indent=4)
+ recommendedVersions.sort()
-recommendedVersions.sort()
+ print('Recommended versions:', recommendedVersions)
-print('Recommended versions:', recommendedVersions)
+ package = MetaPackage(uid=FORGE_COMPONENT, name="Forge", project_url="https://www.minecraftforge.net/forum/")
+ package.recommended = recommendedVersions
+ package.write(os.path.join(PMC_DIR, FORGE_COMPONENT, "package.json"))
-sharedData = PolyMCSharedPackageData(uid='net.minecraftforge', name="Forge")
-sharedData.projectUrl = 'https://www.minecraftforge.net/forum/'
-sharedData.recommended = recommendedVersions
-sharedData.write()
+if __name__ == '__main__':
+ main()