meta-unmojang/meta/run/generate_liteloader.py
Sefa Eyeoglu be4317cf9d
refactor!: package using Nix
Signed-off-by: Sefa Eyeoglu <contact@scrumplex.net>
2024-04-24 16:56:23 +02:00

119 lines
3.9 KiB
Python
Executable File

import os
from datetime import datetime
from typing import List, Tuple, Dict, Optional
from meta.common import ensure_component_dir, launcher_path, upstream_path
from meta.common.liteloader import LITELOADER_COMPONENT, VERSIONS_FILE
from meta.common.mojang import MINECRAFT_COMPONENT
from meta.model import MetaVersion, GradleSpecifier, Library, MetaPackage, Dependency
from meta.model.liteloader import LiteloaderIndex, LiteloaderArtefact
LAUNCHER_DIR = launcher_path()
UPSTREAM_DIR = upstream_path()
ensure_component_dir(LITELOADER_COMPONENT)
def process_artefacts(
mc_version: str, artefacts: Dict[str, LiteloaderArtefact], is_snapshot: bool
) -> Tuple[List[MetaVersion], Optional[MetaVersion]]:
versions: List[MetaVersion] = []
lookup: Dict[str, MetaVersion] = {}
latest_version = None
latest = None
for x, artefact in artefacts.items():
if x == "latest":
latest_version = artefact.version
continue
v = MetaVersion(
name="LiteLoader",
uid=LITELOADER_COMPONENT,
version=artefact.version,
requires=[Dependency(uid=MINECRAFT_COMPONENT, equals=mc_version)],
release_time=datetime.utcfromtimestamp(int(artefact.timestamp)),
additional_tweakers=[artefact.tweakClass],
main_class="net.minecraft.launchwrapper.Launch",
order=10,
libraries=artefact.libraries,
type="release",
)
if is_snapshot:
v.type = "snapshot"
# hack to make broken liteloader versions work
for lib in v.libraries:
if lib.name == GradleSpecifier("org.ow2.asm", "asm-all", "5.0.3"):
lib.url = "https://repo.maven.apache.org/maven2/"
if lib.name == GradleSpecifier("org.ow2.asm", "asm-all", "5.2"):
lib.url = "http://repo.liteloader.com/"
liteloader_lib = Library(
name=GradleSpecifier("com.mumfrey", "liteloader", v.version),
url="http://dl.liteloader.com/versions/",
)
if is_snapshot:
liteloader_lib.mmcHint = "always-stale"
v.libraries.append(liteloader_lib)
versions.append(v)
lookup[v.version] = v
if latest_version:
latest = lookup[latest_version]
return versions, latest
def process_versions(index: LiteloaderIndex) -> Tuple[List[MetaVersion], List[str]]:
all_versions: List[MetaVersion] = []
recommended: List[str] = []
for mcVersion, versionObject in index.versions.items():
# ignore this for now. It should be a jar mod or something.
if mcVersion == "1.5.2":
continue
latest_release = None
if versionObject.artefacts:
versions, latest_release = process_artefacts(
mcVersion, versionObject.artefacts.liteloader, False
)
all_versions.extend(versions)
if versionObject.snapshots:
versions, latest_snapshot = process_artefacts(
mcVersion, versionObject.snapshots.liteloader, True
)
all_versions.extend(versions)
if latest_release:
recommended.append(latest_release.version)
recommended.sort()
all_versions.sort(key=lambda x: x.release_time, reverse=True)
return all_versions, recommended
def main():
index = LiteloaderIndex.parse_file(os.path.join(UPSTREAM_DIR, VERSIONS_FILE))
all_versions, recommended = process_versions(index)
for version in all_versions:
version.write(
os.path.join(LAUNCHER_DIR, LITELOADER_COMPONENT, f"{version.version}.json")
)
package = MetaPackage(
uid=LITELOADER_COMPONENT,
name="LiteLoader",
description=index.meta.description,
project_url=index.meta.url,
authors=[index.meta.authors],
recommended=recommended,
)
package.write(os.path.join(LAUNCHER_DIR, LITELOADER_COMPONENT, "package.json"))
if __name__ == "__main__":
main()