由 Fabric 客户端模组 AutoStore v1.3.1 重构为独立 Node.js 机器人,无需游戏客户端。 核心实现: - 领土数据:Dynmap markers.json 拉取解析(奇偶填充识别国中飞地)、SimpCore 开放 API 第四数据源、 带缓存击穿的时间戳请求与内容未变化跳过解析 - 扩地规划:四种策略(方形外扩 / 区域 S 形扫描 / 玩家周围 / 绕国一圈)逐行对照移植, 接壤判定只算己方领土,飞地优先填补 - 扩地状态机:规划→寻路→等待开垦→成功/失败→下一目标→完成,含超时重试、 往边上走两步自救、连续超时回城、耐久保护回城 - 生存辅助:自动进食、自动攻击(豁免中立生物)、自动游泳防溺水、自动用船(默认关闭) - 寻路:Baritone → mineflayer-pathfinder,高度偏好用包装 Goal 等价移植 Grim 反作弊合规层(新增,核心差异点): - 旋转不超前:接管 bot.look 按 ≤8.6°/tick 推进朝向,消除 mineflayer 「本地朝向瞬间跳变、数据包滞后补发」导致的 Prediction 分歧 - 攻击三重校验:朝向已同步 + 距离 ≤3.0 格 + 视线可达 + 攻击冷却 + 非骑乘/进食 - 动作互斥:拦下疾跑+潜行、疾跑+使用物品等原版不可能出现的组合 - 物理参数只读自检 + 寻路约束(禁挖/禁放/禁跑酷/禁搭塔/限下落/绕开水域) 网页控制台(新增): - 状态面板、Canvas 领土地图(缩放/平移/图层)、分组配置表单、实时日志流 - REST + WebSocket 接口,支持 WEB_TOKEN 令牌鉴权 修复: - containsFuzzy 只取固定长度前缀的末行编辑距离,导致完全相同的子串也匹配不上 - 占领去重依赖 Set.add 返回值(JS 中恒为真),导致同一区块被重复计数 - 非法枚举值不再钳制到最近边界,改为回退默认值 测试:154 个用例,npm test 全绿;npm run check 语法自检通过。
3.8 KiB
3.8 KiB
更新日志
[1.0.0] - 2026-02-14
由 Fabric 客户端模组 AutoStore v1.3.1 重构为 Node.js + mineflayer 机器人,UI 改为网页控制台, 并新增 Grim 反作弊合规层。
新增
- Grim 反作弊合规层(
src/bot/grimCompat.js)- 旋转不超前:接管
bot.look,把朝向按 ≤ 8.6°/tick 逐步推进,保证本地朝向与服务端已收到的朝向一致, 消除 mineflayer「本地朝向瞬间跳变、数据包滞后补发」导致的 Prediction 分歧 - 攻击三重校验:朝向已同步 + 距离 ≤ 3.0 格 + 视线可达 + 攻击冷却 + 非骑乘/进食状态
- 动作互斥:拦下疾跑+潜行、疾跑+使用物品等原版不可能出现的组合(MultiActions)
- 物理参数只读自检:核对
bot.physics关键常量、physicsEnabled、游戏模式、鞘翅状态 - 寻路约束:默认禁止挖方块 / 放方块 / 跑酷 / 1×1 搭塔,限制最大下落高度,推高液体代价优先绕开水域
- 旋转不超前:接管
- 网页控制台(
src/web/)- 实时状态面板(连接 / 任务状态机 / 领土数据源 / Grim 合规)
- Canvas 领土地图:滚轮缩放、拖拽平移、图层开关、回到玩家、全图适配
- 7 个分组的配置表单,保存即生效
- 实时日志流、日志导出、手动指令发送
- REST + WebSocket 接口,支持
WEB_TOKEN令牌鉴权(定时安全比较)
- SimpCore 开放 API 第四数据源:低频轮询己方邦国领土明细 + 王城兜底,支持手动拉取全服领土
- 开垦时段可配置:
enforceClaimTime/claimStartHour/claimEndHour(原版硬编码 11:00-22:00) - 战斗筛选可配置:
combat分组(索敌半径、末影人 / 蜘蛛 / 猪灵开关、高危生物跳过) - 断线自动重连与登录 / 注册指令模板(密码从
.env读取,支持{password}占位符) - 154 个测试用例,覆盖坐标编解码、领土模型、规划器、数据解析、合规层、状态机、Web 接口
变更
- 寻路引擎从 Baritone 换成 mineflayer-pathfinder;高度偏好(
GoalXZAltitude)用包装 Goal 的heuristic = max(0, base - weight × y)等价移植 - 区块坐标内部表示从对象改为整数键(
x × 2^26 + z),避免数万区块产生海量临时对象 - 扩地状态机、规划策略、超时重试与回城逻辑与原版逐行对照移植,行为保持一致
修复
- 修正
containsFuzzy的模糊匹配:原实现只取固定长度前缀的末行编辑距离, 导致containsFuzzy('开垦中 50%', '开垦中', 0)返回false(完全相同的子串都匹配不上)。 现按注释语义改为「存在编辑距离 ≤ maxEdits 的子串」 - 修正占领去重:原实现依赖
Set.add的返回值判断重复,而 JS 的Set.add恒返回 Set 对象, 会导致同一区块被重复计数 - 修正非法枚举值的处理:策略等枚举字段不再「钳制到最近边界」(把非法的 99 静默变成策略 4), 而是回退到默认值
已知限制
- 自动用船默认关闭:mineflayer 使用的 prismarine-physics 没有载具物理,上船后本地物理预测被关闭,
位置完全由服务端下发的船实体位置决定,Grim 的 Vehicle 检查风险高。
用船逻辑已完整实现,需显式开启
waterMode: 'boat'+autoBoat: true - 末影人与蜘蛛默认不打:mineflayer 拿不到可靠的「是否被激怒」与「环境亮度」信息,
宁可漏打也不误打;可用
combat.attackEnderman/combat.attackSpiders放开 - 监守者 / 末影龙 / 凋灵默认跳过:原版会攻击它们,但那基本等于自杀