回退:移除 1.1.4+ 引入的回城自救/接壤校验等寻路改动(导致玩家原地不动),恢复 1.1.3 的寻路行为。 修复错位:Baritone 自带 GoalXZ 容差为 0,精确到区块中心单格,中心不可达时玩家停在相邻区块造成目标错位与反复寻路。新增 ChunkGoal,完成条件改为「玩家脚下方块落在目标区块内」,与 playerChunk.equals(target) 判定一致。
89 行
3.0 KiB
Java
89 行
3.0 KiB
Java
/*
|
|
* 本文件由 autostore-1.0-SNAPSHOT.jar 反编译并整理而来(CFR 0.152),
|
|
* 混淆名已替换为 Minecraft 1.21.4 Yarn 可读映射,并补充中文注释。
|
|
*/
|
|
package autostore.client.bridge;
|
|
|
|
import baritone.api.BaritoneAPI;
|
|
import baritone.api.IBaritone;
|
|
import baritone.api.Settings;
|
|
import autostore.client.config.ExpansionConfig;
|
|
import autostore.client.territory.ChunkPos;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
|
|
/**
|
|
* Baritone API 封装(桥接层)。
|
|
*
|
|
* <p>将模组对 Baritone 寻路机器人的调用集中在此类中,包括:应用寻路行为配置、
|
|
* 前往目标区块、取消寻路、查询寻路状态等。所有调用都做了空安全保护,
|
|
* 当 Baritone 未加载时相关操作会安全地静默失败。</p>
|
|
*/
|
|
@Environment(EnvType.CLIENT)
|
|
public final class BaritoneBridge {
|
|
|
|
/**
|
|
* 将模组配置同步到 Baritone 的全局设置。
|
|
*
|
|
* @param config 扩地配置
|
|
*/
|
|
public void applyConfig(ExpansionConfig config) {
|
|
Settings settings = BaritoneAPI.getSettings();
|
|
settings.allowSprint.value = config.allowSprint;
|
|
settings.allowBreak.value = config.allowBreak;
|
|
settings.allowPlace.value = config.allowPlace;
|
|
settings.allowParkour.value = config.allowJump;
|
|
settings.avoidance.value = config.avoidMobs;
|
|
}
|
|
|
|
/**
|
|
* 让 Baritone 寻路前往指定区块(以“到达区块内”为完成条件)。
|
|
*
|
|
* @param chunk 目标区块
|
|
*/
|
|
public void pathTo(ChunkPos chunk) {
|
|
IBaritone baritone = this.primary();
|
|
if (baritone == null) {
|
|
return;
|
|
}
|
|
// 使用自定义 ChunkGoal:完成条件为“玩家脚下方块落在目标区块内”,
|
|
// 与控制器 playerChunk.equals(target) 的判定一致。避免 Baritone 自带
|
|
// GoalXZ(容差 0,精确到区块中心单格)在中心不可达时停在相邻区块,
|
|
// 造成目标区块错位与反复寻路。
|
|
baritone.getCustomGoalProcess().setGoalAndPath(new ChunkGoal(chunk));
|
|
}
|
|
|
|
/** 强制取消当前寻路任务。 */
|
|
public void cancel() {
|
|
IBaritone baritone = this.primary();
|
|
if (baritone == null) {
|
|
return;
|
|
}
|
|
baritone.getPathingBehavior().forceCancel();
|
|
}
|
|
|
|
/** @return 当前是否正在寻路 */
|
|
public boolean isPathing() {
|
|
IBaritone baritone = this.primary();
|
|
return baritone != null && baritone.getPathingBehavior().isPathing();
|
|
}
|
|
|
|
/** @return Baritone 是否可用(已加载并存在主实例) */
|
|
public boolean isAvailable() {
|
|
return this.primary() != null;
|
|
}
|
|
|
|
/**
|
|
* 获取 Baritone 主实例;加载失败或异常时返回 null。
|
|
*
|
|
* @return 主 Baritone 实例,或 null
|
|
*/
|
|
private IBaritone primary() {
|
|
try {
|
|
return BaritoneAPI.getProvider().getPrimaryBaritone();
|
|
} catch (Throwable ignored) {
|
|
return null;
|
|
}
|
|
}
|
|
}
|