Deprecated package : this library is a simple example of pathfinding and works well for the simple cases, you can study its code. However if you need something more robust, we advise to use https://github.com/Karang/mineflayer-pathfinder instead
A library to help your mineflayer bot navigate around the 3D world using the A* algorithm.
See https://github.com/superjoe30/mineflayer/
const mineflayer = require('mineflayer');
const navigatePlugin = require('mineflayer-navigate')(mineflayer);
const bot = mineflayer.createBot({ username: 'Player' });
// install the plugin
navigatePlugin(bot);
// optional configuration
bot.navigate.blocksToAvoid[132] = true; // avoid tripwire
bot.navigate.blocksToAvoid[59] = false; // ok to trample crops
bot.navigate.on('pathFound', function (path) {
bot.chat("found path. I can get there in " + path.length + " moves.");
});
bot.navigate.on('cannotFind', function (closestPath) {
bot.chat("unable to find path. getting as close as possible");
bot.navigate.walk(closestPath);
});
bot.navigate.on('arrived', function () {
bot.chat("I have arrived");
});
bot.navigate.on('interrupted', function() {
bot.chat("stopping");
});
bot.on('chat', function(username, message) {
// navigate to whoever talks
if (username === bot.username) return;
const target = bot.players[username].entity;
if (message === 'come') {
bot.navigate.to(target.position);
} else if (message === 'stop') {
bot.navigate.stop();
}
});
Finds a path to the specified location and goes there.
point
- the block you want your feet to be standing onoptions
- See bot.navigate.findPathSync
Emitted from bot.navigate
when a partial path is found. path
is an array
of nodes.
Emitted from bot.navigate
when a complete path is found. path
is an array
of nodes.
Emitted when a path cannot be found.
closestPoint
- a vec3
instance - the closest point that you could
navigate to.Emitted when the destination is reached.
Emitted when navigation has been aborted.
Aborts an in progress navigation job.
Finds a path to end
. Can be used to see if it is possible to navigate to a
particular point.
Returns an object that looks like:
{
status: 'success', // one of ['success', 'noPath', 'timeout', 'tooFar']
path: [startPoint, point1, point2, ..., endPoint],
}
The value of status
has several meanings:
success
- path
is an array of points that can be passed to walk()
.noPath
- there is no path to end
. Try a larger endRadius
. path
is the path to the closest reachable point to end.timeout
- no path could be found in the allotted time. Try a larger
endRadius
or timeout
. path
is the path to the closest reachable
point to end that could be found in the allotted time.tooFar
- end
is too far away, so path
contains the path to walk 100
meters in the general direction of end
.Parameters:
end
- the block you want your feet to be standing onoptions
- optional parameters which come with sensible defaults
isEnd
- function(node) - passed on to the A* library. node.point
is
a vec3 instance.endRadius
- used for default isEnd
. Effectively defaults to 0.timeout
- passed on to the A* library. Default 10 seconds.tooFarThreshold
- if end
is greater than tooFarThreshold
, this
function will search instead for a path to walk 100 meters in the general
direction of end.Note: does not emit events
Walks the bot along the path and calls the callback function when it has arrived.
Call bot.navigate.stop()
to interrupt walking.
path
- array of points to be navigated.callback(stopReason)
- (optional) - called when the bot has arrived.
stopReason
can be: ['obstructed', 'arrived', 'interrupted']arrived
twice. (thanks Benjamin Grosse)'obstructed'
stopReason
when it happens.bot.navigate.stop()
is called
elsewhere. Also it now has a stopReason
argument.endRadius
too low (thanks vogonistic)bot.navigate.findPathSync(end, [options])
bot.navigate.walk(path, [callblack])
cannotFind
event now has closestPoint
parameter, the closest point it
could get tobot.navigate.blocksToAvoid
is a map of block id to boolean value which
tells whether to avoid the block. comes with sensible defaults like
avoiding fire and crops.