Files
Warium-NeoForge-1.21.1/tools/prepare_runtime_mods.py
Codex 6ef5fdd378
Some checks failed
Build / build (push) Failing after 13m38s
Release Dry Run / release-dry-run (push) Successful in 5s
Codex Template Compliance / template-compliance (push) Successful in 5s
Bootstrap Warium NeoForge port scaffold
2026-05-09 20:59:05 +02:00

51 lines
2.0 KiB
Python

from __future__ import annotations
import json
import shutil
import urllib.parse
import urllib.request
from pathlib import Path
from warium_source import ROOT
MODS_DIR = ROOT / "run" / "server" / "mods"
REQUIRED_MODRINTH = [
("geckolib", "4.7.5.1"),
("rpl", "2.1.2"),
]
def main() -> None:
MODS_DIR.mkdir(parents=True, exist_ok=True)
for project, version in REQUIRED_MODRINTH:
download_modrinth_version(project, version)
private_dir = ROOT / "ci" / "required-mods"
if private_dir.exists():
for jar in private_dir.glob("*.jar"):
shutil.copy2(jar, MODS_DIR / jar.name)
print(f"Runtime mods prepared in {MODS_DIR}")
def download_modrinth_version(project: str, version_number: str) -> None:
encoded_project = urllib.parse.quote(project)
loaders = urllib.parse.quote(json.dumps(["neoforge"]))
game_versions = urllib.parse.quote(json.dumps(["1.21.1"]))
url = f"https://api.modrinth.com/v2/project/{encoded_project}/version?loaders={loaders}&game_versions={game_versions}"
request = urllib.request.Request(url, headers={"User-Agent": "MrSphay/Warium-NeoForge-Port/1.0"})
with urllib.request.urlopen(request) as response:
data = json.loads(response.read().decode("utf-8"))
selected = next((entry for entry in data if entry.get("version_number") == version_number), None)
if selected is None:
available = ", ".join(entry.get("version_number", "?") for entry in data[:10])
raise SystemExit(f"No NeoForge 1.21.1 build found for {project} {version_number}. Available: {available}")
primary = next((file for file in selected["files"] if file.get("primary")), selected["files"][0])
target = MODS_DIR / primary["filename"].replace(" ", "-")
request = urllib.request.Request(primary["url"], headers={"User-Agent": "MrSphay/Warium-NeoForge-Port/1.0"})
with urllib.request.urlopen(request) as response, target.open("wb") as out:
shutil.copyfileobj(response, out)
if __name__ == "__main__":
main()