diff --git a/lib/plugins/mover.js b/lib/plugins/mover.js new file mode 100644 index 0000000..90057ed --- /dev/null +++ b/lib/plugins/mover.js @@ -0,0 +1,95 @@ +// import { EntityFilters } from "mineflayer-statemachine" +// import v from "vec3" + +// import { Movements } from "mineflayer-pathfinder" + +// const mineflayer = require('mineflayer') +const { Movements } = require('mineflayer-pathfinder') +// const { GoalBLah } = require('mineflayer-pathfinder').goals +const v = require('vec3') + +let cfg = {} +let bot = {} +// let moving +let pathfinder +let movements = [] + + +function initMoves(bot = bot, mcData = require('minecraft-data')(bot.version)) { + let defaultMove = new Movements(bot, mcData) + defaultMove.canDig = false + defaultMove.scafoldingBlocks.push(mcData.blocksByName.slime_block.id) + // defaultMove.blocksCantBreak.add(mcData.blocksByName.glass.id) + // defaultMove.blocksToAvoid.add(mcData.blocksByName.magma.id) + movements.defaultMove = defaultMove + + bot.pathfinder.setMovements(defaultMove) +} + + +function moveNear(pos, distance = 3) { + const { GoalNear } = require('mineflayer-pathfinder').goals + cfg.quiet || bot.chat(`moving to ${pos}`) + + pos = v(pos) + bot.pathfinder.setMovements(movements.defaultMove) + bot.pathfinder.setGoal(new GoalNear(pos.x, pos.y, pos.z, distance)) +} + +function follow(entity, dynamic = true) { + console.assert(entity) + const { GoalFollow } = require('mineflayer-pathfinder').goals + + + + cfg.quiet && console.log(entity) + || bot.chat( + `following ${entity.type + }: ${entity.username || entity.displayName + }${dynamic ? "" : " once"}` + ) + + entity = entity.entity ? entity.entity : entity + + // console.log(entity) + + bot.pathfinder.setMovements(movements.defaultMove) + bot.pathfinder.setGoal(new GoalFollow(entity, 3), dynamic) +} + +function hit(blockOrEntity) { + bot.chat(`hitting ${entity.name || entity.type}`) +} + +function stop() { + bot.pathfinder.setGoal(null) + bot.stopDigging() +} + +const load = (config) => { + cfg = config + bot = cfg.bot + cfg.move = { + // auto: true, + canDig: false, + // list: ["hello", "wassup"], + quiet: !!cfg.quiet, + movements: [] + } + + pathfinder = bot.pathfinder || bot.loadPlugin(require('mineflayer-pathfinder').pathfinder) + + // initMoves(bot, mcData) + setTimeout(initMoves, 500, bot) + + // bot.loadPlugin(pathfinder) + + // bot.on('time', hello) + +} + +const unload = () => { + // TODO stop pathfinding maybe? +} + +module.exports = { load, unload, stop, initMoves, moveNear, follow } \ No newline at end of file