整体架构
text
┌─────────────────────────────────────────────────────────────┐
│ C++ 客户端 (application/) │
│ ├─ 登录链 (LoginAuth / LoginSession / ConnectInstance) │
│ ├─ 数据包 (PacketBase + 各 packet 类, 网易协议) │
│ ├─ 回调分发 (CallbackManger: 包 → 触发 Python 事件) │
│ ├─ 终端界面 (VectorConsole / VectorUI: 表头 + 日志区) │
│ └─ Python 运行时 (PythonRuntime: 内嵌 CPython 3.12) │
├─────────────────────────────────────────────────────────────┤
│ Python 3.12 运行时(随包提供) │
│ ├─ 解释器 python312.dll / python3.dll (exe 同目录) │
│ ├─ 标准库 python312/Lib/ │
│ ├─ 扩展模块 python312/DLLs/ (_ssl.pyd, _socket.pyd, …) │
│ ├─ 框架 source/init.py 或 vanilla.mcp/ (加载插件、RPC 校验) │
│ ├─ 插件 <插件目录>/<name>/__init__.py (默认 ./scripts) │
│ └─ 第三方包 python312/Lib/site-packages/ │
└─────────────────────────────────────────────────────────────┘解释器是动态嵌入的
python312.dll 与 Program.exe 放在同一目录,python312/ 提供标准库与扩展模块。 这样官方平台 wheel(numpy / Pillow 等)可以直接使用 —— 详见 Python 运行时与扩展。
分层职责
| 层 | 负责 | 不负责 |
|---|---|---|
| C++ 客户端 | 网络连接、登录鉴权、协议编解码、游戏状态维护、事件分发、终端界面 | 业务逻辑 |
Python 框架(source/ 或 vanilla.mcp/) | 加载插件、事件路由、RPC 反作弊校验、数据包解析(proton.py) | 协议实现 |
插件(插件目录,默认 scripts/) | 你的业务逻辑 | 连接与协议细节 |
分界点是一套事件系统:C++ 侧收到数据包 → 分发给 Python → 插件注册的回调被调用。 插件要主动做事(发指令、移动、打开容器)时,调用 engine 等原生模块。
C++ 侧主要组成
| 组件 | 位置 | 说明 |
|---|---|---|
| 登录链 | application/Core/ | LoginAuth / LoginSession / ConnectInstance |
| 数据包 | application/Packets/ | PacketBase + 各协议包类 |
| 回调分发 | application/Core/CallbackManager.cpp | 协议包 → Python 事件 |
| Python 运行时 | application/Python/PythonRuntime.cpp | 解释器初始化、19 个模块注册、sys.path 装配 |
| 终端界面 | application/Core/VectorConsole.cpp / VectorUI.cpp | 固定表头、日志区、状态动画 |
| 原生 API | application/PythonAPI/ | pybind11 绑定(nbt / packets / game_state) |
| 网络后端 | application/Network/ | RakNet / WebSocket / WebRTC / NetherNet |
| 加密 | application/Crypto/ | AES / ChaCha20 / Rotor / ECC |
本节目录
- Python 内嵌机制 —— 解释器怎么起来、模块怎么注册、字符串编码边界
- Python 运行时与扩展 —— 目录布局、链接方式、wheel 与运行库依赖
- 事件系统 —— C++ → Python 的事件分发规则
- 关键数据包 ——
CommandBlockUpdate/SettingsCommand等易错点 - RPC 与反作弊校验 —— 服务器如何校验客户端、失败会怎样
