-
Notifications
You must be signed in to change notification settings - Fork 15
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug


注册真指令后,使用时抛出错误,时而报错,时而不报错,但是在这个插件刚写出来时使用时没有报错,在服务器运行一段时间后再次使用指令控制台出现错误,目前不清楚是跨插件调用时内存管理问题还是什么问题
这是被调用到的其他插件API的另一个插件:
To Reproduce
const { PAPI } = require('./GMLIB-LegacyRemoteCallApi/lib/BEPlaceholderAPI-JS'); // 导入PAPI
mc.listen("onServerStarted", () => {
const listEx_command = mc.newCommand(`listex`, `列出在线玩家和假人`, PermType.Any);
listEx_command.overload([]);
listEx_command.setCallback((cmd, ori, out, res) => {
try {
const getFakePlayerInfo = (str) => {
// 安全检查:确保插件存在且导出函数可用
if (ll.hasExported("B-FakePlayer", "get_B_FakePlayerInfo")) {
const result = ll.imports("B-FakePlayer", "get_B_FakePlayerInfo")(str);
// 确保返回的是数组且长度足够
if (Array.isArray(result) && result.length >= 8) {
return result;
}
}
// 返回安全的默认值
return [false];
}
const onlinePlayers = mc.getOnlinePlayers();
// 安全处理:确保onlinePlayers是数组
if (!Array.isArray(onlinePlayers)) {
out.error("获取在线玩家列表失败");
return;
}
// 分离真实玩家和假人
const realPlayers = onlinePlayers.filter(p => p && !p.isSimulatedPlayer());
const fakePlayers = onlinePlayers.filter(p => p && p.isSimulatedPlayer());
// 获取玩家名称列表
const realPlayerNames = realPlayers.map(p => p.realName || p.name || "未知玩家").join(', ');
// 安全处理假人信息
const fakePlayerEntries = fakePlayers.map(p => {
try {
const info = getFakePlayerInfo(p.name);
// 检查是否有有效的假人信息
if (info[0] && info[7]) {
return `${p.name}(由${info[7]}创建)`;
}
} catch (e) {
logger.error(`处理假人 ${p.name} 时出错: ${e}`);
}
return p.name; // 无创建者信息时只显示假人名称
});
const fakePlayerNames = fakePlayerEntries.join(', ');
//const fakePlayerNames = fakePlayers.map(p => p.name).join(', ');
const content =
`目前有 ${onlinePlayers.length}/%server_max_players% 个玩家在线:\n` +
`玩家 (${realPlayers.length} 个): ${realPlayerNames}\n` +
`假人 (${fakePlayers.length} 个): ${fakePlayerNames}`;
out.success(PAPI.translateString(content));
} catch (e) {
logger.error(`listex 命令执行出错: ${e}\n${e.stack}`);
out.error("执行命令时发生错误,请查看服务器日志");
}
});
listEx_command.setup();
})
已知代码中的ll.imports("B-FakePlayer", "get_B_FakePlayerInfo")(str) 传入的参数是字符串,返回的是一个数组(最多11个元素,最少1个元素,并且只有1个元素时这个元素是false)
Expected behavior
不报错
Screenshots


Platform
win10
Version
1.3.4
Additional context
No response
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working