文件
AutoStore/src/main/java/autostore/client/bridge/GoalXZAltitude.java
T
lyizai bc86c26d1e v1.2.5: 高度偏好寻路(优先往高处走) + 寻路/重试前校验目标接壤 + 超时先走两步再传送
- 新增 GoalXZAltitude 寻路目标:启发式成本 = 水平距离 - 高度权重×y,y 越大优先级越高、y 越小施惩罚,引导寻路优先走高
- ExpansionConfig 新增 altitudePreference/altitudeWeight 配置(默认开/0.1),BaritoneBridge 按配置选择原生 GoalXZ 或高度偏好 Goal
- 寻路/重试前先检查目标区块是否仍与己方领土接壤(startPathing/retrySameTarget),不接壤立即跳过
- 寻路超时不再直接传送:重试耗尽后先往边上走两步自救(每轮重试原目标,最多 sideStepMaxRounds=3 轮),多轮无效才按连续超时阈值回城或切换目标
2026-08-21 17:02:43 +08:00

52 行
2.0 KiB
Java

/*
* 本文件由 autostore-1.0-SNAPSHOT.jar 反编译并整理而来(CFR 0.152),
* 混淆名已替换为 Minecraft 1.21.4 Yarn 可读映射,并补充中文注释。
*/
package autostore.client.bridge;
import baritone.api.pathing.goals.Goal;
import baritone.api.pathing.goals.GoalXZ;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
/**
* 带高度偏好的区块中心寻路目标。
*
* <p>到达判定与 Baritone 原生 {@link GoalXZ} 完全一致(水平到达目标区块中心即成功,
* 不约束高度,避免旧版 ChunkGoal 因高度硬约束误判“不可达”);
* 但启发式成本中加入高度项:y 越大启发成本越低(A* 更倾向走高处),
* y 越低成本越高(对走低处施惩罚),从而实现“寻路优先往高处走”。</p>
*/
@Environment(EnvType.CLIENT)
public final class GoalXZAltitude implements Goal {
/** 目标区块中心 X */
private final int x;
/** 目标区块中心 Z */
private final int z;
/** 高度偏好权重:每上升 1 格减少的启发成本;越大越明显偏向高处 */
private final double altitudeWeight;
public GoalXZAltitude(int x, int z, double altitudeWeight) {
this.x = x;
this.z = z;
this.altitudeWeight = altitudeWeight;
}
/** 到达判定与 GoalXZ 相同:水平坐标命中目标区块中心即算到达,不限制高度 */
@Override
public boolean isInGoal(int x, int y, int z) {
return this.x == x && this.z == z;
}
/**
* 启发式成本 = 水平基础成本(复用 GoalXZ 的对角线切比雪夫估计) - 高度奖励。
* y 越高启发值越小(优先级越高),y 越启发值越大(惩罚);clamp 非负避免破坏 A* 排序。
*/
@Override
public double heuristic(int x, int y, int z) {
double base = GoalXZ.calculate(x - this.x, z - this.z);
double altitudeCost = this.altitudeWeight * y;
return Math.max(0.0, base - altitudeCost);
}
}