如何将JS模块创建的bot对象正确传递至另一个文件的类中
解决方法
1. 修复Walk类的变量引用错误
你在Walk类的构造函数中已经将传入的bot对象保存到了this.bot,但类方法里直接使用bot变量会导致未定义错误,必须全部替换为this.bot。同时需要补充mc-data依赖的导入,因为Movements需要它来识别游戏版本数据。
修改后的Walk类文件代码:
const { Movements, goals: { GoalNear, GoalFollow } } = require('mineflayer-pathfinder'); const mcData = require('minecraft-data')('1.19'); // 替换为你的MC版本号 class Walk { constructor(bot) { this.bot = bot; } // 到我这里来 goToMe(username) { try { const player = this.bot.players[username].entity.position; this.bot.pathfinder.setMovements(new Movements(this.bot, mcData)); this.bot.pathfinder.setGoal(new GoalNear(player.x, player.y, player.z, 0), 1); this.bot.chat('Иду на позицию'); } catch (error) { console.log(error); this.bot.chat('error'); } } // 跟着我 followMe(username) { try { const player = this.bot.players[username].entity; this.bot.pathfinder.setMovements(new Movements(this.bot, mcData)); this.bot.pathfinder.setGoal(new GoalFollow(player, 1), 1); this.bot.chat('Следую за вами'); } catch (error) { console.log(error); this.bot.chat('error'); } } // 停止移动 stopWalk() { try { this.bot.pathfinder.setGoal(null, 1); this.bot.chat('Стою'); } catch (error) { console.log(error); this.bot.chat('error'); } } } module.exports = Walk; // 导出类,供主文件导入
2. 完善主文件的bot初始化逻辑
主文件中需要确保加载pathfinder插件,并且在bot登录成功后实例化Walk类,将bot对象传入:
修改后的主文件代码:
const mineflayer = require('mineflayer'); const { pathfinder } = require('mineflayer-pathfinder'); const Walk = require('./Walk'); // 替换为你的Walk类文件路径 const bot = mineflayer.createBot({ host: '127.0.0.1', port: 5000, username: 'bot', }); // 加载pathfinder插件 bot.loadPlugin(pathfinder); // 当bot登录成功后初始化Walk实例 bot.on('login', () => { const walkController = new Walk(bot); // 示例:调用方法,比如当收到玩家消息时触发 bot.on('chat', (username, message) => { if (message === 'come') { walkController.goToMe(username); } else if (message === 'follow') { walkController.followMe(username); } else if (message === 'stop') { walkController.stopWalk(); } }); }); // 处理bot错误 bot.on('error', (err) => { console.error(err); });
3. 安装缺失的依赖
如果还没安装mc-data,需要执行命令安装:
npm install mc-data
内容的提问来源于stack exchange,提问作者Vyakoo
相关产品推荐
相关产品推荐

