mcserver/instances/forge-1.20.1-survival/patches/lts-auth/build.py
2026-08-10 14:24:14 -04:00

52 lines
2.5 KiB
Python

import os, shutil, subprocess, zipfile
JAR_HOST_PATH = "../../runtime/data/mods/lts_auth-1.0.1+mc1.20.1.jar"
BAK_HOST_PATH = "../../runtime/data/mods/lts_auth-1.0.1+mc1.20.1.jar.bak"
TMP_HOST_DIR = "../../runtime/data/tmp_lts_build"
TMP_CONTAINER_DIR = "/data/tmp_lts_build"
CONTAINER_NAME = "mc_forge_server"
def run_cmd(cmd):
res = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
if res.returncode != 0:
print("Command failed:", cmd)
print("Stderr:", res.stderr)
print("Stdout:", res.stdout)
return res.returncode == 0
def cleanup_tmp():
run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} rm -rf {TMP_CONTAINER_DIR}")
def prepare_tmp():
cleanup_tmp()
run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} mkdir -p {TMP_CONTAINER_DIR}")
run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} chmod -R 777 {TMP_CONTAINER_DIR}")
if os.path.exists(JAR_HOST_PATH):
if not os.path.exists(BAK_HOST_PATH):
shutil.copyfile(JAR_HOST_PATH, BAK_HOST_PATH)
prepare_tmp()
with zipfile.ZipFile(JAR_HOST_PATH, "r") as z:
z.extractall(TMP_HOST_DIR)
run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} apt-get update >/dev/null 2>&1")
run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} apt-get install -y openjdk-17-jdk-headless >/dev/null 2>&1")
run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} chmod -R 777 {TMP_CONTAINER_DIR}")
compile_cmd = f'docker exec -i {CONTAINER_NAME} bash -c \'CP=$(find /data/libraries /data/mods -name "*.jar" | tr "\\n" ":"); javac -cp "$CP" -d {TMP_CONTAINER_DIR} {TMP_CONTAINER_DIR}/src/com/rtxbb/lts_auth/LtsAuthMod.java {TMP_CONTAINER_DIR}/src/com/rtxbb/lts_auth/command/LoginCommand.java\''
if run_cmd(compile_cmd):
print("Compilation successful! Re-zipping mod JAR...")
run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} chmod -R 777 {TMP_CONTAINER_DIR}")
run_cmd(f"docker exec -u 0 -i {CONTAINER_NAME} chmod 777 /data/mods/lts_auth-1.0.1+mc1.20.1.jar")
with zipfile.ZipFile(JAR_HOST_PATH, "w", zipfile.ZIP_DEFLATED) as zip_out:
for root, _, files in os.walk(TMP_HOST_DIR):
for file in files:
if file.endswith(".java") or "src" in root:
continue
full_path = os.path.join(root, file)
arcname = os.path.relpath(full_path, TMP_HOST_DIR)
zip_out.write(full_path, arcname)
cleanup_tmp()
print("JAR successfully updated.")