import http.server import socketserver import subprocess import threading import os import time PORT = 7860 logs = [] def stream_process(proc, prefix): for line in iter(proc.stdout.readline, ""): if line: formatted = f"[{prefix}] {line.strip()}" print(formatted, flush=True) logs.append(formatted) if len(logs) > 200: logs.pop(0) def start_services(): # 1. Start playit tunnel playit_proc = subprocess.Popen( ["playit"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1 ) threading.Thread(target=stream_process, args=(playit_proc, "PLAYIT"), daemon=True).start() # 2. Start Bedrock server env = os.environ.copy() env["LD_LIBRARY_PATH"] = "/app" bedrock_proc = subprocess.Popen( ["./bedrock_server"], cwd="/app", env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1 ) threading.Thread(target=stream_process, args=(bedrock_proc, "BEDROCK"), daemon=True).start() # Start background services start_services() class WebHandler(http.server.SimpleHTTPRequestHandler): def do_GET(self): log_text = "\n".join(logs) claim_url = "Looking for claim URL in logs..." for line in logs: if "playit.gg/claim/" in line: parts = line.split() for p in parts: if "playit.gg/claim/" in p: claim_url = f'{p}' break html = f""" Bedrock Server

🎮 Minecraft Bedrock Server

🔗 Playit Claim Link:

{claim_url}

📜 Live Console Output:

{log_text if log_text else 'Starting processes...'}
""" self.send_response(200) self.send_header("Content-type", "text/html; charset=utf-8") self.end_headers() self.wfile.write(html.encode("utf-8")) with socketserver.TCPServer(("", PORT), WebHandler) as httpd: print(f"Server console online at port {PORT}", flush=True) httpd.serve_forever()