一个客户端池,一张属于你的游戏画面。
Minecraft 客户端多开器与浏览器串流器 · Experimental alpha
部署 · 架构 · M2 GPU 共享 · M2b 区块网格 · M2c 多视角实测 · M3.1 实测 · 多开容量 · 身份与安全 · 验证 · 发行实测 · third-party
MultiCraft 在一台 GPU 主机上运行多个独立 Minecraft Java 客户端,把各自的画面、声音和输入接到浏览器。一个标签页登录一个身份,使用同一套简洁的单玩家界面;需要另一个角色时,再开一个身份标签页。
当前目标是把原版客户端的多开与远程游玩做好:会话数量由 OP 配置,每个角色拥有独立的连接、世界状态、菜单、输入、音频和编码流。同一运行时 JVM 调度这些客户端;正常 Minecraft 客户端仍然直接连接原服务器,服务器不需要安装 MultiCraft 插件。
版本状态:v0.1.0-alpha.2,面向实验部署。 当前固定 Minecraft Java 26.3、JDK 25,GPU 宿主路径针对 Linux x86_64 / NVIDIA Vulkan。当前登录游戏使用受控离线身份,适用于有权管理的
offline-mode测试服务器;Microsoft /online-mode登录尚未实现。浏览器公钥登录管理的是 MultiCraft 访问权限。
本次优化与实测汇总见 v0.1.0-alpha.2 发布说明。
- 多开客户端池:启动时配置 1–16 个槽位,默认生成 4 个;每个槽位在一个 JVM 内持有独立原版客户端。16 是配置边界,不是硬件容量保证。
- 一个标签页,一个身份:公开界面沿用单玩家布局,账号由 OP 映射到一个原版客户端槽位。新身份入口创建独立标签页命名空间,避免同域 Cookie 覆盖登录。
- 鼠标捕获与全屏分开:捕获用于第一人称转向,全屏由独立按钮控制。菜单、背包和容器使用绝对位置指针;F9 切换原版菜单,F8 释放输入捕获。
- 可调串流:玩家可请求分辨率、帧率、视频码率和可选自适应码率;OP 管理允许的上限。界面区分请求、生效参数和实际接收统计。1000 fps 是允许请求的上限,实际帧率由游戏、GPU、编码、网络、解码和显示器共同决定。
- 独立音视频:H.264 视频通过 HTTPS WebSocket 送到浏览器 WebCodecs;每个原版客户端的 OpenAL loopback 音频单独送入 WebAudio。alpha 音频是 48 kHz 双声道 s16le PCM,约 1.536 Mbps / 活跃会话,尚未使用 Opus。
- 保留服务端兼容边界:MultiCraft 作为客户端接入协议服务器,不改变原服务器的客户端入口。公开发行的适配器仅校验并支持固定的官方 26.3 客户端;其他版本、Mod 和光影组合需要逐一适配、验证。
先由 OP 准备已有 JDK 25、NVIDIA Vulkan 驱动、Python 3.12 与 third-party 运行环境。仓库不自动安装系统软件。以下从源码启动;完整账号、TLS 与后台运行步骤见部署文档。
git clone https://github.com/zgdllt/MultiCraft.git
cd MultiCraft
python3 scripts/multicraft.py init编辑生成的 multicraft.json,设置 serverAddress、JDK 路径、render node 和 sessions。没有配置 Microsoft 登录时,仅使用你获准管理的离线测试服务器。已有私有、可校验的游戏缓存可通过 minecraftCache 指定,prepare 将只读验证它;没有缓存时需显式请求官方下载:
# 使用已准备的缓存:不下载、不安装主机软件
python3 scripts/multicraft.py prepare --config multicraft.json
# 或显式下载固定版本的官方私有缓存
python3 scripts/multicraft.py prepare --config multicraft.json --download
python3 scripts/multicraft.py start --config multicraft.json
python3 scripts/multicraft.py status --config multicraft.json按部署文档准备 .runtime/accounts.json 与 TLS 证书后,启动独立 HTTPS 网关:
python3 -m multicraft.release_gateway --root . --config multicraft.json \
--origin https://localhost:18443 --port 18443浏览器打开配置的 HTTPS 入口。每个新身份从首页或“新身份标签页”进入;OP 登记的公钥只在本地对应私钥签名之后获得登录资格。同一公钥匹配多个身份时,由用户明确选择。
默认 gpu.mode=off 保留 M1 的独立 GPU device、场景、纹理和编码器路径。本分支增加可选的 M2.0 / M2a 实验模式:audit 为独立设备的 M1 对照记录实际分配与传输;shared 共用一个 Vulkan instance、device 和 VMA allocator,并按实际像素内容复用部分原版静态纹理。各会话继续使用独立的协议、玩家、菜单、音频、交换链与渲染输出。配置与所有权细节见 M2 实施文档,硬件验收见 M2 验证。
M2a 尚未共享场景几何、动画图集、字体、动态皮肤或视频编码器,也没有实现集中式光线追踪。进程显存、VMA 实际分配与重复分配避免量分别计量;显存减少不能直接当作节能证据。材质包和光影目录参与启动档案指纹,改变档案需要由 OP 重启相应池;这并不代表已验证任意 Mod / 光影组合。
CPU 世界数据复用实验新增默认关闭、由 OP 管理的 worldData,将内容相同且已完成的方块/生物群系 backing arrays 与光照数组放入父级只读存储,写入前复制;各路协议、世界包装对象和玩家状态继续独立。已完成四个真实客户端的方块与天空光数组引用共享、服务端更新、断开重连及退出隔离检查。载荷去重计数不等于进程内存收益;模型、资源解码和类加载等其他候选也列于文档,尚未实现。
本轮并发曲线与测量数据:在同一 M2b、720p、目标 60 FPS、十步相机预热和 12 GiB 测试组限额下,基线完成 13 路、14 路触发内存保护;世界数组共享版完成 11 路、12 路触发同类保护。1/2/4/8 路成对测试通过完整几何一致性检查;本轮没有证明整体内存或并发收益,功能保持默认关闭。曲线使用原生客户端输出,不包含浏览器传流和编码负载。
共享客户端核心第一阶段新增默认关闭、由 OP 管理的 clientCore:固定资源的编码字节通过父级缓存复用,三类后台执行器由全进程统一持有,各玩家可变构建池由统一配额管理。玩家、协议、世界、UI、输入、音频和输出仍独立;这一步尚未合并全部原版客户端对象、模型或图片解码。4/8/16 路原生对照的设置与结果单独记录,保留上述独立客户端方案。
本轮 4/8 路共享版 RSS 分别为 4.937/7.388 GiB,基线为 5.091/7.699 GiB,单窗口低约 3.02%/4.03%;完整几何与退出隔离通过。共享版 16 个真实会话已初始就绪,但两组 16 路尝试都触及既有内存保护线,未完成完整帧率窗口和退出验证,不能标为 16 路验收通过。
真实主世界 CPU/内存优化实测完成 19 个正式原生用例,覆盖自然海岸、移动、分散视角、后台限帧、交互与 JVM 分片。新增默认关闭的反射方法缓存和窄范围库类共享;组合参数在八客户端观察窗口中将平均原生帧率从 26.46 提高到 50.34 fps/视角,进程 CPU 从 2.873 降到 1.960 核,RSS 从 7.598 降到 6.314 GiB。不同启动的几何驻留状态未完全匹配,且完整四客户端用例出现 RSS 反增,因此这些结果仅为探索性观察,尚未证明严格亚线性增长或普遍内存收益;不包含视频编码、浏览器解码或能耗验收,默认配置未改变。
先前小场景的四会话 M2a 实测:在固定场景、4×720p、实际约 60 fps 下,客户端进程显存由 M1 的 1,578 MiB 降至 1,094 MiB,减少 484 MiB(30.67%)。原版纹理的同一 native image/allocation 仅上传一次,由四个真实视角持续采样;退出原始创建会话后其余视角继续使用该分配。该数字是设备、分配器和静态纹理池组合的结果,不能泛化到任意世界或解释为已实现共享场景几何。
M2b 区块顶点网格实验新增由 OP 显式开启的 gpu.shareChunkMeshes=true 路径,在 M2a 的共享 GPU 所有权上复用相同内容的 SOLID / CUTOUT 顶点区域,已完成固定版本下复杂场景四会话的原生共享、三组逐槽位完整几何一致、显存、帧率及退出隔离验证。实施文档包含独立 void flat 测试服与固定 10 步相机预热;默认仍为 M1 off,保留 audit 的 M1 对照和关闭网格共享的 M2a 对照。
M2b 四会话实测:在同一完整复杂场景、四路 1280×720 / 60 fps 目标下,M2b 单次约 30 秒原生采样窗口的每视角实际帧率为 59.72–59.89 fps,宿主进程显存中位数为 1,414 MiB;比 M2a 的 2,182 MiB 少 768 MiB(35.2%),比 M1 audit 的 2,474 MiB 少 1,060 MiB(42.8%)。这些数值对应固定版本、场景与原生窗口,详细分配、共享 draw range 和生命周期证据见实测报告;浏览器收流和能耗属于另外的测量范围。
M2c 多视角调度与提交聚合通过同 N 的 4 / 8 / 16 会话原生对照:每个实际呈现帧的 native submit 次数分别减少 74.71% / 80.87% / 75.76%,宿主显存中位数减少 4.33% / 4.66% / 2.64%,主要对应 VMA reserved block 差异,live allocation 几乎相同。四视角平均 FPS 近乎不变,8 / 16 视角分别下降 1.51% / 5.03%,因此不宣称整体加速或净 CPU 节省。每组只有一次约 30 秒窗口;完整帧率、显存、实际提交次数、累计 CPU 构建命中与限制见 M2c 实测。默认 m2c.enabled=false,M1 / M2a / M2b 对照保留。
M3.0 父级地形绘制路径已落地共享 scene/planner、真实 20-byte 间接命令模板复用和新 opaque draw recording,并完成 1 / 2 视角的六个原生采集。两视角 opaque GPU span 为 0.140229 ms,相当于单视角的 2.0659 倍,比同 N 的 M2b / M2c 分别高 0.173% / 1.215%;约 60 fps 下未达到默认 5% GPU first-gain 门槛,因此 NoGo,4 / 8 / 16 视角按规则跳过。这不代表完整集中式多视图 GPU pass 已完成;仍逐视角 raster/shading,实验 flag 默认关闭。完整数值、原始计时口径、视觉和交互边界见 M3 实测。
M3.1 跨视角材质结果复用已实现并完成两个真实相机的命中、同帧 oracle 质量、独立输入及参考会话退出验证。该场景消费视角约 0.317% 的 SOLID 像素复用材质样本;但双会话完整 GPU 时间为 1.808434 ms,同场景 M3.0 为 0.307858 ms,新增会话边际成本 0.921309 ms,未实现次线性收益,因此 NoGo,正式 4 / 8 / 16 会话测试跳过。m31.enabled=false 保持默认,M2b / M2c / M3.0 对照保留。完整画质、帧率、显存、计时范围和限制见 M3.1 实测。
池中的槽位在启动时固定。普通断开、重新连接可在槽位中进行;终止原版槽位后,重新创建该槽位需要重启池。不同尺寸的热更新会调整对应的原生虚拟显示输出,不是把固定图像裁剪成新分辨率。
当前 Linux / NVIDIA / Wayland 组合存在原生全局退出兼容问题。显式 defer-native / process-exit 策略在所有客户端清理完成、真正释放已登记 Vulkan instance 和 SDL window 后,跳过有问题的最后一次进程级 SDL_Quit,再正常退出 Java。它不使用强制 halt,也不代表上游 SDL 退出问题已经修复。架构文档说明清理条件与观察方法。
运行宿主、播放器解码、实际菜单/移动交互和可听音频分别验证。源码 CI 不创建 GPU 客户端;验证文档列出验收步骤,发行实测记录列出四会话功能检查、修正后的 4×60 / 单槽 30 fps 短测、真实四标签解码与单标签重新登录、OP 四路限额修改和正常关闭结果,并保留失败试验与尚未收敛的启动清理限制。当前内置浏览器不支持 Pointer Lock,本轮尚未完成外部浏览器的新版本捕获复测和四路声音的人耳确认。
# 使用已经准备好测试依赖的 Python 环境
python3 -m unittest discover -s tests -v
npm test
npm run check:web
python3 scripts/release_source.py无需 Node 打包工具或前端第三方库。runtime-host/ 是固定版本的 Java 适配层,multicraft/ 是鉴权、网关和媒体,web/ 是产品界面,scripts/ 是本地启动与检查工具。修改后请分别报告合同测试、真实原版客户端、浏览器收流及实际操作证据。
自有源码和本仓库品牌资产使用 MIT License。Minecraft、JDK、LWJGL、SDL、OpenAL、Selkies、pixelflux、PCMflux、驱动、系统音频组件以及可选绘图工具 Matplotlib 均为 third-party,不属于 MultiCraft 的 MIT 授权。版本、用途、来源与许可证见 THIRD_PARTY.md。游戏 JAR、资产、世界、认证材料和运行时日志不随源码发布。
MultiCraft 是独立社区实验项目,与 Mojang、Microsoft 或 NVIDIA 没有隶属或背书关系。使用游戏仍须遵守 Minecraft EULA 和适用的使用条款。
English: MultiCraft is an experimental Minecraft Java client pool and browser streamer. Multiple isolated native clients run in one JVM; each browser tab signs in to one OP-managed identity and receives its own view, input and audio. Pointer lock and fullscreen are independent. The adapter is pinned to Minecraft 26.3 / Java 25 on a Linux NVIDIA Vulkan host and supports authorized offline-mode test servers. M1 remains the default. This branch adds opt-in M2 GPU accounting and shared native device/allocator ownership with content-verified static texture reuse. The opt-in M2b chunk vertex-sharing path has passed four-session native validation on the pinned configuration, retaining M1/M2a controls; see the linked M2b results for the matched scene, memory and frame-rate windows. M2c has passed matched 4/8/16-view native checks with fewer submits per presented frame and modest GPU-memory reductions, but lower FPS at 8/16 views; the linked M2c results make no overall speedup or net CPU-saving claim. M3.1 adds an opt-in cross-camera raw-material cache with matched quality and isolation checks, but increases full-frame GPU cost in the tested scene; it remains disabled and has not passed its first-gain gate. It does not yet implement Microsoft account login, ray tracing or measured energy savings. See the linked implementation, deployment and third-party documents before running it.