Skip to content

plugin_startServer

启动 Minecraft 服务器进程。

函数签名

javascript
plugin_startServer(): void

参数说明

此函数不接受任何参数。

返回值

无返回值。

功能描述

plugin_startServer 用于启动 Minecraft 服务器进程。当调用此函数时,MSL 会根据 config.js 中配置的服务器启动参数创建一个新的 Minecraft 服务器进程。

这个函数通常在以下场景使用:

  • 服务器意外停止后自动重启
  • 通过插件实现定时重启功能
  • 在插件中实现服务器管理功能

当服务器进程启动时,会触发 serverStart 事件;当服务器完成启动(显示 "Done" 消息)时,会触发 serverDone 事件。

使用示例

基本用法

javascript
// 启动服务器
plugin_startServer();
plugin_log("INFO", "正在启动服务器...");

自动重启功能

javascript
// 监听服务器停止事件,实现自动重启
plugin_onEvent("serverStop", () => {
    plugin_log("INFO", "服务器已停止,5秒后自动重启...");
    
    setTimeout(() => {
        plugin_startServer();
        plugin_log("INFO", "正在重新启动服务器...");
    }, 5000);
});

定时重启

javascript
// 每6小时重启一次服务器
setInterval(() => {
    plugin_log("INFO", "执行定时重启...");
    plugin_executeCommand("say 服务器将在30秒后重启");
    
    setTimeout(() => {
        plugin_executeCommand("stop");
    }, 30000);
    
}, 6 * 60 * 60 * 1000);  // 6小时

// 监听服务器停止后重新启动
let isScheduledRestart = false;

plugin_onEvent("serverStop", () => {
    if (isScheduledRestart) {
        setTimeout(() => {
            plugin_startServer();
            isScheduledRestart = false;
        }, 5000);
    }
});

通过 HTTP API 控制

javascript
// 注册 HTTP API 用于远程启动服务器
plugin_registerApi("POST", "/api/server/start", (req, res) => {
    let body = "";
    req.on("data", chunk => body += chunk);
    req.on("end", () => {
        plugin_startServer();
        res.writeHead(200, { "Content-Type": "application/json" });
        res.end(JSON.stringify({
            success: true,
            message: "服务器启动命令已发送"
        }));
    });
});

条件启动

javascript
// 检查服务器状态后启动
function safeStartServer() {
    const serverStatus = plugin_pull("serverStatus");
    
    if (serverStatus === "running") {
        plugin_log("WARN", "服务器已在运行中");
        return false;
    }
    
    plugin_startServer();
    plugin_push("serverStatus", "starting");
    return true;
}

// 监听事件更新状态
plugin_onEvent("serverStart", () => {
    plugin_push("serverStatus", "running");
});

plugin_onEvent("serverStop", () => {
    plugin_push("serverStatus", "stopped");
});

plugin_onEvent("serverDone", () => {
    plugin_push("serverStatus", "ready");
});

注意事项

  1. 重复启动:如果服务器已在运行,调用此函数会输出警告日志但不会创建新进程
  2. 配置依赖:服务器启动参数来自 config.js 中的 minecraft.args 配置
  3. 异步操作:服务器启动是异步的,不会阻塞插件代码
  4. 事件顺序serverStart 事件在进程创建时触发,serverDone 事件在服务器完全启动后触发

相关 API

相关事件

  • serverStart - 服务器进程启动时触发
  • serverDone - 服务器启动完成时触发
  • serverStop - 服务器进程停止时触发