[+] Minecraft start script
This commit is contained in:
@@ -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)
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user