针对「机器人一直在走、净位移却只有物理速度的 1/5」这个现象。 mineflayer 在 physics.js 里把 flags.hasHorizontalCollision 写成 undefined (源码注释还标着「1.21.3+」),位标志序列化后恒为 0 —— 而原版客户端在水平碰到 方块时会上报 1。机器人在崎岖地形上几乎一直在水平碰撞,却始终上报「没碰撞」, 正是反作弊 Prediction 最容易判错的形态:服务端按「该碰撞」预测、客户端说 「没碰撞」,于是被判异常并拉回。 物理引擎其实早已算出真实值(moveEntity 里给 entity.isCollidedHorizontally 赋值), 只是从没被发出去。现在在 _fixOutboundOnGround 里按真实值补上,由 grim.reportHorizontalCollision(默认开)控制。 实测依据(王城外山区,2 秒粒度采样 120 秒): - controls 几乎每 tick 都是 forward+sprint,velocity 约 0.2~3 格/秒; - 净位移只有 48.6 格 / 120 秒 = 0.405 格/秒,差额就是被服务端拉回的部分。 顺带把 _fixOutboundOnGround 拆成 _fixOnGroundFlag / _fixHorizontalCollisionFlag 两个职责单一的方法;控制台配置面板新增对应开关, packetStats.horizontalCollisionFixed 暴露补写次数。 测试 473 → 477。
40 行
1.0 KiB
JSON
40 行
1.0 KiB
JSON
{
|
|
"name": "autostore-bot",
|
|
"version": "1.10.0",
|
|
"description": "AutoStore Bot —— Minecraft 自动扩地机器人(mineflayer 重写版,多机器人挂机,Web 控制台,开拓日志,大地图,Grim 反作弊适配)",
|
|
"main": "src/index.js",
|
|
"scripts": {
|
|
"start": "node src/index.js",
|
|
"dev": "node --watch src/index.js",
|
|
"test": "node --test",
|
|
"check": "node scripts/check-syntax.js && node scripts/check-web-ids.js",
|
|
"deploy": "node scripts/deploy.js",
|
|
"ssh": "node scripts/ssh-helper.js"
|
|
},
|
|
"keywords": [
|
|
"minecraft",
|
|
"mineflayer",
|
|
"autostore",
|
|
"territory"
|
|
],
|
|
"author": "",
|
|
"license": "MIT",
|
|
"private": true,
|
|
"engines": {
|
|
"node": ">=18.0.0"
|
|
},
|
|
"dependencies": {
|
|
"chalk": "^4.1.2",
|
|
"dotenv": "^16.4.7",
|
|
"express": "^4.21.2",
|
|
"mineflayer": "^4.39.0",
|
|
"mineflayer-pathfinder": "^2.4.5",
|
|
"vec3": "^0.1.10",
|
|
"ws": "^8.18.0"
|
|
},
|
|
"devDependencies": {
|
|
"minecraft-data": "^3.102.3",
|
|
"ssh2": "^1.17.0"
|
|
}
|
|
}
|