diff --git a/bot5.js b/bot5.js new file mode 100644 index 0000000..f894e85 --- /dev/null +++ b/bot5.js @@ -0,0 +1,157 @@ +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", // Server IP + port: 54825, // Server port + username: 'V5-Bot', // Bot name +} + +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.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' || 'Zombie' + 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.heldItem.type !== 'diamond_sword' && bot.inventory.findInventoryItem('diamond_sword') !== null) { + bot.equip(bot.inventory.findInventoryItem('diamond_sword')) + } + //console.log(dist) + if (dist <= 5){ + bot.attack(mob) + }// else{ + // console.log('is not Fighting') + //} + } + }, 1000) +}) + +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() + }*/ +}) \ No newline at end of file