plugin_getPluginsList
获取当前 MSL 中所有插件的状态列表。
函数签名
javascript
plugin_getPluginsList(): { loaded: string[], unloaded: string[], all: string[] }参数说明
此函数不接受任何参数。
返回值
返回一个对象,包含以下属性:
| 属性 | 类型 | 说明 |
|---|---|---|
loaded | string[] | 已加载的插件名称列表 |
unloaded | string[] | 未加载的插件名称列表 |
all | string[] | 所有插件名称列表 |
功能描述
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"]
}注意事项
- 实时状态:返回的是调用时刻的插件状态,不是缓存数据
- 插件目录:只返回
plugins目录下的.js文件 - 文件检查:每次调用都会检查文件系统,避免在高频循环中调用
相关 API
- plugin_onEvent - 监听
pluginLoaded事件
相关指南
- 调试插件 - 使用
msl list_plugins命令