从零开始制作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++开源)的更多相关文章

  1. 从零开始制作 Hexo 主题

    原文地址:从零开始制作 Hexo 主题 · Ahonn 写在前面 本文将会从零开始开发一个简单的博客主题.样式主要参考 Hexo theme 中的 Noise 主题. 开始之前你需要了解: 模板引擎  ...

  2. WordPress 主题教程:从零开始制作 WordPress 主题

    为什么要开发WordPress主题? WordPress主题由一系列文件和样式表单组成,这些文件和样式表单共同作用生成WordPress网站的外观.每个主题都不同,用户可以通过这些主题随心所欲地更换自 ...

  3. Docker之从零开始制作docker镜像

    以前学习docker是直接docker pull命令直接拉取Linux中已有镜像,并创建容器,添加应用程序,但是docker镜像一开始是怎么来的呢?下面将从零开始介绍整个docker镜像的制作过程(初 ...

  4. 快Key:按一下鼠标【滚轮】,帮你自动填写用户名密码,快速登录,可制作U盘随身(开源免费-附安装文件和源代码)

    * 代码以本文所附下载文件包为准,安装文件和源文件包均在本文尾部可下载. * 快Key及本文所有内容仅供交流使用,使用者责任自负,由快Key对使用者及其相关人员或组织造成的任何损失均由使用者自负,与本 ...

  5. Docker 从零开始制作基础镜像[centos]

    http://www.oschina.net/news/62897/docker-hub-contains-high-risk-vulnerabilities 这里有个统计,docker官方和个人发布 ...

  6. 使用asp.net从零开始制作设计网站---转载

    首先感谢提供此教程的朋友,可以给大家学习的机会,很有用,留着好好学.如下正文: 1. 申请域名 2. 购买空间 3. 备案 4. 使用photoshop完成设计与切图  5. 使用dreamweave ...

  7. 从零开始制作jffs2文件系统

    JFFS2 是一个开放源码的项目(www.infradead.org). 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用. 1.       安装mkfs工具 MTD主页:htt ...

  8. BeagleBone Black的内核移植-从零开始制作镜像

    很多年前做的针对BeagleBone Black开发板的镜像制作,因为当时涉及到非标准化的,所以把基本的kernel.uboot和跟文件系统rootfs都做了一遍,文中只做移植,不作定制化的修改. 如 ...

  9. 从零开始制作H5人脸融合小游戏

    去年的建军节,一个展示军装照的H5人脸融合游戏火遍朋友圈,带来很好的传播效果.最近欧冠决赛要来了,公司决定做一个寻找和你最像的欧冠球星的H5游戏,那么该怎么做呢?认真分析了一下,这个游戏其实用到的技术 ...

随机推荐

  1. Windows下的SVN环境搭建详解

    前言:最近因为要和其他人合作开发项目,所以花时间搭建了SVN的环境. 因为是初次使用SVN,对于SVN的环境搭建很不熟悉,再加上网上的教程都介绍的比较粗略,导致前前后后重做了几次. 当然最终是搭建成功 ...

  2. 转:内核空间与用户空间数据交换的方式之一 --ioctl(通过字符设备演示)

    对于linux而言,内核程序和用户程序分别运行在内核空间和用户空间,要实现两者的数据交换,主要有以下几种方式:系统调用,读写系统文件(procfs,sysfs, seq_file,debugfs等), ...

  3. Android 每隔3s更新一次title

    MainActivity.java public class MainActivity extends Activity { private static int i=0; @Override pro ...

  4. hdu 3435 A new Graph Game

    http://acm.hdu.edu.cn/showproblem.php?pid=3435 #include <cstdio> #include <iostream> #in ...

  5. yum 使用说明

    linux如何安装yum 使用YUM来安装软件,就可以不用去到处找依赖关系的RPM了.很方便. 第一步:安装yum  第二步:下载createrepo包并安装 下载地址: ftp://195.220. ...

  6. Android中Intent的使用

    1./以下是常用到的Intent的URI及其示例,包含了大部分应用中用到的共用Intent. //一.打开一个网页,类别是Intent.ACTION_VIEW Uri uri = Uri.parse( ...

  7. Linux之V4L2视频采集编程详解

     V4L2(Video For Linux Two) 是内核提供给应用程序访问音.视频驱动的统一接口. Linux系统中,视频设备被当作一个设备文件来看待,设备文件存放在 /dev目录下,完整路径的设 ...

  8. [原创]# 玩转nginx系列

    首先先上如何彻底删除nginx 看到这个标题的小伙伴都惊呆了,还不知道怎么搞,却叫我怎么卸载.为什么我要这样,其实,Reset也是一种解决问题的方式嘛. 首先执行下卸载命令 sudo apt-get ...

  9. URL中的空格字符如何编码

    URL encoding the space character: + or %20? 简单理解: ‘?’前的路径中的空格必须为’20%’ ‘?’后的参数中空格可以被编码成’+’(正常情况),然而有时 ...

  10. 使用GCM服务(Google Cloud Messaging)实现Android消息推送

    最近在网上查了关于很多Android消息推送的资料,其中主要有四种方法. 1) 使用GCM服务(Google Cloud Messaging) 2) 使用XMPP协议(Openfire + Spark ...