从零开始制作Minecraft启动器(C++开源)
从零开始制作Minecraft启动器(C++开源)
新手飙车了~~~,MC启动器源码大放送,随心所欲打造自己的专属MC启动器,这不是易语言,是C++。。。分析原理,关键源码都有详细的注释,代码编好就打包放送,所以说凌乱无比。。。
下载地址:
百度网盘:http://pan.baidu.com/s/1i3UDOXn
CSDN下载:http://download.csdn.net/detail/u010661060/9376136
MClauncher(公版)启动器界面:


代码全部开源,拥有详细的注释:


测试过的平台:windows7 64位、windowsXP,在这两个平台上都能运行。
测试MC启动版本:Minecraft1.7.10纯净版、Minecraft1.7.10 forge版都能启动,讲道理的话,其他版本的游戏也有可能启动。。。
特别说明:
因为采用的Qt为夸平台软件,编译出来的exe文件运行需要很多的夸平台库,这样的话导致启动器比一般的都要大而且启动器目录非常混乱,为了解决此问题,已将所有的库文件和exe打包成新的exe文件了,直接点击MClauncher.exe运行即可。注意,360会瞎比报毒,直接无视即可。。。
历经千辛万苦终于撸出了自己的启动器,尽管还有无数的BUG,但至少能用了。。。
刚开始什么都不知道,在网上大量搜索MC启动器源码、MC启动原理等。搜索到的源码还是挺多的,但是大多是易语言写的,下了好多下来。但是,不懂易语言,愣是没看懂怎么启动的。后想到Google上找点源码,但是有GFW的存在,买不起VPN,好多网页都打不开,而且最为关键的是尼玛看不懂英文啊。后来在某个论坛里看见一条回复,说是要启动MC,分析里面的JSON文件就可以了,看到这句话,制作MC启动器终于有了眉目了。
先着手分析MC启动器启动参数,参考旋律启动器,打开旋律启动器调试开关,就可获得启动器传给游戏的参数。当然,也可以打开cmd,在启动器启动时输入“wmic process where caption="javaw.exe" get caption,commandline /value>D:\canshu.txt”参数,即可获得启动器参数。
在看MC启动器参数之前,先来看看运行jar包参数传递及依赖关系分析。
之前为了弄清MC参数传递,特地做了个小的java程序模拟MC游戏,这样不必在庞大的MC游戏上做这个小参数测试。

小游戏启动脚本:
java -Xmx1024m -Dplayer.name=BlueCat -cp HelloFrame.jar HelloFrame
参数分析:
-Xmx1024m:代表JVM最大堆内存值(不懂,反正照着别人的抄就行。。。)
-Dplayer.name:(用-D<name>=<value>来设定系统属性值)这里利用来传递游戏参数,在java程序里可以用:System.getProperty("player.name")获得其值,这样就可以在测试窗口上显示玩家名称了。
-cp:目录和 zip/jar 文件的类搜索路径,后面的参数为main函数执行所依赖的jar包,以及其所在的jar包,无先后顺序。
最后一个参数:指定main函数所在的类HelloFrame,若该类在包中,前面加上包名,否则只写类名即可。
现在再来看真正的Minecraft启动参数,太长了,分段来看。
第一段:
C:\Program Files\Java\jre7\bin\javaw.exe
(包含全路径的javaw.exe)
第二段:
-Xmx1024m
-Dfml.ignoreInvalidMinecraftCertificates=true
-Dfml.ignorePatchDiscrepancies=true
-Djava.library.path=".minecraft\natives"
(堆内存及相关系统变量设置)
第三段:
-cp “ ...(此处省略一万个jar包)...1.7.10-Forge10.13.2.1230.jar”
(所依赖的jar包)
第四段:
net.minecraft.launchwrapper.Launch
(main所在的类)
第五段:
--username BlueCat
--version 1.7.10-Forge10.13.2.1230
--gameDir .minecraft
--assetsDir .minecraft\assets
--assetIndex 1.7.10
--uuid ${auth_uuid}
--accessToken ${auth_access_token}
--userProperties {}
--userType legacy
--tweakClass cpw.mods.fml.common.launcher.FMLTweaker
(游戏参数,在JSON文件中的minecraftArguments)
在模拟小程序中,除了第五段没有模拟外,其他都是类似的。
启动游戏时传递这些参数即可启动游戏了,这些参数都可以从JSON文件中获得,当然有些参数是固定的有的是自己设置,比如游戏名字自己设置吧。
所说的JSON文件在.minecraft\versions\1.7.10\目录下的1.7.10.json

重要的参数都在这里,所以启动器要做的就是解析这个JSON文件,获得其中的值,转化为启动参数,传递给JVM就可以了。所以,做启动器做的最多的就是字符串处理了,我是个菜鸡,C++和Qt都是半吊子,一知半解,也不知道有什么好的方法。反正很多地方都做得比较蠢,代码也写的相当的凌乱,想起什么就写什么,写到最后连我自己都理不清思路了,所以看源代码可能会比较费解,不过关键的方法都有注释。在阅读源代码时记住一条,所做的一切的目的是将JSON中的一串字符转化为合适的启动参数。所以在看到代码在瞎JB做循环或者突然减个1时,不要懵圈了,~_~。关于启动器的原理就说这么多了,更多的查看源代码,哈哈~~~。
噢,对了,还有些事情。
1、 就是希望大家帮忙测试启动器,BUG发送至我的邮箱1425078914@qq.com,感激不尽!
可能不会尽快修复BUG,因为有更重要的事情要做,应该最近很长一段时间内不会再碰启动器了。
2、 公版启动器现存的BUG:
(1)在选启动版本时存在窗口滑动BUG,类似下图。

这个BUG,我暂时无能为力,我只是一只菜鸡,在不断的学习中。。。
(2)那个自动设置内存选项是假的,就是固定设置为1024m,我暂时还不知到怎么弄。
(3)java路径自动查找算法还有待强化,这其实也不太算是BUG,目前只是查找系统环境变量中PATH中含有的java路径,在别的电脑上测试时有失败过。
3、 关于制作启动器过程中一点蛋疼的问题
先是在Qt4上撸出了启动器的界面,大多按钮采用假连接,后来到解析JSON文件时才发现Qt4没有JSON相关的类,JSON相关的类从Qt5才开始有。于是跑到官网上下了最新版的Qt5.5.1(minGW版),编译好了程序一运行就导致Qt Creater一直未响应,这真的是很蛋疼。后来换到Qt5.0.2才没有这个问题,可是这版本编译的Release版要在没有装Qt的电脑上运行很麻烦,要多很多的库文件。于是,又下了个Qt5.5.0,还是有一直未响应的问题。所以呢,最后用Qt5.0.2编译调试,然后用Qt5.5.0编译在别的电脑上测试。。。
4、 最后一点,参考旋律启动器时有个natives文件夹,里面放的是些dll文件,不知道有什么用,反正没了就是启不动,旋律缺少的话是下载过来的。在这里的话,我是解压相关jar包中的文件到该目录下的,所以,公版启动器中还内置了一个unzip32.exe程序。
启动器是从零开始撸出来的,很多地方不是很理解,也有的地方做的有些愚,还望有大牛能够指点一二,万分感谢!!!
从零开始制作Minecraft启动器(C++开源)的更多相关文章
- 从零开始制作 Hexo 主题
原文地址:从零开始制作 Hexo 主题 · Ahonn 写在前面 本文将会从零开始开发一个简单的博客主题.样式主要参考 Hexo theme 中的 Noise 主题. 开始之前你需要了解: 模板引擎 ...
- WordPress 主题教程:从零开始制作 WordPress 主题
为什么要开发WordPress主题? WordPress主题由一系列文件和样式表单组成,这些文件和样式表单共同作用生成WordPress网站的外观.每个主题都不同,用户可以通过这些主题随心所欲地更换自 ...
- Docker之从零开始制作docker镜像
以前学习docker是直接docker pull命令直接拉取Linux中已有镜像,并创建容器,添加应用程序,但是docker镜像一开始是怎么来的呢?下面将从零开始介绍整个docker镜像的制作过程(初 ...
- 快Key:按一下鼠标【滚轮】,帮你自动填写用户名密码,快速登录,可制作U盘随身(开源免费-附安装文件和源代码)
* 代码以本文所附下载文件包为准,安装文件和源文件包均在本文尾部可下载. * 快Key及本文所有内容仅供交流使用,使用者责任自负,由快Key对使用者及其相关人员或组织造成的任何损失均由使用者自负,与本 ...
- Docker 从零开始制作基础镜像[centos]
http://www.oschina.net/news/62897/docker-hub-contains-high-risk-vulnerabilities 这里有个统计,docker官方和个人发布 ...
- 使用asp.net从零开始制作设计网站---转载
首先感谢提供此教程的朋友,可以给大家学习的机会,很有用,留着好好学.如下正文: 1. 申请域名 2. 购买空间 3. 备案 4. 使用photoshop完成设计与切图 5. 使用dreamweave ...
- 从零开始制作jffs2文件系统
JFFS2 是一个开放源码的项目(www.infradead.org). 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用. 1. 安装mkfs工具 MTD主页:htt ...
- BeagleBone Black的内核移植-从零开始制作镜像
很多年前做的针对BeagleBone Black开发板的镜像制作,因为当时涉及到非标准化的,所以把基本的kernel.uboot和跟文件系统rootfs都做了一遍,文中只做移植,不作定制化的修改. 如 ...
- 从零开始制作H5人脸融合小游戏
去年的建军节,一个展示军装照的H5人脸融合游戏火遍朋友圈,带来很好的传播效果.最近欧冠决赛要来了,公司决定做一个寻找和你最像的欧冠球星的H5游戏,那么该怎么做呢?认真分析了一下,这个游戏其实用到的技术 ...
随机推荐
- 制作PHP安装程序的原理和步骤56
制作PHP安装程序的原理和步骤56 1.制作PHP安装程序的原理和步骤检查目录或文件的权限----修改或填加配置文件---检查配置文件正 确性---导入数据库----锁定或删除安装文件 原理: 其实P ...
- ionic框架,快速开发webAPP神器。
官网地址 http://www.ionicframework.com/ 这个国外框架已经很火了.会使用插件的话更好,例如支付宝支付插件,调用摄像头拍照,二维码扫描,通讯录,文件上传,推送信息等等. 最 ...
- js前台与后台数据交互
客户端脚本一般都在前台,这里讲的是(1)在后台调用前台定义的脚本(2)在后台如何注册客户端脚本 用途 何时使用服务器代码向页中添加客户端脚本: u 当客户端脚本的内容依赖于直到运行时才可用的信息时 u ...
- 转:Java反射教程
原文来自于:http://www.importnew.com/9078.html 什么是反射?反射有什么用处? 1. 什么是反射? “反射(Reflection)能够让运行于JVM中的程序检测和修改运 ...
- Vector3.Dot 与Vector3.Cross
Vector3.Dot(点积) : 点积的计算方式为: a·b=|a|·|b|cos<a,b>; 其中<a,b>和<b,a> 夹角不分顺序; 物理学中点积用来计算 ...
- SQLServer备忘
1,创建主键有三种方式,尤其注意联合主键: (1) (2) (3) 2,修改主键的方式 2,创建外键应该也有三种方式:
- Storm测试报告
http://blog.csdn.net/jmppok/article/details/17614431
- Android中的一些小知识
android中开发常用快捷键alt+/ 自动补全ctrl+1 有问题提示生成接收的参数 ctrl+L 在按2 注释// 注释 ctrl+//**/ 多行注释 ctrl+shift+/ android ...
- VC++中调用cmd的集中方式
1. system方法: 原型: int __cdecl system(const char *); 例如: system("ipconfig"); 2. WinExec方法: 相 ...
- HDOJ 1303 Doubles(简单题)
Problem Description As part of an arithmetic competency program, your students will be given randoml ...