Package Exports
- mineflayer-pathfinder
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (mineflayer-pathfinder) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Mineflayer-pathfinder
Pathfinding plugin. This is still a work in progress, feel free to contribute by making suggestions.
Install
npm install mineflayer-pathfinderVideo Tutorial
For a video tutorial explaining the usage of mineflayer-pathfinder, you can watch the following Youtube videos:
Example
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' })
bot.loadPlugin(pathfinder)
bot.once('spawn', () => {
const mcData = require('minecraft-data')(bot.version)
const defaultMove = new Movements(bot, mcData)
bot.on('chat', function(username, message) {
if (username === bot.username) return
const target = bot.players[username] ? bot.players[username].entity : null
if (message === 'come') {
if (!target) {
bot.chat('I don\'t see you !')
return
}
const p = target.position
bot.pathfinder.setMovements(defaultMove)
bot.pathfinder.setGoal(new GoalNear(p.x, p.y, p.z, 1))
}
})
})Features
- Optimized and modernized A* pathfinding
- Complexe goals can be specified (inspired by baritone goals )
- Customizable movements generator
- Each movement can have a different cost
- Can break/place blocks as part of its deplacement
- Automatically update path when environment change
- Long distance paths
- Can swim
API
Considering there are a lot of deep changes that are being worked on, it could take some time before it's done
Also, for now, there is only the pathfinder module, movements and goals still need to be done
Functions:
bot.pathfinder.goto(goal, callback?)
Returns a Promise. Resolves when the goal is reached. Rejects on error.
goal- Goal instancecallback<function>- (Optional) The callback is passed two arguments(err, result), where error isnullon success.
bot.pathfinder.bestHarvestTool(block)
Returns the best harvest tool in the inventory for the specified block
Returns-Iteminstance ornullblock- Block instance
bot.pathfinder.getPathTo(movements, goal, done, timeout)
Returns- The pathmovements- Movements instancegoal- Goal instancetimeout- number (optional, defaultbot.pathfinder.thinkTimeout)
bot.pathfinder.setGoal(Goal, dynamic)
goal- Goal instancedynamic- boolean (optional, default false)
bot.pathfinder.setMovements(movements)
Assigns the movements config
movements- Movements instance
bot.pathfinder.stop()
Stops path finding when its save to stop or after the bot encountered an error while path finding. To force stop use bot.pathfinder.setGoal(null). Emits path_stop when stopped.
bot.pathfinder.isMoving()
A function that checks if the bot is currently moving.
Returns- boolean
bot.pathfinder.isMining()
A function that checks if the bot is currently mining blocks.
Returns- boolean
bot.pathfinder.isBuilding()
A function that checks if the bot is currently placing blocks.
Returns- boolean
Properties:
bot.pathfinder.thinkTimeout
Think Timeout in milliseconds
Default-5000
bot.pathfinder.tickTimeout
How many ms per tick are allocated to thinking
Default-40
bot.pathfinder.searchRadius
The search limiting radius, in blocks, if -1 the search is not limited by distance.
Default--1
Events:
goal_reached
Called when the goal has been reached. Is not called for dynamic goals.
path_update
Called whenever the path is recalculated. Status may be:
successa path has been foundpartiala partial path has been found, computations will continue next ticktimeouttimed outnoPathno path was found
goal_updated
Called whenever a new goal is assigned to the pathfinder.
path_reset
Called when the path is reset, with a reason:
goal_updatedmovements_updatedblock_updatedchunk_loadedgoal_moveddig_errorno_scaffolding_blocksplace_errorstuck
path_stop
Called when the pathing has been stopped by bot.pathfinder.stop()
Goals:
GoalBlock(x, y, z)
One specific block that the player should stand inside at foot level
x- Integery- Integerz- Integer
GoalNear(x, y, z, range)
A block position that the player should get within a certain radius of
x- Integery- Integerz- Integerrange- Integer
GoalXZ(x, z)
Useful for long-range goals that don't have a specific Y level
x- Integerz- Integer
GoalNearXZ(x, y, z, range)
Useful for finding builds that you don't have an exact Y level for, just an approximate X and Z level
x- Integerz- Integerrange- Integer
GoalY(y)
Get to y level
z- Integer
GoalGetToBlock(x, y, z)
Don't get into the block, but get directly adjacent to it. Useful for chests.
x- Integery- Integerz- Integer
GoalCompositeAny(Array?)
A composite of many goals, any one of which satisfies the composite. For example, a GoalCompositeAny of block goals for every oak log in loaded chunks would result in it pathing to the easiest oak log to get to
Array- Array of goals
GoalCompositeAll(Array?)
A composite of many goals, all of them needs to be satisfied.
Array- Array of goals
GoalInvert(goal)
Inverts the goal
goal- Goal to invert
GoalFollow(entity, range)
Follows an entity
entity- Entity instancerange- Integer
GoalPlaceBlock(pos, world, options)
Position the bot in order to place a block
pos- Vec3 the position of the placed blockworld- the world of the botoptions- object containing all optionals properties:range- maximum distance from the clicked facefaces- the directions of the faces the player can clickfacing- the direction the player must be facingfacing3D- boolean, facing is 3D (true) or 2D (false)half-toporbottom, the half that must be clicked

