- AI Agent
- 人工智能
- 游戏开发
【免费下载链接】mindcraft
Minecraft AI with LLMs+Mineflayer
本文是基于 mindcraft 仓库 services/viaproxy/README.md 编写的实战指南。mindcraft(Minecraft AI with LLMs + Mineflayer)基于 mineflayer / minecraft-protocol 构建,对服务端版本有严格的兼容范围;当目标服务端运行在不被支持的版本上时,即可借助 ViaProxy 协议转换层,让 LLM 驱动的机器人顺利加入服务器。读完本文,你将掌握 ViaProxy 容器的一键启动、离线服快速接入、在线服微软账号登录与管理、配置持久化以及常见排错方法。
为什么需要 ViaProxy:mindcraft 的版本兼容边界
mindcraft 的机器人依赖 Mineflayer 生态与minecraft-protocol库与服务端通信,而协议库对 Minecraft 版本的支持是有限的。这一点在源码中有明确体现:
- src/mindcraft/mcserver.js 中的
getServer()会在启动阶段 ping 目标服务器,读取其版本号,并用mc.supportedVersions判断版本是否受支持:isSupported检查通过后才会放行连接,否则直接抛出 "MC server was found ..., but version is unsupported" 错误; - src/mindcraft/mindcraft.js 在创建每个 Agent 前调用
getServer(settings.host, settings.port, settings.minecraft_version),若minecraft_version为"auto"且探测失败,则降级为null后"尝试直接连接"; - src/agent/connection_handler.js 将
version_mismatch定义为致命错误(keywords 含outdated、version、client),一旦发生即视为无法恢复的连接失败。
这意味着当目标服务器使用过新、过旧或非标准协议版本时,机器人无法直接加入。ViaProxy(ViaVersion 系列工具的服务端实现)的作用正是在机器人客户端与目标服务器之间插入一层协议翻译:机器人按自己支持的版本与 ViaProxy 通信,ViaProxy 再以目标服务器的协议版本转发到真实服务端,从而突破版本限制。仓库主 README 在 Docker 章节也给出了提示:"To connect to an unsupported minecraft version, you can try to use viaproxy"(见 README.md)。
一键启动:Docker Compose 中的 viaproxy 服务
仓库根目录的 docker-compose.yml 中已经内置了viaproxy服务定义,这也是使用它的最简方式:
viaproxy: #use this service to connect to an unsupported minecraft server versions. more info: ./services/viaproxy/README.md image: ghcr.io/viaversion/viaproxy:latest volumes: - ./services/viaproxy:/app/run ports: - "25568:25568" profiles: - viaproxy stdin_open: true tty: true关键点说明:
- 镜像:
ghcr.io/viaversion/viaproxy:latest,官方发布的 ViaProxy 容器镜像; - 卷挂载:将仓库内
services/viaproxy/目录挂载到容器的/app/run,ViaProxy 的配置文件、账号数据(saves.json)都会落盘到这个目录,便于持久化与备份; - 端口:宿主机
25568映射到容器25568,这是 mindcraft 机器人将连接的 ViaProxy 监听端口; - profile:
viaproxy属于可选 profile,默认docker-compose up不会启动它,必须显式指定--profile viaproxy; stdin_open/tty:保持容器交互式终端,这是后续docker attach进入容器执行account命令的前提。
启动命令:
docker-compose --profile viaproxy up首次启动后,ViaProxy 会在挂载目录(即仓库的services/viaproxy/)中自动生成配置文件viaproxy.yml。该文件是后续所有接入配置(目标地址、认证方式、账号索引等)的核心所在。
离线服接入:三步完成
对于不需要正版验证(offline)的服务器,接入过程非常简单,按原文档的步骤执行即可:
第一步:编辑viaproxy.yml,设置目标服务器
修改自动生成的 services/viaproxy/viaproxy.yml(首次启动后才会生成),将target-address改为你真正要连接的服务端地址与端口。
第二步:修改settings.js,把机器人指向 ViaProxy
编辑仓库根目录的 settings.js,将连接目标改为 ViaProxy 容器的地址与端口:
"host": "host.docker.internal", "port": 25568,host使用host.docker.internal:这是 mindcraft 容器访问宿主机回环地址的特殊主机名。docker-compose.yml 中 mindcraft 服务已通过extra_hosts: "host.docker.internal:host-gateway"注入该映射;port固定为25568,对应 docker-compose.yml 中暴露的映射端口。
第三步:正常启动 mindcraft
node main.js此时机器人先与 ViaProxy(协议版本由其自行协商支持)握手,再由 ViaProxy 转发到目标服务端。由于 offline 服务器不做正版验证,ViaProxy 以离线模式直连即可,无需任何账号配置。
补充:
settings.js中minecraft_version可保持"auto",启动时 src/mindcraft/mcserver.js 会从 ViaProxy 探测到的服务信息中解析版本号;ViaProxy 上报的通常是其自身"翻译后"的版本,从而绕过getServer()的supportedVersions校验。
在线服接入:微软账号登录与管理
如果目标服务器开启了正版验证(online),ViaProxy 必须以一个真实的正版账号身份与服务器通信。原文档明确指出这"involves more effort"(需要更多步骤),具体流程如下:
1. 启动容器并附加终端
先启动 ViaProxy 容器,然后在 mindcraft 目录下另开一个终端,附加到容器:
docker attach mindcraft-viaproxy-1容器名mindcraft-viaproxy-1由 docker-compose 按"项目名-服务名-序号"自动生成(对应 docker-compose.yml 中的viaproxy服务与stdin_open: true、tty: true配置)。
2. 使用account命令管理账号
附加成功后,即可在容器交互终端中使用account命令族:
| 命令 | 作用 |
|---|---|
account list | 列出当前已保存的全部账号及其 id |
account add microsoft | 添加一个微软账号(执行后按提示完成登录流程) |
account select <id> | 选中要使用的账号(id 可通过account list查看) |
account remove <id> | 移除某个账号(id 可通过account list查看) |
account deselect | 取消当前选中的账号,回到离线模式 |
典型操作序列:account add microsoft完成交互式登录 →account list获取账号 id →account select <id>激活该账号。
3. 安全警告:切勿泄露saves.json
原文档对此给出了明确的[!WARNING],必须原样继承:
如果你使用微软账号登录,访问令牌(access token)会存储在
saves.json文件中。永远不要与任何人分享这个文件!否则对方可以用你的名义加入服务器!
由于services/viaproxy/目录被挂载为容器的/app/run,saves.json实际保存在仓库的 services/viaproxy/saves.json(首次账号登录后生成)。该文件属于敏感凭据,应像 keys.json 一样加入.gitignore并妥善保管,切勿提交到公开仓库或发送给他人。
4. 分离容器
账号配置完成后,使用快捷键CTRL-P然后CTRL-Q从容器终端分离,容器会继续在后台运行。
配置持久化:把账号设置写进viaproxy.yml
account命令的选择是运行时状态,容器重启后会丢失。若希望持久保留这些配置,原文档给出了两个配置项:
- 将
auth-method改为account; - 将
minecraft-account-index设置为对应账号的 id(用account list查看)。
这样每次容器启动时,ViaProxy 都会自动使用指定账号进行正版登录,无需再手动account select。离线场景下则保持默认的离线认证方式即可。
与 mindcraft 的联动细节与排错建议
- host 必须用
host.docker.internal吗?只有当 mindcraft 本体也运行在 Docker 容器中时才需要(mindcraft 容器通过host-gateway映射访问宿主机上的 ViaProxy 端口)。若 mindcraft 直接运行在宿主机上(node main.js),host直接写127.0.0.1、port写25568即可,参见 README.md 的说明。 - 连接报错时先看是哪种失败:参照 src/agent/connection_handler.js 的
ERROR_DEFINITIONS,version_mismatch表示协议版本仍未对齐(检查 viaproxy.yml 的target-address与 mindcraft 的minecraft_version);access_denied表示未被白名单/被封禁(在线服需确认账号已select);network_error表示 ViaProxy 端口不可达(检查 25568 端口映射与容器运行状态)。 - 版本自动协商:
settings.js中minecraft_version建议保持"auto",与 src/mindcraft/mindcraft.js 的降级逻辑配合,尽可能避免因版本探测失败而中止启动。 - 端口冲突:若宿主机 25568 已被占用,可修改 docker-compose.yml 中 viaproxy 的
ports映射(如"25569:25568"),并同步更新settings.js中的port。
小结
ViaProxy 是 mindcraft 应对"不支持的 Minecraft 服务端版本"这一边界场景的官方推荐方案:它通过 docker-compose.yml 中的viaproxyprofile 一键部署,离线服只需修改 services/viaproxy/viaproxy.yml 的target-address与 settings.js 的host/port即可接入;在线服则需通过docker attach进入容器,用account命令完成微软账号的添加、选择与持久化。全程注意保护保存了访问令牌的saves.json文件。结合 src/mindcraft/mcserver.js 的版本校验逻辑与 src/agent/connection_handler.js 的错误分类,你可以在接入失败时快速定位问题层级,将 LLM 驱动的机器人稳定地带入任何目标服务器。
- AI Agent
- 人工智能
- 游戏开发
【免费下载链接】mindcraft
Minecraft AI with LLMs+Mineflayer
相关推荐
如何让旧版Minecraft客户端连接新版服务器?ViaBackwards完整使用指南
如何让旧版Minecraft客户端连接新版服务器?ViaBackwards完整使用指南 ViaBackwards是一款专为Minecraft服务器设计的实用工具
yuzu 完整指南:如何在电脑上跑起 Switch 模拟器,从安装到调优 5 步搞定
yuzu 完整指南:如何在电脑上跑起 Switch 模拟器,从安装到调优 5 步搞定 yuzu 是一款免费开源的 Nintendo Switch 模拟器,可以把
虚拟化桌面应用图形学pgAdmin4服务器连接配置完全指南:从入门到精通
pgAdmin4服务器连接配置完全指南:从入门到精通 pgAdmin4作为PostgreSQL数据库最受欢迎的图形化管理工具,其服务器连接配置是每个数据库管理员
数据库客户端后端前端桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考