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
- Seebot.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
- avec3
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 towalk()
.noPath
- there is no path toend
. Try a largerendRadius
.path
is the path to the closest reachable point to end.timeout
- no path could be found in the allotted time. Try a largerendRadius
ortimeout
.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, sopath
contains the path to walk 100 meters in the general direction ofend
.
Parameters:
end
- the block you want your feet to be standing onoptions
- optional parameters which come with sensible defaultsisEnd
- function(node) - passed on to the A* library.node.point
is a vec3 instance.endRadius
- used for defaultisEnd
. Effectively defaults to 0.timeout
- passed on to the A* library. Default 10 seconds.tooFarThreshold
- ifend
is greater thantooFarThreshold
, 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']
- depends on vec3 directly
- don't emit
arrived
twice. (thanks Benjamin Grosse)
- walk: detect being obstructed and call callback with
'obstructed'
stopReason
when it happens.
- walk: callback is still called if
bot.navigate.stop()
is called elsewhere. Also it now has astopReason
argument.
- fix default
endRadius
too low (thanks vogonistic)
- recommended API is now callback based (thanks vogonistic)
- add
bot.navigate.findPathSync(end, [options])
- add
bot.navigate.walk(path, [callblack])
- add 'interrupted' event
- fix bot looking at its feet while walking
- possible speed improvement by using native array methods
cannotFind
event now hasclosestPoint
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.
- fix pathfinding very far away