summaryrefslogtreecommitdiff
path: root/meta
diff options
context:
space:
mode:
Diffstat (limited to 'meta')
-rw-r--r--meta/common/__init__.py3
-rw-r--r--meta/common/http.py2
-rw-r--r--meta/model/__init__.py99
-rw-r--r--meta/model/forge.py157
-rw-r--r--meta/model/index.py2
-rw-r--r--meta/model/liteloader.py88
-rw-r--r--meta/model/mojang.py56
7 files changed, 263 insertions, 144 deletions
diff --git a/meta/common/__init__.py b/meta/common/__init__.py
index 10b35da50d..7a6514b2be 100644
--- a/meta/common/__init__.py
+++ b/meta/common/__init__.py
@@ -76,10 +76,9 @@ def merge_dict(base: dict, overlay: dict):
def default_session():
- forever_cache = FileCache('caches/http_cache', forever=True)
+ forever_cache = FileCache("caches/http_cache", forever=True)
sess = CacheControl(requests.Session(), forever_cache)
sess.headers.update({"User-Agent": "PrismLauncherMeta/1.0"})
return sess
-
diff --git a/meta/common/http.py b/meta/common/http.py
index c057e4b06f..20f9d0d135 100644
--- a/meta/common/http.py
+++ b/meta/common/http.py
@@ -1,5 +1,5 @@
def download_binary_file(sess, path, url):
- with open(path, 'wb') as f:
+ with open(path, "wb") as f:
r = sess.get(url)
r.raise_for_status()
for chunk in r.iter_content(chunk_size=128):
diff --git a/meta/model/__init__.py b/meta/model/__init__.py
index dc466c3b0b..0246cdb3d1 100644
--- a/meta/model/__init__.py
+++ b/meta/model/__init__.py
@@ -5,21 +5,32 @@ from typing import Optional, List, Dict, Any, Iterator
import pydantic
from pydantic import Field, validator
-from ..common import serialize_datetime, replace_old_launchermeta_url, get_all_bases, merge_dict
+from ..common import (
+ serialize_datetime,
+ replace_old_launchermeta_url,
+ get_all_bases,
+ merge_dict,
+)
META_FORMAT_VERSION = 1
class GradleSpecifier:
"""
- A gradle specifier - a maven coordinate. Like one of these:
- "org.lwjgl.lwjgl:lwjgl:2.9.0"
- "net.java.jinput:jinput:2.0.5"
- "net.minecraft:launchwrapper:1.5"
+ A gradle specifier - a maven coordinate. Like one of these:
+ "org.lwjgl.lwjgl:lwjgl:2.9.0"
+ "net.java.jinput:jinput:2.0.5"
+ "net.minecraft:launchwrapper:1.5"
"""
- def __init__(self, group: str, artifact: str, version: str, classifier: Optional[str] = None,
- extension: Optional[str] = None):
+ def __init__(
+ self,
+ group: str,
+ artifact: str,
+ version: str,
+ classifier: Optional[str] = None,
+ extension: Optional[str] = None,
+ ):
if extension is None:
extension = "jar"
self.group = group
@@ -29,22 +40,33 @@ class GradleSpecifier:
self.extension = extension
def __str__(self):
- ext = ''
- if self.extension != 'jar':
+ ext = ""
+ if self.extension != "jar":
ext = "@%s" % self.extension
if self.classifier:
- return "%s:%s:%s:%s%s" % (self.group, self.artifact, self.version, self.classifier, ext)
+ return "%s:%s:%s:%s%s" % (
+ self.group,
+ self.artifact,
+ self.version,
+ self.classifier,
+ ext,
+ )
else:
return "%s:%s:%s%s" % (self.group, self.artifact, self.version, ext)
def filename(self):
if self.classifier:
- return "%s-%s-%s.%s" % (self.artifact, self.version, self.classifier, self.extension)
+ return "%s-%s-%s.%s" % (
+ self.artifact,
+ self.version,
+ self.classifier,
+ self.extension,
+ )
else:
return "%s-%s.%s" % (self.artifact, self.version, self.extension)
def base(self):
- return "%s/%s/%s/" % (self.group.replace('.', '/'), self.artifact, self.version)
+ return "%s/%s/%s/" % (self.group.replace(".", "/"), self.artifact, self.version)
def path(self):
return self.base() + self.filename()
@@ -53,7 +75,12 @@ class GradleSpecifier:
return f"GradleSpecifier('{self}')"
def is_lwjgl(self):
- return self.group in ("org.lwjgl", "org.lwjgl.lwjgl", "net.java.jinput", "net.java.jutils")
+ return self.group in (
+ "org.lwjgl",
+ "org.lwjgl.lwjgl",
+ "net.java.jinput",
+ "net.java.jutils",
+ )
def is_log4j(self):
return self.group == "org.apache.logging.log4j"
@@ -76,9 +103,9 @@ class GradleSpecifier:
@classmethod
def from_string(cls, v: str):
- ext_split = v.split('@')
+ ext_split = v.split("@")
- components = ext_split[0].split(':')
+ components = ext_split[0].split(":")
group = components[0]
artifact = components[1]
version = components[2]
@@ -114,7 +141,9 @@ class MetaBase(pydantic.BaseModel):
if k in kwargs:
del kwargs[k]
- return super(MetaBase, self).json(exclude_none=True, sort_keys=True, by_alias=True, indent=4, **kwargs)
+ return super(MetaBase, self).json(
+ exclude_none=True, sort_keys=True, by_alias=True, indent=4, **kwargs
+ )
def write(self, file_path):
with open(file_path, "w") as f:
@@ -157,10 +186,7 @@ class MetaBase(pydantic.BaseModel):
class Config:
allow_population_by_field_name = True
- json_encoders = {
- datetime: serialize_datetime,
- GradleSpecifier: str
- }
+ json_encoders = {datetime: serialize_datetime, GradleSpecifier: str}
class Versioned(MetaBase):
@@ -193,18 +219,19 @@ class MojangArtifact(MojangArtifactBase):
class MojangLibraryExtractRules(MetaBase):
"""
- "rules": [
- {
- "action": "allow"
- },
- {
- "action": "disallow",
- "os": {
- "name": "osx"
- }
- }
- ]
+ "rules": [
+ {
+ "action": "allow"
+ },
+ {
+ "action": "disallow",
+ "os": {
+ "name": "osx"
+ }
+ }
+ ]
"""
+
exclude: List[str] # TODO maybe drop this completely?
@@ -216,7 +243,15 @@ class MojangLibraryDownloads(MetaBase):
class OSRule(MetaBase):
@validator("name")
def name_must_be_os(cls, v):
- assert v in ["osx", "linux", "windows", "windows-arm64", "osx-arm64", "linux-arm64", "linux-arm32"]
+ assert v in [
+ "osx",
+ "linux",
+ "windows",
+ "windows-arm64",
+ "osx-arm64",
+ "linux-arm64",
+ "linux-arm32",
+ ]
return v
name: str
diff --git a/meta/model/forge.py b/meta/model/forge.py
index 6112023e15..937cc18cb5 100644
--- a/meta/model/forge.py
+++ b/meta/model/forge.py
@@ -17,7 +17,9 @@ class ForgeFile(MetaBase):
def url(self, long_version):
return "https://maven.minecraftforge.net/net/minecraftforge/forge/%s/%s" % (
- long_version, self.filename(long_version))
+ long_version,
+ self.filename(long_version),
+ )
class ForgeEntry(MetaBase):
@@ -42,7 +44,9 @@ class DerivedForgeIndex(MetaBase):
by_mc_version: Dict[str, ForgeMCVersionInfo] = Field({}, alias="by_mcversion")
-class FMLLib(MetaBase): # old ugly stuff. Maybe merge this with Library or MojangLibrary later
+class FMLLib(
+ MetaBase
+): # old ugly stuff. Maybe merge this with Library or MojangLibrary later
filename: str
checksum: str
ours: bool
@@ -74,6 +78,7 @@ class ForgeInstallerProfileInstallSection(MetaBase):
"modList":"none"
},
"""
+
profile_name: str = Field(alias="profileName")
target: str
path: GradleSpecifier
@@ -116,6 +121,7 @@ class ForgeOptional(MetaBase):
}
]
"""
+
name: Optional[str]
client: Optional[bool]
server: Optional[bool]
@@ -206,7 +212,9 @@ class ForgeVersion:
if (classifier == "installer") and (extension == "jar"):
self.installer_filename = filename
self.installer_url = url
- if (classifier == "universal" or classifier == "client") and (extension == "jar" or extension == "zip"):
+ if (classifier == "universal" or classifier == "client") and (
+ extension == "jar" or extension == "zip"
+ ):
self.universal_filename = filename
self.universal_url = url
if (classifier == "changelog") and (extension == "txt"):
@@ -236,7 +244,7 @@ class ForgeVersion:
if self.url() is None:
return False
- foo = self.rawVersion.split('.')
+ foo = self.rawVersion.split(".")
if len(foo) < 1:
return False
@@ -252,55 +260,106 @@ class ForgeVersion:
def fml_libs_for_version(mc_version: str) -> List[FMLLib]:
- argo_2_25 = FMLLib(filename="argo-2.25.jar",
- checksum="bb672829fde76cb163004752b86b0484bd0a7f4b",
- ours=False)
- argo_small_3_2 = FMLLib(filename="argo-small-3.2.jar",
- checksum="58912ea2858d168c50781f956fa5b59f0f7c6b51",
- ours=False)
- guava_12_0_1 = FMLLib(filename="guava-12.0.1.jar",
- checksum="b8e78b9af7bf45900e14c6f958486b6ca682195f",
- ours=False)
- guava_14_0_rc3 = FMLLib(filename="guava-14.0-rc3.jar",
- checksum="931ae21fa8014c3ce686aaa621eae565fefb1a6a",
- ours=False)
- asm_all_4_0 = FMLLib(filename="asm-all-4.0.jar",
- checksum="98308890597acb64047f7e896638e0d98753ae82",
- ours=False)
- asm_all_4_1 = FMLLib(filename="asm-all-4.1.jar",
- checksum="054986e962b88d8660ae4566475658469595ef58",
- ours=False)
- bcprov_jdk15on_147 = FMLLib(filename="bcprov-jdk15on-147.jar",
- checksum="b6f5d9926b0afbde9f4dbe3db88c5247be7794bb",
- ours=False)
- bcprov_jdk15on_148 = FMLLib(filename="bcprov-jdk15on-148.jar",
- checksum="960dea7c9181ba0b17e8bab0c06a43f0a5f04e65",
- ours=True)
- scala_library = FMLLib(filename="scala-library.jar",
- checksum="458d046151ad179c85429ed7420ffb1eaf6ddf85",
- ours=True)
-
- deobfuscation_data_1_5 = FMLLib(filename="deobfuscation_data_1.5.zip",
- checksum="5f7c142d53776f16304c0bbe10542014abad6af8",
- ours=False)
-
- deobfuscation_data_1_5_1 = FMLLib(filename="deobfuscation_data_1.5.1.zip",
- checksum="22e221a0d89516c1f721d6cab056a7e37471d0a6",
- ours=False)
- deobfuscation_data_1_5_2 = FMLLib(filename="deobfuscation_data_1.5.2.zip",
- checksum="446e55cd986582c70fcf12cb27bc00114c5adfd9",
- ours=False)
+ argo_2_25 = FMLLib(
+ filename="argo-2.25.jar",
+ checksum="bb672829fde76cb163004752b86b0484bd0a7f4b",
+ ours=False,
+ )
+ argo_small_3_2 = FMLLib(
+ filename="argo-small-3.2.jar",
+ checksum="58912ea2858d168c50781f956fa5b59f0f7c6b51",
+ ours=False,
+ )
+ guava_12_0_1 = FMLLib(
+ filename="guava-12.0.1.jar",
+ checksum="b8e78b9af7bf45900e14c6f958486b6ca682195f",
+ ours=False,
+ )
+ guava_14_0_rc3 = FMLLib(
+ filename="guava-14.0-rc3.jar",
+ checksum="931ae21fa8014c3ce686aaa621eae565fefb1a6a",
+ ours=False,
+ )
+ asm_all_4_0 = FMLLib(
+ filename="asm-all-4.0.jar",
+ checksum="98308890597acb64047f7e896638e0d98753ae82",
+ ours=False,
+ )
+ asm_all_4_1 = FMLLib(
+ filename="asm-all-4.1.jar",
+ checksum="054986e962b88d8660ae4566475658469595ef58",
+ ours=False,
+ )
+ bcprov_jdk15on_147 = FMLLib(
+ filename="bcprov-jdk15on-147.jar",
+ checksum="b6f5d9926b0afbde9f4dbe3db88c5247be7794bb",
+ ours=False,
+ )
+ bcprov_jdk15on_148 = FMLLib(
+ filename="bcprov-jdk15on-148.jar",
+ checksum="960dea7c9181ba0b17e8bab0c06a43f0a5f04e65",
+ ours=True,
+ )
+ scala_library = FMLLib(
+ filename="scala-library.jar",
+ checksum="458d046151ad179c85429ed7420ffb1eaf6ddf85",
+ ours=True,
+ )
+
+ deobfuscation_data_1_5 = FMLLib(
+ filename="deobfuscation_data_1.5.zip",
+ checksum="5f7c142d53776f16304c0bbe10542014abad6af8",
+ ours=False,
+ )
+
+ deobfuscation_data_1_5_1 = FMLLib(
+ filename="deobfuscation_data_1.5.1.zip",
+ checksum="22e221a0d89516c1f721d6cab056a7e37471d0a6",
+ ours=False,
+ )
+ deobfuscation_data_1_5_2 = FMLLib(
+ filename="deobfuscation_data_1.5.2.zip",
+ checksum="446e55cd986582c70fcf12cb27bc00114c5adfd9",
+ ours=False,
+ )
if mc_version == "1.3.2":
return [argo_2_25, guava_12_0_1, asm_all_4_0]
- elif mc_version in ["1.4", "1.4.1", "1.4.2", "1.4.3", "1.4.4", "1.4.5", "1.4.6", "1.4.7"]:
+ elif mc_version in [
+ "1.4",
+ "1.4.1",
+ "1.4.2",
+ "1.4.3",
+ "1.4.4",
+ "1.4.5",
+ "1.4.6",
+ "1.4.7",
+ ]:
return [argo_2_25, guava_12_0_1, asm_all_4_0, bcprov_jdk15on_147]
elif mc_version == "1.5":
- return [argo_small_3_2, guava_14_0_rc3, asm_all_4_1, bcprov_jdk15on_148, deobfuscation_data_1_5,
- scala_library]
+ return [
+ argo_small_3_2,
+ guava_14_0_rc3,
+ asm_all_4_1,
+ bcprov_jdk15on_148,
+ deobfuscation_data_1_5,
+ scala_library,
+ ]
elif mc_version == "1.5.1":
- return [argo_small_3_2, guava_14_0_rc3, asm_all_4_1, bcprov_jdk15on_148, deobfuscation_data_1_5_1,
- scala_library]
+ return [
+ argo_small_3_2,
+ guava_14_0_rc3,
+ asm_all_4_1,
+ bcprov_jdk15on_148,
+ deobfuscation_data_1_5_1,
+ scala_library,
+ ]
elif mc_version == "1.5.2":
- return [argo_small_3_2, guava_14_0_rc3, asm_all_4_1, bcprov_jdk15on_148, deobfuscation_data_1_5_2,
- scala_library]
+ return [
+ argo_small_3_2,
+ guava_14_0_rc3,
+ asm_all_4_1,
+ bcprov_jdk15on_148,
+ deobfuscation_data_1_5_2,
+ scala_library,
+ ]
return []
diff --git a/meta/model/index.py b/meta/model/index.py
index f7cdc36e0f..c6d82e1aff 100644
--- a/meta/model/index.py
+++ b/meta/model/index.py
@@ -26,7 +26,7 @@ class MetaVersionIndexEntry(MetaBase):
conflicts=v.conflicts,
recommended=recommended,
volatile=v.volatile,
- sha256=sha256
+ sha256=sha256,
)
diff --git a/meta/model/liteloader.py b/meta/model/liteloader.py
index 0bd6794773..64cdaadd7e 100644
--- a/meta/model/liteloader.py
+++ b/meta/model/liteloader.py
@@ -14,13 +14,14 @@ class LiteloaderDev(MetaBase):
class LiteloaderRepo(MetaBase):
"""
- "repo":{
- "stream":"RELEASE",
- "type":"m2",
- "url":"http://dl.liteloader.com/repo/",
- "classifier":""
- },
+ "repo":{
+ "stream":"RELEASE",
+ "type":"m2",
+ "url":"http://dl.liteloader.com/repo/",
+ "classifier":""
+ },
"""
+
stream: str
type: str
url: str
@@ -29,26 +30,27 @@ class LiteloaderRepo(MetaBase):
class LiteloaderArtefact(MetaBase):
"""
- "53639d52340479ccf206a04f5e16606f":{
- "tweakClass":"com.mumfrey.liteloader.launch.LiteLoaderTweaker",
- "libraries":[
- {
- "name":"net.minecraft:launchwrapper:1.5"
- },
- {
- "name":"net.sf.jopt-simple:jopt-simple:4.5"
- },
- {
- "name":"org.ow2.asm:asm-all:4.1"
- }
- ],
- "stream":"RELEASE",
- "file":"liteloader-1.5.2_01.jar",
- "version":"1.5.2_01",
- "md5":"53639d52340479ccf206a04f5e16606f",
- "timestamp":"1367366420"
- },
+ "53639d52340479ccf206a04f5e16606f":{
+ "tweakClass":"com.mumfrey.liteloader.launch.LiteLoaderTweaker",
+ "libraries":[
+ {
+ "name":"net.minecraft:launchwrapper:1.5"
+ },
+ {
+ "name":"net.sf.jopt-simple:jopt-simple:4.5"
+ },
+ {
+ "name":"org.ow2.asm:asm-all:4.1"
+ }
+ ],
+ "stream":"RELEASE",
+ "file":"liteloader-1.5.2_01.jar",
+ "version":"1.5.2_01",
+ "md5":"53639d52340479ccf206a04f5e16606f",
+ "timestamp":"1367366420"
+ },
"""
+
tweakClass: str
libraries: List[Library]
stream: str
@@ -69,17 +71,18 @@ class LiteloaderArtefacts(MetaBase):
class LiteloaderEntry(MetaBase):
"""
- "1.10.2":{
- "dev": { ... },
- "repo":{ ... },
- "artefacts":{
- "com.mumfrey:liteloader":{ },
- ...
- },
- "snapshots":{
- ...
- }
+ "1.10.2":{
+ "dev": { ... },
+ "repo":{ ... },
+ "artefacts":{
+ "com.mumfrey:liteloader":{ },
+ ...
+ },
+ "snapshots":{
+ ...
+ }
"""
+
dev: Optional[LiteloaderDev]
repo: LiteloaderRepo
artefacts: Optional[LiteloaderArtefacts]
@@ -88,14 +91,15 @@ class LiteloaderEntry(MetaBase):
class LiteloaderMeta(MetaBase):
"""
- "meta":{
- "description":"LiteLoader is a lightweight mod bootstrap designed to provide basic loader functionality for mods which don't need to modify game mechanics.",
- "authors":"Mumfrey",
- "url":"http://dl.liteloader.com",
- "updated":"2017-02-22T11:34:07+00:00",
- "updatedTime":1487763247
- },
+ "meta":{
+ "description":"LiteLoader is a lightweight mod bootstrap designed to provide basic loader functionality for mods which don't need to modify game mechanics.",
+ "authors":"Mumfrey",
+ "url":"http://dl.liteloader.com",
+ "updated":"2017-02-22T11:34:07+00:00",
+ "updatedTime":1487763247
+ },
"""
+
description: str
authors: str
url: str
diff --git a/meta/model/mojang.py b/meta/model/mojang.py
index 9f9a29c01a..2e35634008 100644
--- a/meta/model/mojang.py
+++ b/meta/model/mojang.py
@@ -3,17 +3,24 @@ from typing import Optional, List, Dict, Any, Iterator
from pydantic import validator, Field
-from . import MetaBase, MojangArtifactBase, MojangAssets, MojangLibrary, MojangArtifact, MojangLibraryDownloads, \
- Library, MetaVersion, GradleSpecifier
+from . import (
+ MetaBase,
+ MojangArtifactBase,
+ MojangAssets,
+ MojangLibrary,
+ MojangArtifact,
+ MojangLibraryDownloads,
+ Library,
+ MetaVersion,
+ GradleSpecifier,
+)
SUPPORTED_LAUNCHER_VERSION = 21
SUPPORTED_COMPLIANCE_LEVEL = 1
DEFAULT_JAVA_MAJOR = 8 # By default, we should recommend Java 8 if we don't know better
-COMPATIBLE_JAVA_MAPPINGS = {
- 16: [17]
-}
+COMPATIBLE_JAVA_MAPPINGS = {16: [17]}
-'''
+"""
Mojang index files look like this:
{
"latest": {
@@ -32,7 +39,7 @@ Mojang index files look like this:
...
]
}
-'''
+"""
class MojangLatestVersion(MetaBase):
@@ -75,7 +82,9 @@ class ExperimentIndex(MetaBase):
class ExperimentIndexWrap:
def __init__(self, index: ExperimentIndex):
self.index: ExperimentIndex = index
- self.versions: Dict[str, ExperimentEntry] = dict((x.id, x) for x in index.experiments)
+ self.versions: Dict[str, ExperimentEntry] = dict(
+ (x.id, x) for x in index.experiments
+ )
class OldSnapshotEntry(MetaBase):
@@ -94,7 +103,9 @@ class OldSnapshotIndex(MetaBase):
class OldSnapshotIndexWrap:
def __init__(self, index: OldSnapshotIndex):
self.index: OldSnapshotIndex = index
- self.versions: Dict[str, OldSnapshotEntry] = dict((x.id, x) for x in index.old_snapshots)
+ self.versions: Dict[str, OldSnapshotEntry] = dict(
+ (x.id, x) for x in index.old_snapshots
+ )
class LegacyOverrideEntry(MetaBase):
@@ -200,8 +211,7 @@ class MojangVersion(MetaBase):
applet_class: Optional[str] = Field(alias="appletClass")
processArguments: Optional[str]
minecraft_arguments: Optional[str] = Field(alias="minecraftArguments")
- minimum_launcher_version: Optional[int] = Field(
- alias="minimumLauncherVersion")
+ minimum_launcher_version: Optional[int] = Field(alias="minimumLauncherVersion")
release_time: Optional[datetime] = Field(alias="releaseTime")
time: Optional[datetime]
type: Optional[str]
@@ -216,10 +226,17 @@ class MojangVersion(MetaBase):
new_type = self.type
compatible_java_majors = None
if self.id:
- client_download = self.downloads['client']
- artifact = MojangArtifact(url=client_download.url, sha1=client_download.sha1, size=client_download.size)
+ client_download = self.downloads["client"]
+ artifact = MojangArtifact(
+ url=client_download.url,
+ sha1=client_download.sha1,
+ size=client_download.size,
+ )
downloads = MojangLibraryDownloads(artifact=artifact)
- main_jar = Library(name=GradleSpecifier("com.mojang", "minecraft", self.id, "client"), downloads=downloads)
+ main_jar = Library(
+ name=GradleSpecifier("com.mojang", "minecraft", self.id, "client"),
+ downloads=downloads,
+ )
if not self.compliance_level: # both == 0 and is None
pass
@@ -231,11 +248,15 @@ class MojangVersion(MetaBase):
raise Exception(f"Unsupported compliance level {self.compliance_level}")
major = DEFAULT_JAVA_MAJOR
- if self.javaVersion is not None: # some versions don't have this. TODO: maybe maintain manual overrides
+ if (
+ self.javaVersion is not None
+ ): # some versions don't have this. TODO: maybe maintain manual overrides
major = self.javaVersion.major_version
compatible_java_majors = [major]
- if major in COMPATIBLE_JAVA_MAPPINGS: # add more compatible Java versions, e.g. 16 and 17 both work for MC 1.17
+ if (
+ major in COMPATIBLE_JAVA_MAPPINGS
+ ): # add more compatible Java versions, e.g. 16 and 17 both work for MC 1.17
compatible_java_majors += COMPATIBLE_JAVA_MAPPINGS[major]
if new_type == "pending": # experiments from upstream are type=pending
@@ -253,4 +274,5 @@ class MojangVersion(MetaBase):
type=new_type,
compatible_java_majors=compatible_java_majors,
additional_traits=addn_traits,
- main_jar=main_jar)
+ main_jar=main_jar,
+ )