自己撸了个 Minecraft 1.8.9 客户端
这是一个从零撸起来的 Minecraft 1.8.9 客户端。挑 1.8.9 是因为老 PvP 常青、结构清楚、资料多。底子是 MCP 9.18(stable_22)反编译出来的原版, src/net/minecraft 基本原样贴上游, 自己写的东西全塞 src/client 和 src/dwgx, 跟原版隔开, 改坏了随手回滚。
构建故意做得很土。Java 8 纯 javac 手编, 不上 Gradle 不上 Maven, 几个 PowerShell 脚本兜住编译和启动, 输出丢 out\classes, 依赖挂 lib/*。全程没黑盒, 想调哪步掀哪步。这里踩过一个坑: --assets 和 --assetsDir 别一起传, 不然直接抛 MultipleArgumentsForOption, 先拿官方启动器跑一次原版把 assets 拉下来就干净了。
自己写的那层功能挺全。战斗有 KillAura、AutoClicker、Velocity, 移动有 Fly、Speed、Eagle、NoFall、NoSlow, 世界有 AntiVoid、AutoTool、FastPlace、Stealer。全挂在自己写的模块框架上, 事件派发走同步总线带优先级, 用快照分发免得遍历时被改崩。又加了层只读运行时桥(GameBridge、PlayerBridge、WorldBridge), 读数据统一从这走, 不让功能层乱碰游戏状态。
UI 花的力气最多。ClickGUI 和 HUD 全用 NanoVG 矢量渲染, 底座从 LWJGL 2 迁到 3.3.3。HUD 编辑器能拖能吸附能锚定停靠, 滑条、下拉、开关、取色器都抽成组件。配置走 JSON 按 profile 存, 原子写加备份。账号走微软 OAuth + Xbox Live, 顺手上了 en/zh/ja 三语。
写着写着还塞了个游戏内 IRC, 频道、好友、私信、动态都有, 本地 SQLite 缓存, 后端是独立 Netty + MariaDB(IRCServer/ 那块要 JDK 21)。主菜单也放了点自娱自乐: 动画背景、Flappy Bird、Kirby、Nyan Cat、推箱子, 还有 GLSL shader 背景和 Bing 壁纸抓取。
现在还断断续续在推, 主要收尾 LWJGL 2→3 迁移、重构模块、重写 UI。构建脚本 Windows 专用, 路径写死, 自己用没问题, 别人想跑先改路径。暂时没放 license, 默认保留所有权利。