协议 47 · Minecraft 1.8.9 · Vulkan

RustCraft

用 Rust 从零复刻的 Minecraft 1.8.9 客户端 —— Vulkan 渲染,可连接真实服务器

0Rust 源文件
0行代码
0协议版本
0GLSL 着色器

// 特性

完整的客户端体验:从网络协议到渲染管线,全部使用 Rust 实现。

1.8.9 协议网络

完整实现 Minecraft 1.8.9(协议 47)网络栈:数据包、NBT、AES/RSA 加密与 zlib 压缩,可直接连接真实服务器。

Vulkan 渲染管线

基于 ash 的 Vulkan 后端:区块网格并行构建(rayon)、天空盒、实体模型、粒子系统与附魔光效。

Microsoft 认证

Microsoft / Xbox Live OAuth 登录全流程,带本地账号缓存,支持正版服务器验证。

Lua 模组系统

内置 mlua(Lua 5.4)脚本桥接,Keystrokes HUD 等模组可通过 Lua 编写与热加载。

完整世界系统

区块 / 方块 / 实体 / 光照全栈实现,含流体与连接玻璃等原版渲染行为对齐。

UI · 音频 · 手柄

自绘 UI 与字体渲染(fontdue)、rodio 音频回放、gilrs 跨平台手柄输入,资源包与皮肤加载一应俱全。

// Lua 模组系统

内置完整的客户端模组框架:每个模组运行在隔离的 Lua 5.4 沙箱中,通过声明式权限访问事件驱动的 API。

🧱 隔离沙箱

每个模组拥有独立的 Lua 5.4 状态机,无文件系统、OS 与原生代码访问;单模组 16 MiB 内存上限、25 万指令数熔断。

🔑 权限模型

manifest.json 声明所需能力;网络修改、封包发送、协议翻译等敏感权限需在 permissions.json 中显式批准。

♻️ 热重载

游戏内 /mods reload 即可重载模组,配置项自动生成可视化设置界面,错误隔离不影响其他模组。

🧩 内置模组

Keystrokes HUD、Old Animations、PVP Tweaks 等官方模组均由该框架实现,可直接参考源码。

mods/my_mod/scripts/client.lua
-- 定义配置项(自动生成设置界面)
local config = game.config.define({
  { key = "enabled", type = "boolean",
    label = "Enabled", default = true }
})

-- 订阅 HUD 渲染事件并绘制文字
game.events.on("render.hud.after", function(event)
  if config.get("enabled") then
    event.draw:text({
      text = "Hello, RustCraft!",
      x = 8, y = 8, scale = 1.0,
      color = { r = 0.5, g = 1.0, b = 0.5, a = 0.85 }
    })
  end
end)

// 技术栈

无游戏引擎,从窗口到像素全部手写。Rust 2021 edition。

分类Crate用途
窗口与输入winit · gilrs窗口、键鼠与手柄事件
图形渲染ash · gpu-allocatorVulkan 绑定与显存分配
着色器shadercbuild.rs 编译 GLSL → SPIR-V
数学nalgebra线性代数与变换
网络reqwest · flate2HTTP 与协议压缩
加密aes · rsa · sha1/sha2协议加密与正版验证
脚本mluaLua 5.4 模组桥接
音频 / 图像 / 字体rodio · image · fontdue声音回放、纹理加载、字体光栅化
并发rayon并行区块网格构建

// 构建与运行

需要 Rust 工具链与支持 Vulkan 的 GPU 驱动。

bash
# 克隆仓库
git clone https://github.com/RustCraftMC/RustCraft-Public.git
cd RustCraft

# 调试构建(opt-level=1)
cargo build

# 发布构建(LTO thin · panic=abort · strip)
cargo build --release

# 启动游戏
cargo run

# 测试 / Lint / 格式
cargo test && cargo clippy && cargo fmt -- --check

📦 资源

运行时需要 Minecraft 1.8.9 客户端资源(纹理 / 声音),放置于 assets/ 目录。

🔐 认证

首次登录走 Microsoft OAuth 浏览器授权,之后令牌缓存在本地。

🎮 参考源码

仓库内 minecraft/ 目录为反编译的 1.8.9 Java 源码,仅用于行为对照。

// 项目结构

src/
├── main.rs        # 入口 · 日志初始化 · Vulkan 层兼容处理
├── assets/        # 纹理 / 模型 / 资源包 / 皮肤 / 声音
├── auth/          # Microsoft / Xbox Live OAuth
├── client/        # 游戏逻辑 · 输入 · 背包 · 物理 · 网络会话
├── entity/        # 实体系统
├── net/           # 1.8.9 协议 · 数据包 · NBT · 加密
├── render/        # Vulkan 渲染器 · 管线 · HUD · 天空
├── scripting/     # Lua 模组桥接
├── ui/            # 字体 · 控件 · i18n · 菜单
└── world/         # 区块 · 方块 · 光照 · 网格