npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@miner-org/mineflayer-baritone

v4.2.3

Published

Minecraft pathfinder made in javascript using mineflayer and node js.

Readme

🏃‍♂️ Mineflayer Pathfinder

Overview

An advanced pathfinding plugin for Mineflayer that includes:

  • Smart Pathfinding with A* algorithm
  • Waypoint System for long-distance navigation
  • Parkour Moves (jumps, gaps, angled jumps)
  • Breaking Blocks (intelligent block breaking)
  • Placing Blocks (scaffolding and towering)
  • Swimming (surface, underwater, entering/exiting water)
  • Ladder Climbing (up and down)
  • Partial Path Handling (automatic replanning)

Bot navigates efficiently with adaptive strategies for different terrain types!


📦 Installation

To install, run:

npm install @miner-org/mineflayer-baritone

🚀 Quick Start

const mineflayer = require("mineflayer");
const pathfinder = require("@miner-org/mineflayer-baritone").loader;
const goals = require("@miner-org/mineflayer-baritone").goals;
const { Vec3 } = require("vec3");

const bot = mineflayer.createBot({ username: "PathfinderBot" });

bot.loadPlugin(pathfinder);

bot.once("spawn", async () => {
  await bot.waitForChunksToLoad();

  // Simple navigation
  const goal = new goals.GoalExact(new Vec3(100, 65, 100));
  await bot.ashfinder.goto(goal);

  console.log("Goal reached!");
});

🎯 Navigation Methods

Basic Navigation

// Direct pathfinding (best for short distances < 75 blocks)
await bot.ashfinder.goto(goal);

Smart Navigation (Recommended)

// Automatically chooses between direct pathfinding and waypoints
await bot.ashfinder.gotoSmart(goal, {
  waypointThreshold: 75, // Use waypoints for distances > 75 blocks
  forceWaypoints: false, // Force waypoint usage
  forceAdaptive: true, // Use smart waypoint system with failure handling
});

Waypoint Navigation

// Explicitly use waypoint system for long distances
await bot.ashfinder.gotoWithWaypoints(goal, 75);

🎯 Available Goals

const { Vec3 } = require("vec3");
const { goals } = require("@miner-org/mineflayer-baritone");

// Go to exact coordinates
const goalExact = new goals.GoalExact(new Vec3(100, 65, 100));
await bot.ashfinder.goto(goalExact);

// Get near a position (within distance)
const goalNear = new goals.GoalNear(new Vec3(100, 65, 100), 3);
await bot.ashfinder.goto(goalNear);

// Reach a specific Y-level
const goalY = new goals.GoalYLevel(64);
await bot.ashfinder.goto(goalY);

// Enter a region (between two corners)
const region = new goals.GoalRegion(new Vec3(0, 60, 0), new Vec3(10, 70, 10));
await bot.ashfinder.goto(region);

// Stay away from a dangerous spot
const avoidCreeper = new goals.GoalAvoid(new Vec3(50, 64, 50), 10, bot);
await bot.ashfinder.goto(avoidCreeper);

// Reach any of multiple goals
const composite = new goals.GoalComposite(
  [
    new goals.GoalExact(new Vec3(100, 65, 100)),
    new goals.GoalExact(new Vec3(120, 65, 120)),
  ],
  "any"
);
await bot.ashfinder.goto(composite);

// Only XZ position matters (ignore Y)
const goalXZ = new goals.GoalXZ(new Vec3(150, 70, 150));
await bot.ashfinder.goto(goalXZ);

// Get near XZ coordinates
const nearXZ = new goals.GoalXZNear(new Vec3(180, 64, 180), 3);
await bot.ashfinder.goto(nearXZ);

// Look at a block
const lookAtBlock = new goals.GoalLookAtBlock(new Vec3(90, 65, 90), bot.world, {
  reach: 5,
});
await bot.ashfinder.goto(lookAtBlock);

// Avoid a specific goal
const notThatBlock = new goals.GoalInvert(
  new goals.GoalExact(new Vec3(200, 64, 200))
);
await bot.ashfinder.goto(notThatBlock);

⚙️ Configuration

// Enable/disable features
bot.ashfinder.config.parkour = true; // Allow parkour jumps
bot.ashfinder.config.breakBlocks = true; // Allow breaking blocks
bot.ashfinder.config.placeBlocks = true; // Allow placing blocks
bot.ashfinder.config.swimming = true; // Allow swimming

// Set limits
bot.ashfinder.config.maxFallDist = 3; // Max safe fall distance
bot.ashfinder.config.maxWaterDist = 256; // Max water distance

// Configure blocks
bot.ashfinder.config.disposableBlocks = [
  "dirt",
  "cobblestone",
  "stone",
  "andesite",
];

bot.ashfinder.config.blocksToAvoid = ["crafting_table", "chest", "furnace"];

// Timeout settings
bot.ashfinder.config.thinkTimeout = 30000; // 30 seconds

// Enable debug mode
bot.ashfinder.debug = true;

🎮 Events

// Path started
bot.ashfinder.on("pathStarted", ({ path, status, goal }) => {
  console.log(`Path started with ${path.length} nodes`);
});

// Goal reached
bot.ashfinder.on("goal-reach", (goal) => {
  console.log("Successfully reached goal!");
});

// Partial goal reached
bot.ashfinder.on("goal-reach-partial", (goal) => {
  console.log("Reached end of partial path, replanning...");
});

// Waypoint reached
bot.ashfinder.on("waypoint-reached", ({ waypoint, index }) => {
  console.log(`Reached waypoint ${index}`);
});

// Stopped
bot.ashfinder.on("stopped", () => {
  console.log("Pathfinding stopped");
});

🏊 Advanced Features

Swimming

The bot can navigate through water with proper vertical control:

// Swimming is enabled by default
bot.ashfinder.config.swimming = true;

// Navigate to underwater location
const underwaterGoal = new goals.GoalExact(new Vec3(100, 50, 100));
await bot.ashfinder.goto(underwaterGoal);

Ladder Climbing

The bot can climb ladders and vines:

// Ladder climbing is automatic when pathfinding
const highPlace = new goals.GoalExact(new Vec3(100, 100, 100));
await bot.ashfinder.goto(highPlace);

Block Breaking & Placing

// Enable both features
bot.ashfinder.enableBreaking();
bot.ashfinder.enablePlacing();

// Navigate through obstacles
const throughWall = new goals.GoalExact(new Vec3(100, 65, 100));
await bot.ashfinder.goto(throughWall);

// Disable if needed
bot.ashfinder.disableBreaking();
bot.ashfinder.disablePlacing();

Stop Navigation

// Stop current pathfinding
bot.ashfinder.stop();

🐛 Known Issues

  • Parkour: Can occasionally get stuck on complex parkour sequences. For short distances, consider disabling parkour if issues occur.
  • Water exit: Sometimes needs multiple attempts to climb out of water onto land.
  • Long distances: While the waypoint system helps, very long paths (1000+ blocks) may take time to compute.

🔧 Troubleshooting

Bot gets stuck

// Enable debug mode to see what's happening
bot.ashfinder.debug = true;

// Reduce complexity
bot.ashfinder.config.parkour = false;
bot.ashfinder.config.breakBlocks = false;

// Use waypoints for long distances
await bot.ashfinder.gotoSmart(goal);

Path not found

// Check if blocks can be broken/placed
bot.ashfinder.config.breakBlocks = true;
bot.ashfinder.config.placeBlocks = true;

// Increase thinking timeout
bot.ashfinder.config.thinkTimeout = 60000; // 60 seconds

// Try a different goal type
const nearGoal = new goals.GoalNear(targetPos, 5);

📚 API Reference

Methods

  • goto(goal) - Navigate to a goal using direct pathfinding
  • gotoSmart(goal, options) - Smart navigation with automatic waypoint selection
  • gotoWithWaypoints(goal, threshold) - Explicitly use waypoint navigation
  • generatePath(goal, excludedPositions) - Generate a path without executing it
  • stop() - Stop current pathfinding
  • enableBreaking() / disableBreaking() - Toggle block breaking
  • enablePlacing() / disablePlacing() - Toggle block placing

Properties

  • bot.ashfinder.config - Configuration object
  • bot.ashfinder.debug - Enable/disable debug logging
  • bot.ashfinder.stopped - Check if pathfinding is stopped

🤝 Contributing

Pull requests are welcome! If you encounter issues or have suggestions:

  1. Check existing issues on GitHub
  2. Create a detailed bug report with:
    • Minecraft version
    • Bot configuration
    • Steps to reproduce
    • Expected vs actual behavior

📝 License

ISC License


🙏 Credits

Built on top of Mineflayer and inspired by Baritone.