由 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 语法自检通过。
52 行
1.3 KiB
JavaScript
52 行
1.3 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* 语法自检脚本:递归 `require` 所有源码文件,捕获语法错误与模块加载错误。
|
|
*
|
|
* 之所以不引入 ESLint,是为了不额外增加依赖与配置;
|
|
* 本脚本已能覆盖「语法错误 / 顶层抛异常 / 循环依赖缺失导出」这类最常见问题。
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const ROOT = path.join(__dirname, '..', 'src');
|
|
const failures = [];
|
|
let checked = 0;
|
|
|
|
/**
|
|
* 递归遍历目录下的所有 .js 文件。
|
|
* @param {string} dir
|
|
* @returns {string[]}
|
|
*/
|
|
function walk(dir) {
|
|
const out = [];
|
|
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
const full = path.join(dir, entry.name);
|
|
if (entry.isDirectory()) {
|
|
if (entry.name === 'node_modules' || entry.name === 'public') continue;
|
|
out.push(...walk(full));
|
|
} else if (entry.name.endsWith('.js')) {
|
|
out.push(full);
|
|
}
|
|
}
|
|
return out;
|
|
}
|
|
|
|
for (const file of walk(ROOT)) {
|
|
checked++;
|
|
try {
|
|
require(file);
|
|
} catch (err) {
|
|
failures.push(`${path.relative(ROOT, file)}: ${err.message}`);
|
|
}
|
|
}
|
|
|
|
if (failures.length > 0) {
|
|
console.error(`语法自检失败(${failures.length}/${checked}):`);
|
|
for (const failure of failures) console.error(' - ' + failure);
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`语法自检通过:${checked} 个文件`);
|