import subprocess import shlex class MinecraftServerManager: def __init__(self): self.servers = {} def start_server(self, server_directory, java_executable='java', jar_file='server.jar', memory_size='2048M'): command = f"{java_executable} -Xmx{memory_size} -Xms{memory_size} -jar {jar_file} > /dev/null" process = subprocess.Popen(shlex.split(command), cwd=server_directory, stdin=subprocess.PIPE) server_id = len(self.servers) + 1 self.servers[server_id] = { 'process': process, 'directory': server_directory, 'port': None } print(f"Started server {server_id} in directory {server_directory}") return server_id def execute_server_command(self, server_id, command): if server_id in self.servers: process = self.servers[server_id]['process'] process.stdin.write(command.encode() + b'\n') print(f"Server {server_id} executed command : {command}") else: print(f"No server found with ID {server_id}") def stop_server(self, server_id): if server_id in self.servers: process = self.servers[server_id]['process'] process.communicate(input=b"stop\n") del self.servers[server_id] print(f"Stopped server {server_id}") else: print(f"No server found with ID {server_id}") def stop_server_focefully(self, server_id): if server_id in self.servers: process = self.servers[server_id]['process'] process.terminate() del self.servers[server_id] print(f"Stopped server {server_id}") else: print(f"No server found with ID {server_id}") def get_servers(self): return self.servers.values() def get_server_id_by_port(self, port): for server_id, server_info in self.servers.items(): if server_info['port'] == port: return server_id return None if __name__ == "__main__": pass