Rust入门实战 编写Minecraft启动器#1启动方法

首发于Enaium的个人博客


引言

想必大家都知道Minecraft这个游戏,它是一个非常有趣的游戏,有没有想过它是如何启动的呢?在本系列中,我们将使用Rust编写一个简单的Minecraft启动器。

本系列文章涉及的Rust知识并不多,了解Rust的基本语法即可,如果你对Minecraft或者Java有一定了解,那么会更容易理解本系列的内容。

观前须知

本系列文章只考虑如何完成一个简单的Minecraft启动器,不考虑支持启动老的游戏版本,也不考虑第三方的客户端,更不会去考虑正版验证等等,只是一个简单的启动器。

启动方法

首先Minecarft是使用Java编写的,所以我们需要通过执行Java命令来启动Minecraft,并且也需要添加一些参数,比如游戏的一些资源文件,Java的一些参数等等。

大概就像这样:

shell 复制代码
java -Xmx10745m -cp "minecraft.jar;lib/*" -Djava.library.path="natives" net.minecraft.client.main.Main --username yourname --version 1.21

下载资源

第一步我们需要下载Minecraft的资源文件,包括游戏本体、依赖库、资源文件。

http://launchermeta.mojang.com/mc/game/version_manifest.json这个地址可以读取到游戏所有版本。

https://piston-meta.mojang.com/v1/packages/<sha1>/<version>.json这个地址可以获取到游戏的配置信息。

http://resources.download.minecraft.net/<sha1_first_two>/<sha1>这个地址可以获取到游戏的资源文件。

https://libraries.minecraft.net/<group>/<artifact>/<version>/<artifact>-<version>.jar这个地址可以获取到游戏的依赖库。

游戏目录结构

首先游戏的所有资源都在一个目录中,这个目录包括libraries、assets、versions等文件夹,这个目录通常是.minecraft。

libraries文件夹存放游戏的依赖库,目录结构和Maven的目录结构类似。

assets文件夹存放游戏的资源文件,其中包括objects和indexes,objects存放资源文件,所有的资源文件都是以sha1命名的,所以objects文件夹下有一个以2位sha1命名的文件夹,所有前两位sha1相同的资源文件都在这个文件夹下,indexes存放资源文件的索引文件,也就是包含了资源文件的真实名称和对应的sha1值。

versions文件夹存放游戏的版本文件,每个版本都有一个以版本号命名的文件夹,这个文件夹包括natives,它存放游戏的本地库文件,我们需要在游戏启动的时候将所有native的jar文件都解压到这个文件夹下,这个文件夹还包括<version>.json,这个文件包括了游戏的配置信息,比如mainClass,assets等等,还有<version>.jar,这个文件是游戏的本体文件。

拼接命令

完成以上步骤后,我们就可以拼接命令了,首先是java的程序路径,然后是JVM参数,然后是classpath,接着是main方法的类路径,最后是Minecraft的参数。

拼接完成之后就可以执行这个命令启动游戏了。

项目结构

本项目分为 4 个模块:download, launch, model, parse。

  • download模块用于下载游戏资源文件。

  • launch模块用于启动游戏。

  • model模块用建立游戏的数据模型。

  • parse模块用于解析游戏的配置文件。

流程

建立资源模型 解析资源配置 下载游戏资源 拼接启动命令 启动游戏

结语

好了,本文就到这里了,之后的一些内容会在后续文章中介绍。

项目地址

相关推荐
Flynn Liang4 分钟前
Spring AI 2.0 深度解析:ChatClient、Advisor 链与 MCP——Java 工程师的 AI 落地最优解
java·人工智能·spring·大模型·架构设计·spring ai
灿飞11 分钟前
Kotlin与Java虚拟机六:基础与类型系统:一切皆对象,但对象有代价
java·kotlin
计算机毕设定制辅导-无忧学长20 分钟前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统
掘金者阿豪27 分钟前
SQL Server数据迁移完成后,凌晨的数据库告警该怎么查?
前端·后端
鶴哥只手遮天38 分钟前
AFSIM 2.9.0 深度解析·进阶卷第 1 章 插件源码精读:16 个 WSF 插件的架构与实现
后端
愚农搬码1 小时前
低代码表单与在线问卷不是一回事:产品定位和技术边界
后端
武子康1 小时前
固定时间步已经开了,为什么游戏回放还会走出不同位置?
人工智能·后端·agent
unconditional1 小时前
我拆了 sdkm 的自定义 SDK 机制:所谓“内置”,就是官方提前帮你填好的表
rust·开源
70后写java的老码农1 小时前
换模型只改三行配置:LangChain4j + Spring Boot 3.5 实战,一次分别接入 9 家模型服务
后端·ai编程
愚农搬码1 小时前
2026 年开源表单设计器选型:哪个更好用?
后端