文件
AutoStore/src/main/java/autostore/client/bridge/BaritoneBridge.java
T
Lyizai e8f6009a66 v1.1.4: 寻路优化(避矿洞+超时回城自救+不接壤目标校验)
- Baritone设置:限制下落高度(10格)与轻微挖方块惩罚,减少走入矿洞,同时保留峡谷/高山通行
- 寻路超时且玩家在地下时自动执行 /u return 回城自救,等待10秒传送后重新规划
- 新增目标有效性校验:寻路/等待/重试前实时校验目标是否仍与己方领土接壤,不接壤立即跳过并重新规划,修复走到不接壤区块死等bug
2026-08-17 12:27:38 +00:00

108 行
3.9 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 baritone.api.pathing.goals.Goal;
import baritone.api.pathing.goals.GoalXZ;
import autostore.client.config.ExpansionConfig;
import autostore.client.territory.ChunkPos;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.MinecraftClient;
/**
* 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;
// 减少走入地下矿洞:限制无水源时的下落高度,避免掉进深坑/矿洞。
// 放宽到 10 格,仍允许穿越峡谷、下坡等正常地形,同时避免掉入深坑
settings.maxFallHeightNoWater.value = 10;
// 轻微提高挖掘方块的额外代价,让寻路尽量绕行地面而非挖洞穿山,
// 但不会阻止必要挖掘(高山、峡谷等仍可通行)
settings.blockBreakAdditionalPenalty.value = 0.5;
}
/**
* 让 Baritone 寻路前往指定区块的中心。
*
* @param chunk 目标区块
*/
public void pathTo(ChunkPos chunk) {
IBaritone baritone = this.primary();
if (baritone == null) {
return;
}
// 使用 GoalXZ 前往区块中心:Baritone 的 GoalXZ 自带约 10 格容差,
// 只需到达区块中心附近即可,避免中心点不可达导致寻路卡死
baritone.getCustomGoalProcess().setGoalAndPath(new GoalXZ(chunk.centerBlockX(), chunk.centerBlockZ()));
}
/** 强制取消当前寻路任务。 */
public void cancel() {
IBaritone baritone = this.primary();
if (baritone == null) {
return;
}
baritone.getPathingBehavior().forceCancel();
}
/**
* 发送服务器聊天命令(如 /u return 回城),command 参数不含前导斜杠。
* 用于寻路超时后的回城自救,避免玩家被困在地下矿洞等位置。
*/
public void sendCommand(String command) {
MinecraftClient client = MinecraftClient.getInstance();
if (client == null || client.player == null || client.getNetworkHandler() == null) {
return;
}
client.getNetworkHandler().sendChatCommand(command);
}
/** @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;
}
}
}