38 lines
1.4 KiB
JavaScript
38 lines
1.4 KiB
JavaScript
// This example uses promises instead of events like "goal_reached" for a cleaner look
|
|
|
|
const mineflayer = require('mineflayer')
|
|
const pathfinder = require('mineflayer-pathfinder').pathfinder
|
|
const Movements = require('mineflayer-pathfinder').Movements
|
|
const { GoalNear } = require('mineflayer-pathfinder').goals
|
|
const bot = mineflayer.createBot({ username: 'Player' })
|
|
|
|
// Load plugins
|
|
bot.loadPlugin(pathfinder)
|
|
|
|
bot.once('spawn', () => {
|
|
// Set pathfinder movements
|
|
const defaultMove = new Movements(bot)
|
|
bot.pathfinder.setMovements(defaultMove)
|
|
|
|
bot.on('chat', async (username, message) => {
|
|
// If username is the same as the Bot's username, don't continue
|
|
if (username === bot.username) return
|
|
|
|
// Only continue when the message is "come"
|
|
if (message === 'come') {
|
|
const target = bot.players[username] ? bot.players[username].entity : null
|
|
|
|
// If Player doesn't exist, don't continue
|
|
if (!target) return bot.chat("I don't see you !")
|
|
|
|
// Await pathfinder to complete the goal, then move to bot.chat and print "I've arrived !"
|
|
bot.pathfinder.goto(new GoalNear(target.position.x, target.position.y, target.position.z, 1)).then(announceArrived)
|
|
}
|
|
})
|
|
|
|
function announceArrived () {
|
|
const botPosition = bot.entity.position
|
|
bot.chat(`I've arrived, I'm at ${botPosition.x}, ${botPosition.y}, ${botPosition.z}!`)
|
|
}
|
|
})
|