v1.1.9: 增加运行时接壤校验与寻路失败监听,修复不接壤目标与大山寻路超时;新增日志导出
这个提交包含在:
@@ -7,8 +7,12 @@ package autostore.client.bridge;
|
||||
import baritone.api.BaritoneAPI;
|
||||
import baritone.api.IBaritone;
|
||||
import baritone.api.Settings;
|
||||
import baritone.api.event.events.PathEvent;
|
||||
import baritone.api.event.listener.AbstractGameEventListener;
|
||||
import autostore.client.config.ExpansionConfig;
|
||||
import autostore.client.territory.ChunkPos;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
|
||||
@@ -22,6 +26,25 @@ import net.fabricmc.api.Environment;
|
||||
@Environment(EnvType.CLIENT)
|
||||
public final class BaritoneBridge {
|
||||
|
||||
/**
|
||||
* 寻路事件回调:用于把 Baritone 的路径事件(如计算失败、到达目标)转发给控制器,
|
||||
* 使控制器能及时识别“目标不可达”并跳过,而不是傻等到超时。
|
||||
*/
|
||||
public interface PathListener {
|
||||
void onPathEvent(PathEvent event);
|
||||
}
|
||||
|
||||
/** 已注册的路径事件监听器集合(线程安全) */
|
||||
private final Set<PathListener> pathListeners = ConcurrentHashMap.newKeySet();
|
||||
/** 是否已向 Baritone 注册事件监听器(只注册一次) */
|
||||
private volatile boolean eventListenerRegistered;
|
||||
|
||||
/** 注册一个路径事件监听器;同时确保已向 Baritone 事件总线挂载转发器 */
|
||||
public void addPathListener(PathListener listener) {
|
||||
this.pathListeners.add(listener);
|
||||
this.primary();
|
||||
}
|
||||
|
||||
/**
|
||||
* 将模组配置同步到 Baritone 的全局设置。
|
||||
*
|
||||
@@ -75,12 +98,30 @@ public final class BaritoneBridge {
|
||||
|
||||
/**
|
||||
* 获取 Baritone 主实例;加载失败或异常时返回 null。
|
||||
* 首次成功获取时,向 Baritone 事件总线注册一个转发器,
|
||||
* 把路径事件分发给所有已注册的 {@link PathListener}。
|
||||
*
|
||||
* @return 主 Baritone 实例,或 null
|
||||
*/
|
||||
private IBaritone primary() {
|
||||
try {
|
||||
return BaritoneAPI.getProvider().getPrimaryBaritone();
|
||||
IBaritone baritone = BaritoneAPI.getProvider().getPrimaryBaritone();
|
||||
if (baritone != null && !this.eventListenerRegistered) {
|
||||
this.eventListenerRegistered = true;
|
||||
baritone.getGameEventHandler().registerEventListener(new AbstractGameEventListener() {
|
||||
@Override
|
||||
public void onPathEvent(PathEvent event) {
|
||||
for (PathListener listener : BaritoneBridge.this.pathListeners) {
|
||||
try {
|
||||
listener.onPathEvent(event);
|
||||
} catch (Throwable ignored) {
|
||||
// 单个监听器异常不影响其他监听器
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
return baritone;
|
||||
} catch (Throwable ignored) {
|
||||
return null;
|
||||
}
|
||||
|
||||
在新工单中引用
屏蔽一个用户