想问一下他这种网页版MC是如何搭建的?

我我我我我我我我我我我我我我我 2026-08-24 12:24 1

https://kyomu.me/mc_1.8.8.html



还挺丝滑

最新回复 (8)
  • sduoduo 08-24 12:25
    1

    eagler craft

  • Kingrz 08-24 12:26
    2

    以下来自gemini 3.7 flash(aistudio)


    该链接(https://kyomu.me/mc_1.8.8.html)是在浏览器中直接运行的 《我的世界》(Minecraft)Java 1.8.8 网页版


    该实现基于开源社区著名的 Eaglercraft(或其升级分支 EaglercraftX) 项目。它的核心思路是:通过 Java 转译工具将 Minecraft 1.8.8 的客户端源码/字节码转译为 JavaScript 与 WebAssembly,并利用 HTML5 标准 API 完全重写原本依赖原生系统的图形、音频、存储及网络模块


    其具体技术实现架构与各模块原理如下:




    1. 代码转译与运行环境(Java → JS / WebAssembly)



    • 核心挑战:Minecraft 原版是基于 Java(JVM)编写的,而现代浏览器只能直接执行 JavaScript 和 WebAssembly。

    • 实现方案

      • 基于 MCP(Mod Coder Pack)对 Minecraft 1.8.8 进行反编译和代码清理。

      • 利用 TeaVM(或定制的 WASM 编译工具链),将 Java 字节码提前编译(AOT)转译成高度优化的 JavaScriptWebAssembly(.wasm)

      • 这样无需在客户端安装 Java 运行环境(JRE),浏览器即可直接以极高的性能运行游戏逻辑。






    2. 图形渲染(OpenGL → WebGL)



    • 核心挑战:原版 Minecraft 依赖 LWJGL(Lightweight Java Game Library)调用桌面端 OpenGL,浏览器无法直接调用桌面 OpenGL。

    • 实现方案

      • Eaglercraft 重构了底层渲染管道,将原版的 OpenGL 1.x/2.x/固定管线调用替换并映射到了 WebGL 1.0 / WebGL 2.0

      • 游戏画面直接绘制在 HTML5 的 <canvas> 画布上,利用 GPU 硬件加速完成区块渲染、光影、方块贴图和 GUI 绘制。






    3. 操作与交互(DOM API & Pointer Lock)



    • 鼠标视角控制:原版 MC 移动鼠标可以无限视角旋转。网页端通过调用浏览器的 Pointer Lock API(指针锁定) 隐藏光标并获取鼠标的相对移动增量(movementX / movementY)。

    • 全屏与按键拦截:使用 Fullscreen API 实现全屏,通过监听 keydown / keyup 事件捕获键盘输入,并拦截部分浏览器默认快捷键(如 Esc、空格、F5 等)。

    • 触控适配:Eaglercraft 还适配了移动端 Touch 事件,能够在手机/平板等无键盘设备上生成虚拟操纵杆和操作按键。




    4. 音频系统(OpenAL → Web Audio API)



    • 原版 MC 依赖 OpenAL 库提供 3D 空间音频和音效。

    • 网页端通过浏览器的 Web Audio API(AudioContext 重构音频引擎,支持背景音乐、脚步声、方块音效以及根据玩家与声源距离计算的立体声衰减。




    5. 存储与虚拟文件系统(IndexedDB)



    • 核心挑战:浏览器沙盒环境禁止网页直接读写操作系统的本地硬盘(如 .minecraft 目录)。

    • 实现方案

      • 使用浏览器的 IndexedDB 构建了一个虚拟文件系统(Virtual File System)。

      • 玩家的单人世界存档(Saves)、自定义皮肤(Skins)、按键配置(options.txt)、材质包(Resource Packs)均保存在浏览器的 IndexedDB 本地数据库中,关闭页面或刷新后依然保留。






    6. 多人联机与网络通信(TCP → WebSocket)



    • 核心挑战:浏览器出于安全限制无法建立任意的原始 TCP Socket 连接,无法直接连接标准的 Minecraft 原版服务器端口(25565)。

    • 实现方案

      • 客户端网络层被改造为基于 WebSocket(ws:// / wss://

      • 服务端中继/网关:搭配专用的 WebSocket 代理网关(如 EaglerXBungee 或 Wispcraft 代理),网关一端与网页客户端维持 WebSocket 长连接,另一端将数据转换为标准 Minecraft TCP 协议与后端 Java 游戏服务器通信,从而实现了多人联机。






    7. 单 HTML 文件打包(Single-File Offline Bundle)


    你在该链接看到的是一个 .html 文件(mc_1.8.8.html),这种打包方式通常具备以下特征:



    1. HTML 模板与启动器:包含 Canvas 容器、加载进度条以及启动配置项(eaglercraftXOpts)。

    2. 内联资源/资产包:将游戏基础资源(方块材质贴图、语言包、音频文件等打包为 .epk 或 Base64 编码的二进制 Blob 并在加载时解压)。

    3. 自包含离线运行:可以直接另存为 .html 文件到本地,双击在离线无网状态下通过浏览器独立游玩单人模式。

  • ccsgcpaws 08-24 12:27
    3

    国外有人写好的html,部署在静态服务器上就可以玩了

  • 我我我我我我我我我我我我我我我 楼主 08-24 12:29
    4

    @ccsgcpaws #3 所以甚至不需要小鸡有很好的配置就能跑?

  • samhou 08-24 12:29
    5

    加载界面已经给出来了:

    https://eaglercraft.com/zh

    https://gitflic.ru/project/lax1dude/eaglercraft-1_8

  • ccsgcpaws 08-24 12:33
    6

    @我我我我我我我我我我我我我我我 #4 评论区其他人有给官网了,上去下个1.12html放小🐔或cf pages都可以

  • 林地雪原-0062 08-24 13:06
    7

    webassembly。直接编译成二进制然后嵌入。。我之前也做过类似的小游戏嵌入网站

  • 1952444901 08-24 14:12
    8

    @我我我我我我我我我我我我我我我 #4 这类转JS的项目基本上吃的都是用户自己的性能,全量下载到本地缓存的

* 帖子来源NodeSeek
返回