Baritone:强大的Minecraft自动寻路与自动化机器人
Baritone是一个用于Minecraft的高级路径规划系统,提供自动寻路、采矿、建造等强大功能。它采用优化的A*算法,支持长距离路径计算和实时环境适应。
功能特性
- 智能路径规划:使用优化的A*算法进行高效路径计算,支持长距离路径分段计算
- 方块交互:智能考虑方块破坏与放置,根据工具配置选择最优策略
- 环境适应:支持梯子、藤蔓、门、栅栏门等多种环境交互
- 区块缓存:使用紧凑的2位内部表示缓存区块,提升长距离路径性能
- 坠落保护:智能坠落控制,支持水桶缓降等高级技巧
- 多版本支持:兼容Minecraft 1.12.2到1.21.x等多个版本
- 模块化架构:提供完整的API接口,支持功能扩展
安装指南
作为Mod安装
最简单的安装方式是将Baritone作为Forge/Neoforge/Fabric mod安装:
- 下载对应Minecraft版本的Baritone release
- 将jar文件放入mods文件夹
- 启动游戏即可
版本对应关系
| Minecraft版本 | Baritone版本 |
|---|---|
| 1.12.x | v1.2 |
| 1.13.x | v1.3 |
| 1.14.x | v1.4 |
| 1.15.x | v1.5 |
| 1.16.x | v1.6 |
| 1.17.x | v1.7 |
| 1.18.x | v1.8 |
| 1.19.x | v1.9 |
| 1.20.x | v1.10 |
| 1.21.x | v1.11+ |
使用说明
基本命令
Baritone的聊天控制前缀默认为#,在Impact中也可以使用.b前缀。
常用命令示例:
// 设置目标并开始路径规划
#goal x y z
#path
// 向面对的方向移动1000格
#thisway 1000
#path
// 挖掘特定方块
#mine diamond_ore
// 跟随其他玩家
#follow playerName
API使用示例
// 获取Baritone实例
IBaritone baritone = BaritoneAPI.getProvider().getPrimaryBaritone();
// 设置自定义目标
Goal goal = new GoalBlock(targetPos);
baritone.getCustomGoalProcess().setGoalAndPath(goal);
// 监听路径事件
baritone.getGameEventHandler().registerEventListener(new AbstractGameEventListener() {
@Override
public void onPathEvent(PathEvent event) {
System.out.println("Path event: " + event);
}
});
核心代码
路径行为控制
/**
* 路径行为接口,控制路径的执行和状态
*/
public interface IPathingBehavior extends IBehavior {
// 获取当前路径的预估剩余时间
Optional<Double> estimatedTicksToGoal();
// 获取当前路径目标
Goal getGoal();
// 检查是否正在执行路径
boolean isPathing();
// 取消所有路径操作
boolean cancelEverything();
// 获取当前路径执行器
IPathExecutor getCurrent();
}
目标系统实现
/**
* 具体方块目标实现
*/
public class GoalBlock implements Goal, IGoalRenderPos {
public final int x, y, z;
public GoalBlock(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
@Override
public boolean isInGoal(int x, int y, int z) {
return x == this.x && y == this.y && z == this.z;
}
@Override
public double heuristic(int x, int y, int z) {
int xDiff = x - this.x;
int yDiff = y - this.y;
int zDiff = z - this.z;
return calculate(xDiff, yDiff, zDiff);
}
public static double calculate(double xDiff, int yDiff, double zDiff) {
double heuristic = 0;
heuristic += GoalYLevel.calculate(0, yDiff);
heuristic += GoalXZ.calculate(xDiff, zDiff);
return heuristic;
}
}
命令系统架构
/**
* 命令接口,所有Baritone命令都实现此接口
*/
public interface ICommand extends Helper {
// 执行命令
void execute(String label, IArgConsumer args) throws CommandException;
// 标签补全
Stream<String> tabComplete(String label, IArgConsumer args) throws CommandException;
// 获取命令描述
String getShortDesc();
List<String> getLongDesc();
// 获取命令名称
List<String> getNames();
}
世界缓存系统
/**
* 世界缓存接口,优化长距离路径性能
*/
public interface ICachedWorld {
// 获取区域数据
ICachedRegion getRegion(int regionX, int regionZ);
// 将区块加入打包队列
void queueForPacking(LevelChunk chunk);
// 检查位置是否已缓存
boolean isCached(int blockX, int blockZ);
// 搜索特定方块位置
ArrayList<BlockPos> getLocationsOf(String block, int maximum,
int centerX, int centerZ, int maxRegionDistanceSq);
}
Baritone通过模块化的架构设计,提供了高度可扩展的自动化解决方案。其核心算法经过深度优化,能够在复杂的Minecraft环境中实现高效的路径规划和执行,是Minecraft自动化领域的标杆项目。