- 版权类型
- 原创
- 语言支持
- 中文(简体)
- 前置组件
- Python 3.10+(仅标准库,无需 pip 安装)
JDK 8+(仅构建 mc-mirror-agent 时需要,离线服模式完全不需要)
[MD]
# MinecraftProxy —— 双模式被动世界下载器
[B]本工具由AI辅助完成,介意勿用
正版服务器下载功能为测试版(可能不稳定)[/B]
你在服务器里走过的每一块区块,都能原样变成一张可以单机打开的地图。
不修改任何游戏字节、不发送任何额外数据包,只旁路读取服务器发给你的区块数据。
## 两种模式
| | 代理模式(默认) | 镜像模式(v2.5.0 新增) |
|---|---|---|
| 适用服务器 | 离线验证(online-mode=false) | **正版验证 / 离线验证均可** |
| 需要额外组件 | 无,Python 直接跑 | 需自建 mc-mirror-agent(javaagent) |
| 用法 | 客户端连代理,代理连服务器 | 正常进服,agent 在客户端内镜像明文帧 |
连到正版服但没配 agent,代理模式会立刻明确提示,而不是默默没区块。
## 核心特性
- 字节透明转发:只解析数据副本,转发永远是原始字节,不会弄坏压缩帧、不会掉线
- 版本自适应:握手包读协议号自动适配,不硬编码包 ID;已实测 1.8.9 / 1.16.5 / 1.17 / 1.18.2 / 1.21.9-10 / 26.3
- 跨版本插件兼容:ViaVersion/ViaBackwards 只翻译包 ID 不翻译区块负载,本工具按「必须精确消费全部字节」反推真实格式
- **容器内容**:打开过的箱子/木桶/潜影盒等,物品直接写进导出世界(协议限制:服务器只在你打开时才下发)
- **地图画**:Map Data 累积为 data/map_<id>.dat,用 /give @s filled_map[minecraft:map_id=<id>] 取出查看
- **实体快照**:怪物/动物/矿车/掉落物/展示框(1.13+)的类型+坐标+朝向,写入 entities/ 区域文件
- **出生点 = 退出位置**:导出世界直接出生在你退出的地方,不再掉在 (0,64,0)
- 导出即可玩:严格遵循 Anvil 规范(真实 1.21.10 世界逐字段校验过),游戏本体直接「选择世界」加载
- 真实生物群系:1.18+ 从网络注册表抓取(模组服 174 项也能对),1.8/1.16 用内置数字表
- 多维度 / 光照 / 方块实体 / 动态世界高度全部支持
- mc-mirror-agent 只插桩 netty(不引用任何混淆的 Minecraft 类),原版/Fabric/Forge 客户端通用;已在 Fabric + 149 个 mod(含 Krypton/ViaFabricPlus)环境实测
- `python main.py --doctor` 一键自检:环境/端口/JDK/agent 逐项检查,出问题截图即可求助
## 快速上手(离线服)
```bash
python tools/precheck.py mc.example.com:25565 # 先预检目标服
python main.py --target mc.example.com:25565 # 启动代理
# 客户端连 127.0.0.1:25565,进服走动 30 秒+,Ctrl+C 退出
```
## 正版服(镜像模式)
```bash
cd agent && build.bat # ① 构建 agent(需 JDK 8+,一次即可)
python agent/test/run_smoke.py # ② 无需开游戏的链路自检
python main.py --mirror-port 25566 # ③ 启动镜像模式
# ④ 启动器 JVM 参数加:
# -javaagent:D:\路径\mc-mirror-agent.jar=127.0.0.1:25566
# ⑤ 正常进服游玩,Ctrl+C 生成世界
```
## 质量
15 个测试套件共 745 条断言全部通过;含真实服务器抓包固件回归、
真实 TCP 端到端、对照真实 1.21.10 世界的独立规范校验器(自写 NBT 读取器)、
无需游戏的 agent 链路冒烟。
## 已知限制
- 1.9 ~ 1.15.2 的区块线格式暂无解析器(转发不受影响,仅导出为空)
- 容器内容为「打开过的」才有(协议设计,所有被动下载器均如此);1.20.5+(协议 766+)的物品组件格式暂不支持,即容器捕获当前覆盖 1.8 ~ 1.20.4
- 实体为「看到过的快照」,装备/血量/展示框内物品等元数据暂不采集
- ViaVersion 服务器若区块解析失败,--debug 会打印协议号/家族/节数便于反馈
## 免责声明
本工具只抓取「你自己合法登录后,服务器主动发给你的区块」,不破解任何验证、
不发送额外数据包。请仅用于你有权访问的服务器(如备份自己服的地图、存档留念);
多数服务器规则禁止世界下载器,用于他人服务器前请先确认目标服规则,违者自负。
## 致谢
方块/物品/实体数据表来自 PrismarineJS minecraft-data(首次运行自动下载);
协议参考 minecraft.wiki。
[/MD]