Bootstrap Warium NeoForge port scaffold
This commit is contained in:
50
tools/prepare_runtime_mods.py
Normal file
50
tools/prepare_runtime_mods.py
Normal file
@@ -0,0 +1,50 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user