From 12a4f9361e0c79fe03cafa3c283eb96706359f46 Mon Sep 17 00:00:00 2001 From: Hykilpikonna Date: Sun, 2 Jan 2022 23:17:46 -0500 Subject: [PATCH] [+] Minecraft start script --- misc/minecraft-start.py | 95 +++++++++++++++++++++++++++++++++++++++++ requirements.txt | 2 + 2 files changed, 97 insertions(+) create mode 100644 misc/minecraft-start.py diff --git a/misc/minecraft-start.py b/misc/minecraft-start.py new file mode 100644 index 0000000..63d6e73 --- /dev/null +++ b/misc/minecraft-start.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 + +import os +import re +import shutil +import sys +import urllib.request +from datetime import datetime +import hypy_utils + +import requests +import select + +JAVA = '/usr/local/opt/openjdk@17/bin/java' +MAX_RAM = '4096M' +MIN_RAM = MAX_RAM +TIME = 5 + +version_re = re.compile('[0-9]\.[0-9]+\.[0-9]+') + + +def download_latest_purpur() -> str: + latest = requests.get(f'https://api.purpurmc.org/v2/purpur/{ver}/latest').json() + + # Download update + print(f'- Downloading...') + new_f = f"purpur-{ver}-{latest['build']}.jar" + urllib.request.urlretrieve(f"https://api.purpurmc.org/v2/purpur/{ver}/latest/download", new_f) + + # Check md5 + print(f'- Checking md5... ({latest["md5"]})') + if hypy_utils.md5(new_f) == latest['md5']: + print(f'- Checksum passed!') + else: + raise AssertionError('Checksum didn\'t pass.') + + return new_f + + +def update(f: str, ver: list[str]) -> str: + # If no jar found, download latest purpur + if f == '': + print(f'No jar found, downloading latest purpur...') + + + # Fetch latest purpur build + if f.startswith('purpur'): + ver = ver[0] + build = int(re.findall('[0-9]{3,5}', f)[0]) + + print(f'Checking release update for version {ver}... Current build: {build}') + latest = requests.get(f'https://api.purpurmc.org/v2/purpur/{ver}/latest').json() + latest_build = int(latest['build']) + + # Update + if latest_build <= build: + print('Already on latest version, nothing to do.') + return f + + print(f'Updating from {build} to {latest_build}') + + new_f = download_latest_purpur() + + # Remove old file + log_jar = f'logs/{datetime.today().strftime("%Y-%m-%d")}-{f}' + shutil.move(f, log_jar) + print(f'Old jar {f} moved to {log_jar}') + + return new_f + + +if __name__ == '__main__': + + # Find server jar + jar = '' + for f in os.listdir('.'): + if not f.endswith('.jar'): + continue + + ver = version_re.findall(f) + if any(k in f for k in ['craftbukkit', 'spigot', 'paper', 'purpur']) or len(ver) != 0: + jar = f + break + + jar = update(jar, version_re.findall(jar)) + + # Auto Restart + while True: + os.system(f'{JAVA} -Xmx{MAX_RAM} -Xms{MIN_RAM} -jar {jar} nogui') + + print('Server stopped, restarting in 5s\nPress any key to stop the server.') + i, o, e = select.select([sys.stdin], [], [], 5) + if i: + print('Server stops.') + exit(0) diff --git a/requirements.txt b/requirements.txt index 4133d8d..10ab1b2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,3 +15,5 @@ Pillow~=8.4.0 numpy~=1.21.4 matplotlib~=3.5.1 tweepy~=4.4.0 + +hypy-utils==1.0.2