Skip to content

plugin_getPluginsList

获取当前 MSL 中所有插件的状态列表。

函数签名

javascript
plugin_getPluginsList(): { loaded: string[], unloaded: string[], all: string[] }

参数说明

此函数不接受任何参数。

返回值

返回一个对象,包含以下属性:

属性类型说明
loadedstring[]已加载的插件名称列表
unloadedstring[]未加载的插件名称列表
allstring[]所有插件名称列表

功能描述

plugin_getPluginsList 用于获取 MSL 插件系统中所有插件的状态信息。这个函数返回一个包含三个数组的对象,分别表示已加载的插件、未加载的插件和所有插件。

这个函数在以下场景非常有用:

  • 检查某个插件是否已加载
  • 实现插件依赖检查
  • 显示插件状态信息
  • 实现插件管理功能

使用示例

基本用法

javascript
// 获取插件列表
const plugins = plugin_getPluginsList();

plugin_log("INFO", `已加载插件: ${plugins.loaded.join(", ")}`);
plugin_log("INFO", `未加载插件: ${plugins.unloaded.join(", ")}`);
plugin_log("INFO", `总插件数: ${plugins.all.length}`);

检查插件状态

javascript
// 检查某个插件是否已加载
function isPluginLoaded(pluginName) {
    const plugins = plugin_getPluginsList();
    return plugins.loaded.includes(pluginName);
}

// 使用示例
if (isPluginLoaded("economy")) {
    plugin_log("INFO", "经济插件已加载");
} else {
    plugin_log("WARN", "经济插件未加载,部分功能不可用");
}

插件依赖检查

javascript
// 检查依赖插件
function checkDependencies(requiredPlugins) {
    const plugins = plugin_getPluginsList();
    const missing = [];
    
    requiredPlugins.forEach(name => {
        if (!plugins.loaded.includes(name)) {
            missing.push(name);
        }
    });
    
    if (missing.length > 0) {
        plugin_log("ERROR", `缺少依赖插件: ${missing.join(", ")}`);
        return false;
    }
    
    return true;
}

// 使用示例
plugin_onEvent("serverDone", () => {
    if (checkDependencies(["economy", "permissions"])) {
        initializePlugin();
    }
});

注册状态查询指令

javascript
// 注册 !plugins 指令
plugin_registerCommand("!plugins", (player) => {
    const plugins = plugin_getPluginsList();
    
    plugin_executeCommand(`tellraw ${player} {"text":"========== 插件列表 ==========","color":"gold"}`);
    
    plugins.loaded.forEach(name => {
        plugin_executeCommand(`tellraw ${player} {"text":"  ✓ ${name}","color":"green"}`);
    });
    
    plugins.unloaded.forEach(name => {
        plugin_executeCommand(`tellraw ${player} {"text":"  ✗ ${name}","color":"red"}`);
    });
    
    plugin_executeCommand(`tellraw ${player} {"text":"总计: ${plugins.all.length} 个插件,${plugins.loaded.length} 个已加载","color":"yellow"}`);
});

HTTP API 查询

javascript
// 注册 HTTP API 查询插件状态
plugin_registerApi("GET", "/api/plugins", (req, res) => {
    const plugins = plugin_getPluginsList();
    
    res.writeHead(200, { "Content-Type": "application/json" });
    res.end(JSON.stringify({
        success: true,
        data: {
            total: plugins.all.length,
            loaded: plugins.loaded.length,
            unloaded: plugins.unloaded.length,
            plugins: plugins.all.map(name => ({
                name: name,
                status: plugins.loaded.includes(name) ? "loaded" : "unloaded"
            }))
        }
    }));
});

插件管理面板

javascript
// 注册管理指令
plugin_registerCommand("!plugin list", (player) => {
    const plugins = plugin_getPluginsList();
    
    plugin_executeCommand(`tellraw ${player} {"text":"已加载插件 (${plugins.loaded.length}):","color":"green"}`);
    plugins.loaded.forEach(name => {
        plugin_executeCommand(`tellraw ${player} {"text":"  - ${name}","color":"white"}`);
    });
    
    if (plugins.unloaded.length > 0) {
        plugin_executeCommand(`tellraw ${player} {"text":"未加载插件 (${plugins.unloaded.length}):","color":"red"}`);
        plugins.unloaded.forEach(name => {
            plugin_executeCommand(`tellraw ${player} {"text":"  - ${name}","color":"gray"}`);
        });
    }
});

plugin_registerCommand("!plugin info <name>", (player, pluginName) => {
    const plugins = plugin_getPluginsList();
    const isLoaded = plugins.loaded.includes(pluginName);
    const exists = plugins.all.includes(pluginName);
    
    if (!exists) {
        plugin_executeCommand(`tellraw ${player} {"text":"插件 ${pluginName} 不存在","color":"red"}`);
        return;
    }
    
    plugin_executeCommand(`tellraw ${player} {"text":"插件: ${pluginName}","color":"gold"}`);
    plugin_executeCommand(`tellraw ${player} {"text":"状态: ${isLoaded ? "已加载" : "未加载"}","color":"${isLoaded ? "green" : "red"}"}`);
});

插件加载状态监控

javascript
// 监控插件加载状态
let previousLoaded = [];

setInterval(() => {
    const plugins = plugin_getPluginsList();
    const currentLoaded = plugins.loaded;
    
    // 检测新加载的插件
    const newPlugins = currentLoaded.filter(p => !previousLoaded.includes(p));
    if (newPlugins.length > 0) {
        plugin_log("INFO", `新加载的插件: ${newPlugins.join(", ")}`);
    }
    
    // 检测卸载的插件
    const removedPlugins = previousLoaded.filter(p => !currentLoaded.includes(p));
    if (removedPlugins.length > 0) {
        plugin_log("INFO", `已卸载的插件: ${removedPlugins.join(", ")}`);
    }
    
    previousLoaded = currentLoaded;
}, 5000);  // 每5秒检查一次

条件功能启用

javascript
// 根据其他插件状态启用功能
function initializeFeatures() {
    const plugins = plugin_getPluginsList();
    
    // 检查经济插件
    if (plugins.loaded.includes("economy")) {
        enableShopFeature();
        plugin_log("INFO", "商店功能已启用(依赖经济插件)");
    }
    
    // 检查权限插件
    if (plugins.loaded.includes("permissions")) {
        enablePermissionFeature();
        plugin_log("INFO", "权限功能已启用(依赖权限插件)");
    }
    
    // 检查聊天插件
    if (plugins.loaded.includes("chat")) {
        enableChatFeature();
        plugin_log("INFO", "聊天功能已启用(依赖聊天插件)");
    }
}

plugin_onEvent("serverDone", () => {
    initializeFeatures();
});

返回值示例

javascript
{
    loaded: ["demo", "economy", "permissions"],
    unloaded: ["disabled-plugin"],
    all: ["demo", "economy", "permissions", "disabled-plugin"]
}

注意事项

  1. 实时状态:返回的是调用时刻的插件状态,不是缓存数据
  2. 插件目录:只返回 plugins 目录下的 .js 文件
  3. 文件检查:每次调用都会检查文件系统,避免在高频循环中调用

相关 API

相关指南