基于 Mineflayer 的 Minecraft 机器人项目,包含地图画搭建、挂机迎宾、搬砖、杀怪等机器人,
以及一个统一网页控制台(manager.js)在浏览器里管理它们的启停与日志。
| 页面 | 地址 | 说明 |
|---|---|---|
| 机器人进程管理器 | http://localhost:8080/ | 启停/自动重启 afkbot、killaurabot、smartbot,实时日志,给机器人的 stdin 发指令 |
| 地图画控制台 | http://localhost:8080/painting | 上传投影、双账号搭建地图画、实时俯视建造图 |
两个页面共用一个端口(默认 8080),页面上有互相跳转的入口。
| 项目 | 要求 |
|---|---|
| Node.js | 建议 18 及以上(当前开发环境为 Node 26) |
| Java | 可选。只有 .litematic 无法直接解析、需要退回 Lite2Edit 转换时才用得到 |
| Minecraft 账号 | 各机器人使用的账号(正版 microsoft 或离线 offline),首次微软登录需要完成一次验证 |
| 服务器权限 | 地图画机器人需要创造飞行、开箱、放置权限;其它机器人按各自功能需要传送/领地权限 |
npm installnpm run webnpm run web 实际执行的是 package.json 里 scripts.web 指定的 node manager.js。
启动成功后终端会输出:
机器人统一控制台已启动
浏览器打开: http://localhost:8080
地图画控制台: http://localhost:8080/painting
管理的程序: afkbot.js, killaurabot.js, smartbot.js
改端口(默认 8080):
# PowerShell
$env:PORT = 8090
npm run web# CMD / bash
set PORT=8090 && npm run web说明:旧的
npm start(单机器人命令行入口)已经删除,统一用npm run web启动。
service/ 目录里提供了开机自启脚本,不需要管理员权限:
| 文件 | 作用 |
|---|---|
service/install-service.bat |
安装开机自启(优先创建计划任务,失败会自动放进"启动"文件夹),并立即启动一次 |
service/restart-manager.bat |
一键重启:先停掉 8080 上的控制台,再后台重新启动(改了 manager.js / painting.js 之后用它) |
service/uninstall-service.bat |
删除开机自启,并停掉 8080 端口上的控制台 |
service/status.bat |
查看自启项状态和 8080 端口占用 |
service/run-manager.bat |
手动启动(有窗口,方便看日志);service/run-manager-hidden.vbs 是无窗口版本 |
service/run-manager-silent.bat |
后台启动的实际执行脚本(run-manager-hidden.vbs 调用它),负责写日志与日志轮转 |
安装完成后,每次登录 Windows 都会在后台隐藏启动统一控制台,浏览器打开 http://localhost:8080 即可看到;
后台日志写在 logs/manager.log(超过 5MB 自动转存为 manager.log.old)。
如果希望做成"开机即启、不依赖登录"的真正 Windows 服务,需要管理员权限 + NSSM,例如(管理员 CMD):
nssm install WolfxBotManager "C:\Program Files\nodejs\node.exe" "C:\Users\abc18\Desktop\wolfxbot\manager.js"
nssm set WolfxBotManager AppDirectory C:\Users\abc18\Desktop\wolfxbot
nssm set WolfxBotManager AppStdout C:\Users\abc18\Desktop\wolfxbot\logs\manager.log
nssm set WolfxBotManager AppStderr C:\Users\abc18\Desktop\wolfxbot\logs\manager.log
nssm set WolfxBotManager Start SERVICE_AUTO_START
nssm start WolfxBotManager注意:微软登录令牌是按 Windows 用户缓存的,所以服务要以你自己的账号运行(NSSM 里配置登录凭据), 不要用
SYSTEM,否则每个机器人都会要求重新登录。
由 manager.js 提供,管理 PROGRAMS 列表里的程序(想加/删程序改 manager.js 顶部的数组):
| 程序 | 说明 | 特性 |
|---|---|---|
afkbot.js |
挂机 / 迎宾 | 每 5 分钟查一次 /tps,min 低于 7 就自动下线 5 分钟 |
killaurabot.js |
自动砍怪 | 意外退出自动重启 |
smartbot.js |
搬砖(收皮革 → 商店卖货) | 意外退出自动重启 |
功能:
- 单个启动/停止、一键全部启动/全部停止;
- 进程意外退出(报错、掉线崩溃、被踢)自动重启,连续快速崩溃按 5s → 10s → … → 60s 指数退避;
afkbot.js自带 TPS 监控:每 5 分钟发一次/tps,min低于 7 就主动下线 5 分钟再上线;- 实时显示状态、PID、运行时长、重启次数;日志带 ANSI 颜色完整展示;
- 网页输入框可给程序 stdin 发内容(等同于在命令行里输入,机器人会当作聊天发出)。
HTTP 接口(方便脚本调用):/api/state、/api/logs/:id、/api/start/:id、/api/stop/:id、/api/input/:id、/api/start-all、/api/stop-all。
双机器人并行搭建地图画:上传投影 → 两个账号各领任务 → 实时看俯视建造图。
- 填写服务器连接信息:地址/端口/版本/认证方式(默认
wolfx.jp:25565、1.20.4、microsoft),填两个不同的机器人账号; 两个账号会间隔 5 秒依次连接(页面可调),避免服务器提示"连接速度过快"。 - 上传投影文件:支持
.schem和.litematic;.litematic优先直接解析(不经过 Lite2Edit,避免部分转换把数据解错位), 上传时就会校验格式,解析不了才回退 Lite2Edit(需要 Java)。上限 200MB。 - 设置搭建坐标:起始 X/Y/Z = 投影原点
(0,0,0)对应的实际世界坐标;每往上叠一层把 Y +1,X/Z 不变。 - 开始建造:放置模式默认"极速"(同一 tick 连发,适合无反作弊的服务器);被踢或卡顿时改"稳定"(逐块等确认); "每个机器人连续放置数"默认 4。随时可点"停止"。
- 状态徽章 + 两个机器人状态条(搭建光边 / 颜色 xxx / 等待补货 / 未到达材料箱…);
- 进度条与统计:方块进度、已用时间、预计剩余、当前区域、当前方块;
- 实时俯视建造图:暗色 = 待建预览,彩色 = 已建,鼠标悬停查看坐标/方块/状态;
- 运行日志与提示。
- 解析投影,统计每种颜色的总数量;
- 两个账号间隔若干秒进服,进服后保持正常落地;
- 先建光边(默认
smooth_stone):两个机器人合力整条造完,只取光边的材料; 光边时站在光边方块正上方一格(X/Z 不变)从上往下放,并额外放慢(edgePlaceDelayMs)保证稳; - 再按颜色施工:一种颜色一次取料、连续放完再换下一种;颜色内部按行蛇形排序;数量超过
colorBatchSize(默认 1600)自动分批; - 取材料:先开基准箱子(y),不够就找同一 x/z 的
y+1 … y+4;全都缺货就原地等补货(每restockWaitMs检查一次,补足自动继续); 在材料区(chestReach,默认 32 格)内直接分段瞬移过去开箱;够不到箱子会自动/res tp hpdth重试,不会误判成"没库存"; - 回平台:取完材料
/res tp hpdth.dth回搭建平台;如果和网页输入的起始搭建坐标差超过platformTpMaxDistance(默认 32 格), 说明传送失败,会自动重发传送指令,最多platformTpRetries(默认 3)次; - 放置:每一格先检查是否在方块旁边(眼睛到参考方块中心 ≤
placeReach),不在就移动过去;- 地图画(非光边):站到目标方块 z-1 那一格(本层已建好的地毯 / 下一层地毯)落地站稳;
- 移动用分段瞬移:服务器限制 X/Z 每次最多 32 格、Y 每次最多 9 格,程序先分段调 Y 到"比方块高一格"的安全高度,
再分段移动 X/Z,段与段之间留
teleportStepDelayMs(默认 10ms); - 从背包拿材料会先把整组搬进空的快捷栏格(尽量填满 9 格),搬完等
takeItemDelayMs(默认 50ms); 之后换这一种颜色只切快捷栏栏位(不等待);
- 每个任务放完后检查实际结果,没放上的交给收尾补建;漏放率偏高自动放慢爆发间隔,几乎不漏自动加快; 某个机器人掉线时它的任务回到队列由另一个接手,结束前还会做一轮收尾补建。
| 参数 | 默认值 | 说明 |
|---|---|---|
host / port / version / auth |
wolfx.jp / 25565 / 1.20.4 / microsoft |
连接默认值,网页填写会覆盖 |
spawnTimeoutMs |
5 分钟 | 仅限连接+登录+准备,不影响建造时长 |
connectIntervalMs |
5000 | 两个账号的连接间隔(毫秒),"连接速度过快"时调大(页面可改) |
placeConcurrency |
4 | 每个机器人一次连续放置的方块数(网页可调 1~4) |
fastPlace |
true | 极速模式开关;false = 稳定模式(逐块等确认) |
burstSize / burstIntervalMs |
32 / 50 | 极速模式每批包数与批间隔(自适应会在此基础上调整) |
adaptiveBurst |
true | 按每个任务的漏放率自动增减爆发间隔 |
standOnGround |
true | 地图画站在 z-1 落地放置;false = 悬空 |
standWaitMs |
120 | 站好位置后等位置同步的时间(毫秒) |
placeReach |
4 | 放置距离上限(眼睛到参考方块中心) |
takeItemDelayMs |
50 | 从背包搬物品后的等待(毫秒);切快捷栏不等待 |
teleportStepXZ / teleportStepY / teleportStepDelayMs |
32 / 9 / 10 | 分段瞬移的每段上限与段间延迟 |
edgePlaceDelayMs |
100 | 建造光边时每次瞬移/放置后的额外等待(毫秒) |
retryDelayMs / placeRetries |
120 / 3 | 放置失败后的重试间隔与次数 |
jobRetryDelayMs |
500 | 任务处理失败后重新领取的延迟(毫秒) |
chestStackDepth |
4 | 箱子没货时往上找 y+1 … y+4(只变 Y) |
chestReach |
32 | 与材料箱的距离在这个范围内算"已到材料区",直接分段瞬移过去开箱 |
restockWaitMs |
15000 | 箱子都缺货时,原地等补货的检查间隔(毫秒) |
platformTpMaxDistance / platformTpRetries |
32 / 3 | 回搭建平台传送失败的判定距离与重试次数 |
storageTp / platformTp |
/res tp hpdth / /res tp hpdth.dth |
材料仓与搭建平台的传送指令 |
materialChests |
见文件 | 各颜色材料箱坐标、食物箱(food: true) |
regionSize |
32 | 光边任务的区块尺寸 |
colorBatchSize |
1600 | 每种颜色每批最多处理多少格(背包 36 格上限约 2304) |
foodItem / foodReserve / foodThreshold |
cooked_cod / 64 / 15 |
食物种类、携带数量、低于多少饥饿值自动进食 |
verbose |
false | true 时打印每个方块的详细日志 |
- 每种颜色一个容器(木桶或箱子均可),容器内的方块名要和
color一致(如white_carpet); - 箱子没货时会往上找同一 x/z 的
y+1 … y+4,所以补货可以叠成"从下往上"补; - 食物箱里放
cooked_cod,机器人不足时会自动补到 64 个; - 机器人在材料区 32 格内能自动走过去开箱,容器必须允许机器人打开。
- 连接
wolfx.jp,账号afkbot(1.20.1 / microsoft),进服后/res tp dyyz到领地,并把抗击退调满; - 定时发言:广告(60 分钟)、签到提示(1000 分钟)、
/pm(3 分钟)。时间戳写入afk_timers.json, 进程重启也不会漏发(到点补发一次); - TPS 保命:每 5 分钟发一次
/tps,从服务器报告里抓min 20.00这个值;min低于 7 就主动下线 5 分钟, 时间到了退出进程由管理器重新上线; - 玩家进出播报:识别
whitelist.txt(VIP 名单)与内置 OP 名单,特殊玩家单独播报; - 聊天指令(需要白名单/OP):
$ping查延迟、$bal查余额、$重连、$tps(发/tps给服务器,把报告里的 min/med/max 转成中文回复:服务器 TPS —— 最低 x / 中位 y / 最高 z)、$viplist add/remove、$blacklist add/remove、$100w转账、$tpaccept、$res tp <领地>、$go/$goTo <玩家>(用Let_it_move飞过去)、$refreshOnlinePlayers、$removeAllOnlinePlayers、$removeTabData,还会唱歌($只因你太美、$only my railgun); - 收到
从 XXX 收到了$300,000。会自动把对方加入 VIP 名单并回复; - 数据文件:
afk_timers.json(定时发言)、onlinePlayers.txt(在线名单)、whitelist.txt、blacklist.txt、tab.json、check_in_data.json; - 每 100ms 转头看向最近玩家(防挂机判定);断线后退出进程、由管理器自动重启(微软登录偶发失败时只有重启进程才能重新登录); 未处理的异步错误只记录、不让进程退出。
连上服务器后循环执行:
/res tp best回农场,直接瞬移到第一个点位;- 从
(-47002, 256, 21270)开始翻箱子收皮革,同一个点位先拿底层箱子、拿不满往上找(最多y+5), 还不满就按chestStepX(默认 -1)换下一个点位(x 最远到 -47031); - 背包塞满后
/warp shop,瞬移到商店站位,左键点一下商店箱子(只点击不挖掉),发/qs amount all卖货; - 回到第 1 步继续。
坐标、传送点、节奏都在文件顶部 CONFIG 里改;打开箱子 5 秒超时跳过;
到 /warp shop 后会先扔一次垃圾:只保留皮革和装备,食物只在副手留一组熟猪排(CONFIG.foodItem)用于自动进食,
其余食物(含多出来的熟猪排)和杂物全部扔掉;
断线后退出进程、由管理器自动重启(restartDelayMs 控制退出前的等待)。
- 两个账号(
killaurabot、killaurabot2)间隔 5 秒依次登录(CONFIG.loginIntervalMs), 避免服务器提示"连接速度过快";登录后各自/res tp best.mmo站到自己的位置 (-46993, 242, 21272和21274); - 每 780ms 找 10 格内最近的 5 只疣猪,挑"周围同类最多"的目标(配合横扫之刃一次打一片),两个账号交替出手 (单账号冷却 640ms,交替后大约每 320ms 出一刀);
- 被服务器拉走会自己站回原位;断线后退出进程、由管理器自动重启(两个账号一起重来);自动进食;
- 在终端/管理页输入的内容会同时发给两个账号(例如
/res tp xxx)。
node inventorybot.js # 用文件里的默认账号
node inventorybot.js afkbot # 指定账号登录进服后打印一次背包(主背包 + 装备 + 副手),背包变化时自动重新打印;终端输入 inv / i / 背包 手动刷新,
其它内容会当作聊天发出;掉线 5 秒重连。
项目早期的实验脚本(硬编码账号登录 + Let_it_move 移动),保留作参考,功能已被 afkbot.js 取代。
被 afkbot.js、kkkkkkk*.js 引用的移动/飞行库,代码经过混淆无法直接阅读,
对外接口是 Let_it_move(bot) 返回的对象(如 relax_time、long_long、fly 等)。当作黑盒使用,不要改。
用 child_process 同时拉起 smartbot、killaurabot(可选 aeddykillaurabot)、afkbot,崩溃自动重启。
现在请用网页控制台 npm run web 代替。
| 文件/目录 | 说明 |
|---|---|
manager.js |
统一入口:进程管理器 + 挂载地图画控制台(端口 8080) |
painting.js |
地图画核心:投影解析、双机器人协调、分段瞬移、放置与查漏 |
painting-console.js |
地图画控制台后端(上传/启动/停止/实时推送),挂在 /painting |
public/index.html |
地图画控制台页面(进度、俯视建造图、机器人状态、日志) |
afkbot.js |
挂机/迎宾机器人(定时发言、播报、聊天指令) |
smartbot.js |
搬砖机器人(收皮革 → 商店卖货循环) |
killaurabot.js |
双账号自动砍怪 |
aeddykillaurabot.js |
单账号杀怪(作者自用) |
inventorybot.js |
查看指定账号背包 |
Let_it_move.js |
混淆的移动/飞行库(黑盒使用) |
kkkkkkk001.js / kkkkkkk01.js |
早期挂机脚本(保留作参考) |
start.js |
旧的多进程启动器(已由网页控制台取代) |
service/ |
Windows 开机自启脚本(安装/卸载/状态/启动) |
Lite2Edit.jar |
.litematic → .schem 转换工具(兜底用) |
logs/ |
开机自启方式运行时写出的控制台日志 |
afk_timers.json |
afkbot 定时发言时间戳 |
onlinePlayers.txt / whitelist.txt / blacklist.txt / tab.json / check_in_data.json |
afkbot 的在线名单、VIP 名单、黑名单等数据 |
本项目部分代码由 AI 工具生成,仅供学习和参考。作者不对其完全准确性和潜在版权问题负责, 使用者请自行判断和审查;请遵守所连接服务器的规则,避免因自动化行为导致封禁。