const mineflayer = require('mineflayer') const { pathfinder, Movements, goals } = require('mineflayer-pathfinder') const GoalFollow = goals.GoalFollow const GoalBlock = goals.GoalBlock const { Vec3 } = require('vec3') const autoeat = require("mineflayer-auto-eat") // to add forge modules https://github.com/PrismarineJS/mineflayer/pull/472 const options = { host: "127.0.0.1", port: 50500, username: 'V5-Bot' } var mc = require('minecraft-protocol'); var autoVersionForge = require('minecraft-protocol-forge').autoVersionForge; var client = mc.createClient(options); autoVersionForge(client); const bot = mineflayer.createBot(options) bot.loadPlugin(pathfinder) bot.loadPlugin(autoeat) function delay(time) { // delay function return new Promise(resolve => setTimeout(resolve, time)); } function followPlayer(username){ const playerToFollow = bot.players[username] /*if (!playerFH) { bot.chat(`I can't see ${playerFH} !`) return }*/ const mcData = require('minecraft-data')(bot.version) const movements = new Movements(bot, mcData) movements.scafoldingBlocks = [] bot.pathfinder.setMovements(movements) const goal = new GoalFollow(playerToFollow.entity, 2) bot.pathfinder.setGoal(goal, true) // true # for checking Goal position each frame } function locateEmeraldBlock(){ const mcData = require('minecraft-data')(bot.version) const movements = new Movements(bot, mcData) movements.scafoldingBlocks = [] bot.pathfinder.setMovements(movements) const emeraldBlock = bot.findBlock({ matching: mcData.blocksByName.emerald_block.id, maxDistance: 32 }) if (!emeraldBlock){ bot.chat("I can't see any emerald blocks!") return } const x = emeraldBlock.position.x const y = emeraldBlock.position.y + 1 const z = emeraldBlock.position.z const goal = new GoalBlock(x, y, z) bot.pathfinder.setGoal(goal) } function lightUp() { const mcData = require('minecraft-data')(bot.version) const movements = new Movements(bot, mcData) movements.scafoldingBlocks = [] bot.pathfinder.setMovements(movements) const isAir = bot.findBlock({ matching: mcData.blocksByName.air.id, maxDistance: 32 }) const x = isAir.position.x const y = isAir.position.y - 1 const z = isAir.position.z const potentialLightableBlock = bot.blockAt({ x, y, z }) if (potentialLightableBlock.transparent === false && isAir.light <= 7){ bot.equip(bot.inventory.findInventoryItem('torch')) bot.placeBlock('torch',isAir.position) } } bot.once('spawn', () => { bot.chat('I am connected') //delay(1000).then(() => bot.chat("...And I am The Bot.")); bot.autoEat.options = { priority: "foodPoints", bannedFood: ['beetroot', 'cake', 'carrot', 'chorus_fruit', 'golden_carrot', 'honey_bottle', 'poisonous_potato', 'potato', 'pufferfish', 'beef', 'chicken', 'cod', 'mutton', 'porkchop', 'rabbit', 'salmon', 'rotten_flesh', 'spider_eye', 'suspicious_stew', 'sweet_berries', 'tropical_fish', "golden_apple", "enchanted_golden_apple"], eatingTimeout: 2 } setInterval(() => { if (bot.health >=6){ const mobFilter = e => (e.type === 'mob' && (e.mobType === 'Slime' || e.mobType === 'Zombie' || e.mobType === 'Spider')) const mob = bot.nearestEntity(mobFilter) if (!mob) return const pos = mob.position.offset(0,mob.height,0) const dist = pos.distanceTo(bot.entity.position) bot.lookAt(pos, true) if (dist >= 20) return if (dist <= 10 && bot.inventory.findInventoryItem('diamond_sword')) { bot.equip(bot.inventory.findInventoryItem('diamond_sword')) } //console.log(dist) if (dist <= 5){ bot.attack(mob) }// else{ // console.log('is not Fighting') //} } }, 800) }) bot.on("autoeat_started", () => { console.log("Auto Eat started!") }) bot.on("autoeat_stopped", () => { console.log("Auto Eat stopped!") bot.sw }) bot.on("health", () => { if (bot.food === 20) bot.autoEat.disable() // Disable the plugin if the bot is at 20 food points else bot.autoEat.enable() // Else enable the plugin again }) bot.on('chat', (username, message) => { if (message === 'hi') bot.chat(`Hi ${username}!`); if (message === (`${bot.username} off`)){ bot.chat(`Bye ${username}!`) bot.quit() } if (message === 'bot spawnpoint') { bot.chat(`${bot.spawnPoint.x} ${bot.spawnPoint.y} ${bot.spawnPoint.z}`) } if (message === 'bot follow me') { followPlayer(username) } if (message === 'bot stop follow') { bot.chat(`CU later ${username}`) bot.pathfinder.stop() } if (message === 'bot find emerald block') { locateEmeraldBlock() } if (message === 'bot light up') { lightUp() } /*if (message === 'bot stop find') { bot.chat(`Ok...`) bot.pathfinder.stop() }*/ })