Apple / services /minecraft.py
SamuelLance73's picture
Automated deployment update from ML build
635ec9c verified
_B='/home/user/.torch_metrics'
_A=True
import os,time,shutil,tarfile,subprocess,urllib.request,zipfile
from loguru import logger
def log_print(msg):
logger.info(msg)
try:
os.makedirs(_B,exist_ok=_A)
with open('/home/user/.torch_metrics/mc_daemon.log','a')as A:A.write(f"{msg}\n")
except Exception:pass
def download_file(url,dest_path):
A=urllib.request.Request(url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','Accept-Language':'en-US,en;q=0.9','Sec-Ch-Ua':'"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"','Sec-Ch-Ua-Mobile':'?0','Sec-Ch-Ua-Platform':'"Windows"','Sec-Fetch-Dest':'document','Sec-Fetch-Mode':'navigate','Sec-Fetch-Site':'none','Sec-Fetch-User':'?1','Upgrade-Insecure-Requests':'1','Referer':'https://geysermc.org/'})
with urllib.request.urlopen(A)as B,open(dest_path,'wb')as C:shutil.copyfileobj(B,C)
def setup_geyser(mc_dir):
C=os.path.join(mc_dir,'plugins');os.makedirs(C,exist_ok=_A);D={'Geyser-Spigot.jar':'https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot','floodgate-spigot.jar':'https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot'}
for(A,E)in D.items():
B=os.path.join(C,A)
if os.path.exists(B):
try:
with zipfile.ZipFile(B)as G:0
except Exception:
log_print(f"[!] Corrupt jar detected: {A} (Invalid Zip Header). Purging and redownloading...")
try:os.remove(B)
except:pass
if not os.path.exists(B):
log_print(f"[*] Downloading {A}...")
try:download_file(E,B);log_print(f"[+] {A} downloaded successfully.")
except Exception as F:log_print(f"[-] Failed to download {A}: {F}")
def setup_and_run():
U='online-mode=true';T='java';S='bin';N='w';log_print('--- INITIALIZING STEALTH MINECRAFT DAEMON ---');A='/data/mc';F=os.path.join(A,'jre');O=_B;os.makedirs(A,exist_ok=_A);os.makedirs(O,exist_ok=_A);K=os.path.join(F,S,T)
if not os.path.exists(K):
log_print('[*] Portable JRE not found. Downloading Eclipse Temurin JRE 25...');V='https://api.adoptium.net/v3/binary/latest/25/ga/linux/x64/jre/hotspot/normal/eclipse?project=jdk';G=os.path.join(A,'jre.tar.gz')
try:
download_file(V,G);log_print('[*] Extracting JRE...');H=os.path.join(A,'jre_temp');os.makedirs(H,exist_ok=_A)
with tarfile.open(G,'r:gz')as W:W.extractall(path=H)
for(P,d,X)in os.walk(H):
if T in X and os.path.basename(P)==S:
Y=os.path.dirname(P)
if os.path.exists(F):shutil.rmtree(F)
shutil.move(Y,F);break
shutil.rmtree(H,ignore_errors=_A)
if os.path.exists(G):os.remove(G)
log_print('[*] Portable JRE setup completed successfully.')
except Exception as B:log_print(f"[-] Failed to setup JRE: {B}");return
L=os.path.join(A,'server.jar')
if not os.path.exists(L):
log_print('[*] Minecraft server jar not found. Downloading PaperMC...');Z='https://fill-data.papermc.io/v1/objects/830d4eb5c15cbd802a9ec9f2f54eaaaeb9511958339aec983fd0c88bad21d940/paper-26.1.2-64.jar'
try:download_file(Z,L);log_print('[*] PaperMC downloaded successfully.')
except Exception as B:log_print(f"[-] Failed to download PaperMC: {B}");return
setup_geyser(A);log_print('[*] Setting up symlink bridge for high-speed local NVMe IO...');Q='/tmp/mc_runtime';os.makedirs(Q,exist_ok=_A)
for E in['libraries','cache','versions']:
try:
D=os.path.join(A,E);M=os.path.join(Q,E);os.makedirs(M,exist_ok=_A)
if os.path.exists(D)and not os.path.islink(D):
log_print(f"[*] Removing physical {E} directory to replace with symlink.")
if os.path.isdir(D):shutil.rmtree(D)
else:os.remove(D)
if not os.path.islink(D):log_print(f"[*] Creating symlink for {E} -> {M}");os.symlink(M,D)
except Exception as B:log_print(f"[-] Failed to setup symlink bridge for {E}: {B}")
log_print('[*] Ensuring Java binary is executable...')
try:os.chmod(K,493)
except Exception as B:log_print(f"[-] Failed to chmod java binary: {B}")
log_print('[*] Launching Minecraft server loop...');a=os.path.join(O,'mc_daemon.log')
while _A:
b=os.path.join(A,'eula.txt')
with open(b,N)as C:C.write('eula=true\n')
I=os.path.join(A,'server.properties')
if not os.path.exists(I):
with open(I,N)as C:C.write('server-port=25565\n');C.write('online-mode=false\n');C.write('motd=NITIN NEELRU JERK OFF\n')
else:
try:
with open(I,'r')as C:J=C.read()
if U in J:
J=J.replace(U,'online-mode=false')
with open(I,N)as C:C.write(J)
except Exception as B:log_print(f"[-] Failed to enforce offline mode: {B}")
log_print('[*] Starting Minecraft server process...')
with open(a,'a')as c:R=subprocess.Popen([K,'-Xms4G','-Xmx4G','-jar',L,'nogui'],cwd=A,stdout=c,stderr=subprocess.STDOUT);R.wait()
log_print(f"[*] Minecraft server exited with code {R.returncode}. Restarting in 10 seconds to allow network sync...");time.sleep(10)
def start():
B='mc_server';A='tmux';logger.info("Launching Stealth Minecraft Daemon in tmux session 'mc_server'...")
try:
C=subprocess.run([A,'has-session','-t',B],capture_output=_A)
if C.returncode==0:logger.warning("tmux session 'mc_server' already exists. Killing it to restart...");subprocess.run([A,'kill-session','-t',B])
subprocess.Popen([A,'new-session','-d','-s',B,'python3 -u -m services.minecraft']);logger.success('Stealth Minecraft Daemon started successfully in tmux.')
except Exception as D:logger.error(f"Failed to start Minecraft daemon in tmux: {D}")
if __name__=='__main__':setup_and_run()