from ftplib import FTP_TLS as FTP import io import json import tempfile import subprocess import time import os import datetime def perform_installation(instance_name, prism_command, prism_instance_path): ftp = FTP("gitea.piwalker.net") ftp.login() ftp.prot_p() # Fetching versions.json from FTP bio = io.BytesIO() ftp.retrbinary("RETR versions.json", bio.write) bio.seek(0) versions = json.load(bio) bio.close() # Checking current version version = "0.0.0" version_file_path = os.path.join(prism_instance_path, instance_name, ".minecraft", "version.txt") if os.path.exists(version_file_path): with open(version_file_path, 'r') as fp: version = fp.readline().rstrip() # Checking if update is needed if version != versions[-1]["Version"]: print(f"Current version: {version}") print(f"Latest version: {versions[-1]['Version']}") # Downloading modpack with tempfile.TemporaryDirectory() as temp_dir: modpack_file_path = os.path.join(temp_dir, instance_name + ".mrpack") with open(modpack_file_path, 'wb') as modpack: ftp.retrbinary("RETR " + versions[-1]["File"], modpack.write) # Running PrismLauncher with modpack subprocess.Popen([prism_command, '-I', modpack_file_path]) # Waiting for installation to complete while True: time.sleep(5) if os.path.exists(version_file_path): with open(version_file_path, 'r') as fp: version = fp.readline().rstrip() if version == versions[-1]["Version"]: break # Launching PrismLauncher with the instance subprocess.run([prism_command, '-l', instance_name]) def upload_pack(username, password, version_tag, fileName): ftp = FTP("gitea.piwalker.net", username, password) ftp.prot_p() bio = io.BytesIO() ftp.retrbinary("RETR versions.json", bio.write) bio.seek(0) versions = json.load(bio) bio.close() time = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S") versions.append({"Version":version_tag, "Date":time, "File":"Versions/fcs7-"+time+".mrpack"}) with open(fileName, 'rb') as fp: ftp.storbinary("STOR "+versions[len(versions)-1]["File"], fp) bio = io.BytesIO() bio.write(json.dumps(versions).encode()) bio.seek(0) ftp.storbinary("STOR versions.json", bio) bio.close() ftp.close()