MCPcopy Create free account
hub / github.com/MCSLTeam/MCSL2 / ServerLauncher

Class ServerLauncher

MCSL2Lib/ServerControllers/processCreator.py:262–320  ·  view source on GitHub ↗

启动服务器的调用部分。

Source from the content-addressed store, hash-verified

260
261
262class ServerLauncher:
263 """
264 启动服务器的调用部分。
265 """
266
267 def __init__(self, v: ServerVariables):
268 self.config = v
269
270 def start(self):
271 """
272 供调用的方法。\n
273 1.检查Minecraft EULA\n
274 2.生成开服命令参数\n
275 3.启动进程
276 """
277 if not (validator := _MinecraftEULA(self.config.serverName)).checkEula():
278 return validator
279 else:
280 self._setJVMArg()
281 return self._launch()
282
283 def _setJVMArg(self):
284 """生成开服命令参数"""
285 # Bedrock Edition servers don't use JVM
286 if self.config.serverType == "bedrock":
287 self.jvmArg = []
288 MCSL2Logger.info("基岩版服务器,跳过 JVM 参数设置")
289 return
290
291 self.jvmArg = [
292 f"-Xms{self.config.minMem}{self.config.memUnit}",
293 f"-Xmx{self.config.maxMem}{self.config.memUnit}",
294 ]
295 # add jvm args
296 if isinstance(self.config.jvmArg, list):
297 self.jvmArg.extend(self.config.jvmArg)
298 else:
299 if self.config.jvmArg:
300 self.jvmArg.append(self.config.jvmArg)
301
302 # adjust to different server type
303 if self.config.serverType == "forge":
304 pass
305 else:
306 self.jvmArg.append("-jar")
307 self.jvmArg.append(f"{self.config.coreFileName}")
308
309 # add "nogui" arg
310 self.jvmArg.append("nogui")
311 MCSL2Logger.info(f"生成 JVM 参数: \n{self.jvmArg}")
312
313 def _launch(self) -> _ServerProcessBridge:
314 """启动进程"""
315 if self.config.serverType == "bedrock":
316 # Bedrock Edition uses direct executable
317 (bridge := _BedrockServerProcessBridge(self.config)).startServer()
318 else:
319 (bridge := _ServerProcessBridge(self.config, self.jvmArg)).startServer()

Callers 1

startServerMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected