Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 36676|回复: 362

[其它开发教程] KMCCC使用教程(使用量超过360w的C#游戏启动核心|2017年11月15日更新)

  [复制链接]
发表于 2015-8-24 12:44:47 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 gamerteam 于 2017-11-15 19:26 编辑

KMCCC(Kblack's Minecraft Core Code)是Kblack(@zhouyiran2 )制作的一个C#版的启动核心,拥有以下优点

功能多:包含Json解析(LitJson),Java路径获取,Versions版本获取,文件解压,系统信息获取,以及Libraries文件获取、MojangAPI等。
开源:任何人都可以免费使用,如需修改源码,请务必遵守LGPL协议。
简单:启动只需要几句代码即可。


使用本启动核心的服务器/启动器有:

中国Minecraft口袋妖怪服务器群组(BakaXL)

                               
登录/注册后可看大图


MC部落(mclansLauncher)

                               
登录/注册后可看大图


Minecraft星空物语群组服(McxkLauncher)

                               
登录/注册后可看大图


MCMV3

                               
登录/注册后可看大图



适用人群:拥有C#一定基础的开发者

Github链接:https://github.com/MineStudio/KMCCC
使用KMCCC的Demo启动器:https://github.com/MineStudio/MCMV3


注意事项
考虑到大部分新手都是使用WinForm开发,本文以WinForm为例,同时我也会标注一些WPF可能不同的代码。

KMCCC需要.net framework 4.0的开发环境,用户也需要安装.net framework 4.0才可以使用


目录


1.启动游戏

2.错误信息的处理

3.游戏信息和Java的获取

4.高级工具的使用(1)

5.高级工具的使用(2)





注:原作者已经放弃本项目,除重大BUG将不会再进行更新,我将继续做KMCCC的更新维护工作。


(PS:吐槽一句,上面的启动器大部分我都参与了开发)
如果你对KMCCC的使用有疑问,欢迎帖子留言,我会尽量帮助你完成属于你的启动器!

KMCCC更新记录:
0.9.5.4:修正了不兼容老版本(例如1.7.2)的Assets读取目录错误问题,修正了1.9.4Forge无法加载Assets的问题,添加了自定义验证服务器设置
0.9.5.6:添加Version_Type设置,默认为KMCCC
0.9.5.7:兼容17w43b版本后修改的JSON格式,KMCCC.Pro增加MojangAPI(目前有销量查询与MojangAPI服务状态查询)

评分

参与人数 64人气 +73 金粒 +576 收起 理由
gooding300 + 1 图片全挂了
Luckily_Baby + 2 + 10 十二岁的小萝莉不容易~
754503921 + 2 十二岁的小萝莉不容易~
nidb + 1 12岁的小萝莉不容易~
縻风 + 2 十二岁的小萝莉不容易~
摇摇车 + 1 + 1 十二岁的小萝莉不容易~
WANG丶 + 2 我可能以前见过的都是些假萝莉.
warmthdawn + 5 很棒的作品!
智障冷风=-= + 1 + 10 十二岁的小萝莉不容易~
@Mc_CreateC + 1 + 15 十二岁的小萝莉不容易~
nsisogf + 1 + 10 十二岁小萝莉prprprpprpr
HQcxf + 1 12岁小萝莉援交挣学费真不容易啊。这样吧,.
boos-panda + 1 12的小萝莉厉害!厉害!,要详细!要详细!.
zc2202 + 1 终于找到用C#写的了,内牛满面啊..
ustc_zzzz + 1 十二岁的小萝莉不容易~
HAHAML + 1 十二岁的小萝莉不容易~
Xiao_Fang_He + 1 楼主你太帅了~
1582952890 + 1 十二岁的小萝莉不容易~
a2455564728 + 3 + 20 12岁小萝莉援交挣学费不容易,这样吧,我出.
Kelcoin + 20 十二岁的小萝莉不容易~

查看全部评分

 楼主| 发表于 2015-8-24 13:45:52 | 显示全部楼层

1.启动游戏和版本获取

本帖最后由 gamerteam 于 2016-3-27 02:42 编辑

使用前的准备:
启动游戏非常简单,只需要一行代码即可。

在这之前,先添加KMCCC.Pro.dll的引用(DLL文件请自行克隆Github的项目,然后编译。注意,编译KMCCC需要你的电脑安装了WindowsSDK。以及再次强调,如果你没有任何C#基础,请放弃本文)

                               
登录/注册后可看大图


然后打开Program.cs(如果是WPF则是App.xmal.cs)添加KMCCC的引用:
  1. using KMCCC.Launcher;
复制代码


然后在入口处添加以下代码
  1. public static LauncherCore Core = LauncherCore.Create();
复制代码

如图所示

                               
登录/注册后可看大图


同时建议添加以下代码,方便KMCCC统计你启动器的使用量和启动情况(KMCCC将会严格保护用户隐私,只反馈启动信息和系统配置信息,你随时可以取消反馈)
  1. Reporter.SetClientName("启动器名称+版本");
复制代码



然后在主窗口添加一个ComboBox和Button控件,后面会用到。

                               
登录/注册后可看大图

获取版本列表:
在窗口事件上面(双击标题栏即可),添加以下代码:WinForm后台代码
  1.             var versions = Program.Core.GetVersions().ToArray();
  2.             comboBox1.DataSource = versions;//绑定数据源
  3.             comboBox1.DisplayMember = "Id";//设置comboBox显示的为版本Id
复制代码

WPF xmal代码:
  1. <ComboBox x:Name="comboBox1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="168" DisplayMemberPath="Id" />
复制代码
DisplayMemberPath="Id" 为关键,等同于上面的comboBox1.DisplayMember = "Id";


启动游戏:
接下来在Button事件上,添加以下代码
  1. var ver = (KMCCC.Launcher.Version)comboBox1.SelectedItem;
  2. var result = Program.Core.Launch(new LaunchOptions
  3. {
  4. Version = ver, //Ver为Versions里你要启动的版本名字
  5. MaxMemory = 1024, //最大内存,int类型
  6. Authenticator = new OfflineAuthenticator("ZhaiSoul"), //离线启动,ZhaiSoul那儿为你要设置的游戏名
  7. //Authenticator = new YggdrasilLogin("邮箱", "密码", true), // 正版启动,最后一个为是否twitch登录
  8. Mode = LaunchMode.MCLauncher, //启动模式,这个我会在后面解释有哪几种
  9. Server = new ServerInfo {Address = "服务器IP地址",Port="服务器端口"}, //设置启动游戏后,自动加入指定IP的服务器,可以不要
  10. Size = new WindowSize {Height = 768, Width = 1280} //设置窗口大小,可以不要
  11. });
复制代码


测试前的准备:
然后进入程序编译后的文件夹(默认为bin/debug),复制一个.minecraft进去(只需要包含Libraries和Versions即可)

                               
登录/注册后可看大图



然后编译并运行,效果如下:

                               
登录/注册后可看大图




其他信息:
Authenticator为验证模式,有离线启动和正版验证两种,详见上面的代码。

Mode为启动模式,KMCCC拥有三种启动模式,分别为默认、BMCL、MCLauncher模式

默认:设置游戏的默认加载目录为.minecraft(即Mods,resourcepacks等文件将放在.minecraft中)
BMCL模式:复制coremods到Versions/版本 里,参见BMCL的启动模式
MCLauncher模式:Mods和resourcepacks等资源文件均放在Versions/版本 里面,适合有不同游戏版本的客户端

评分

参与人数 3人气 +2 金粒 +1 收起 理由
duang2333 + 1 然后编译并允许,允许什么鬼
ufof + 1 WinForm差评 WPF大法好
丶皇天 + 1 给十二岁的小萝莉再来一发~

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-8-24 14:13:23 | 显示全部楼层

2.启动错误信息的处理

本帖最后由 gamerteam 于 2015-8-26 01:55 编辑

不是每个用户都会处理错误的,所以这时候我们需要错误信息来提示他们怎么解决。

我们只需在上面的启动代码后面,加上以下代码即可

当然,如果你想出错后弄一个自动修复什么的也是可以的,不过那需要你自己研究了{:10_525:}

  1.             if (!result.Success)
  2.             {
  3.                 //MessageBox.Show(result.ErrorMessage, result.ErrorType.ToString());
  4.                 switch (result.ErrorType)
  5.                 {
  6.                     case ErrorType.NoJAVA:
  7.                         MessageBox.Show("你系统的Java有异常,可能你非正常途径删除过Java,请尝试重新安装Java\n详细信息:" + result.ErrorMessage,"错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
  8.                         break;
  9.                     case ErrorType.AuthenticationFailed:
  10.                         MessageBox.Show(this, "正版验证失败!请检查你的账号密码", "账号错误\n详细信息:" + result.ErrorMessage,MessageBoxButtons.OK,MessageBoxIcon.Error);
  11.                         break;
  12.                     case ErrorType.UncompressingFailed:
  13.                         MessageBox.Show(this, "可能的多开或文件损坏,请确认文件完整且不要多开\n如果你不是多开游戏的话,请检查libraries文件夹是否完整\n详细信息:" + result.ErrorMessage, "可能的多开或文件损坏",MessageBoxButtons.OK,MessageBoxIcon.Error);
  14.                         break;
  15.                     default:
  16.                         MessageBox.Show(this,
  17.                             result.ErrorMessage + "\n" +
  18.                             (result.Exception == null ? string.Empty : result.Exception.StackTrace),
  19.                             "启动错误,请将此窗口截图向开发者寻求帮助");
  20.                         break;
  21.                 }
  22.             }
复制代码



这里我们将libraries改名一下,然后再启动游戏,就会出现以下错误:

                               
登录/注册后可看大图

我这里给一些开发者一些提示,比如上面的,缺少libraries会出现文件解压错误,建议搭配BMCLAPI下载缺失的libraries文件,怎么获取缺少哪些libraries文件,我将会在后面的章节进行说明。

评分

参与人数 1人气 +1 金粒 +5 收起 理由
tallmoon + 1 + 5 楼主更新啊

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-8-24 19:02:39 | 显示全部楼层

游戏信息和Java的获取

本帖最后由 gamerteam 于 2015-11-11 13:16 编辑

Libraries丢失的文件列表获取:
我们知道,玩家可能会丢失一些重要的文件,导致MC无法正常开启(Assets丢失后只是无声或者不能中文,所以KMCCC目前还没获取丢失Assets哪些文件的功能),所以我们要知道,玩家到底丢了哪些文件。

首先,创建一个List<T>,例如
  1. private List<string> lostFlie = new List<string>();
复制代码

然后在我们上面写的启动事件上面,添加以下代码

  1.             lostFlie.Clear();//清空列表,防止重新启动后,列表重复
  2.             var core = LauncherCore.Create();
  3.             var version = Program.Core.GetVersion(comboBox1.Text);//设置读取的版本配置为当前选择的项
  4.             try
  5.             {
  6.                 var libs = version.Libraries.Select(lib => core.GetLibPath(lib));

  7.                 var natives = version.Natives.Select(native => core.GetNativePath(native));
  8.                 foreach (string libflie in libs)
  9.                 {
  10.                     if (!File.Exists(libflie))
  11.                     {
  12.                         //MessageBox.Show("当前缺少的Libraries文件有:" + libflie);
  13.                         lostFlie.Add(libflie);
  14.                     }
  15.                 }

  16.                 foreach (string libflie in natives)
  17.                 {
  18.                     if (!File.Exists(libflie))
  19.                     {
  20.                         //MessageBox.Show("当前缺少的Libraries-natives文件有:" + libflie);
  21.                         lostFlie.Add(libflie);
  22.                     }
  23.                 }
  24.                 MessageBox.Show("一共缺少"+lostFlie.Count+"个文件");
  25.                 return;//返回一个值,中止继续执行后面的代码
  26.             }
  27.             catch
  28.             {
  29.                 MessageBox.Show("版本信息获取失败!请确认已选择正确的核心版本");
  30.             }
复制代码




效果如图:

                               
登录/注册后可看大图


还记得我们之前改了Libraries文件名字的吧?现在来试试吧!看提示我们缺少哪些文件!

                               
登录/注册后可看大图



至于怎么配合BMCLAPI下载缺失的文件呢?这个就属于研究项目了,各位自行研究吧,其实很简单的。(提示:去掉Libraries前面的路径名,只保留文件在.minecraft里的路径,例如\libraries\org\lwjgl\lwjgl\lwjgl\2.9.0\lwjgl-2.9.0.jar,然后在修改后的路径名前面加上bmclapi的地址即可)


Java路径的获取
KMCCC自带了Java路径的获取工具,我们可以非常方便的读取玩家电脑里已经安装了哪些Java。
(我们更推崇不提供Java设置功能,让玩家自行安装完整版的Java。)

我们先给我们的窗口,添加一个TextBox(这只是举一个例子)

                               
登录/注册后可看大图



然后在窗口事件中,添加以下代码


  1. textBox1.Text = KMCCC.Tools.SystemTools.FindJava().Last();//textbox1显示我们找到的最后一个Java(也是最近安装的一个)
复制代码

效果如下:

                               
登录/注册后可看大图



注意!如果玩家电脑里没有安装Java,直接这样搜索会导致崩溃!

你需要加一个try来进行修复。
例如
  1. try{
复制代码



当然,要注意,KMCCC.Tools.SystemTools.FindJava()返回的是一个列表,.First()的意思是显示列表中的第一个。

你也可以再改进一下,让玩家自己选择使用哪个Java,就像下面这样。

                               
登录/注册后可看大图


很简单,就交给你们自己研究了。总之要用到.ToList()就对了

注意,并不支持绿色版的Java,如果玩家是通过非正常方式卸载的Java(例如直接删除)的话,注册表是会有残留信息的,我们依然会检测到那个并不存在的Java。

(PS:WinForm用得我想死了,还是建议大家试试WPF吧)


回复

使用道具 举报

 楼主| 发表于 2015-8-24 19:05:04 | 显示全部楼层
本帖最后由 gamerteam 于 2015-8-27 11:54 编辑

高级工具的更新将会暂缓,因为确实KMCCC的功能略多,就前面的教程已经足够写一个完整的启动器了。本贴待更新将更新更多实用功能,例如修改游戏标题,系统信息获取等
只接受提问和指导,如需定制启动器,详见我签名

回复

使用道具 举报

 楼主| 发表于 2015-8-24 19:05:42 | 显示全部楼层
占楼,待更新
回复

使用道具 举报

 楼主| 发表于 2015-8-24 19:04:01 | 显示全部楼层
本帖最后由 gamerteam 于 2015-11-4 02:39 编辑

相信用的人已经发现,版本选择是不允许string类型的,如果我想默认选择一个版本,或者我知道那个版本名字是多少,该怎么做呢?
这时候就需要用到GetVersion工具了。使用方法如下:

  1. var core = LauncherCore.Create();
  2. var Launchversion = core.GetVersion("版本名字");
复制代码


然后在启动版本选择位置,就可以使用Launchversion了

  1.             var result = Program.Core.Launch(new LaunchOptions{
  2.                     Version = Launchversion , //Ver为Versions里你要启动的版本名字
  3.                     MaxMemory = 1024, //最大内存,int类型
  4.                     Authenticator = new OfflineAuthenticator("ZhaiSoul"), //离线启动,ZhaiSoul那儿为你要设置的游戏名
  5.                     //Authenticator = new YggdrasilLogin("邮箱", "密码", true), // 正版启动,最后一个为是否twitch登录
  6.                     Mode = LaunchMode.MCLauncher, //启动模式,这个我会在后面解释有哪几种
  7.                     Server = new ServerInfo {Address = "服务器IP地址"}, //设置启动游戏后,自动加入指定IP的服务器,可以不要
  8.                     Size = new WindowSize {Height = 768, Width = 1280} //设置窗口大小,可以不要
  9.                 });
复制代码


回复

使用道具 举报

发表于 2015-8-24 22:22:57 | 显示全部楼层
楼主发本帖后既易语言成为启动器广泛使用的语言后,C#成为了第二大启动器语言

评分

参与人数 2人气 +1 金粒 +1 收起 理由
zbx1425 + 1 哼 VB.NET才是
huanghongxun + 1 C#已是第二大启动器语言

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2015-8-24 23:13:58 | 显示全部楼层
8900581 发表于 2015-8-24 22:22
楼主发本帖后既易语言成为启动器广泛使用的语言后,C#成为了第二大启动器语言 ...

C#做启动器本来就很容易,其实不管什么语言,只要你会了基础,然后随便网上搜一个json解析工具,自己就可以写一个启动器了
回复

使用道具 举报

发表于 2015-8-25 00:23:57 | 显示全部楼层
gamerteam 发表于 2015-8-24 23:13
C#做启动器本来就很容易,其实不管什么语言,只要你会了基础,然后随便网上搜一个json解析工具,自己就可 ...

易语言更容易,XX模块_游戏启动()
手动斜眼
回复

使用道具 举报

 楼主| 发表于 2015-8-25 10:04:35 | 显示全部楼层
8900581 发表于 2015-8-25 00:23
易语言更容易,XX模块_游戏启动()
手动斜眼

这也是模块,启动游戏和版本选择,就上面的代码已经搞定
回复

使用道具 举报

发表于 2015-8-25 13:41:53 | 显示全部楼层
支持楼主,表示楼主教程写的很棒
回复

使用道具 举报

 楼主| 发表于 2015-8-26 01:52:45 | 显示全部楼层
tallmoon 发表于 2015-8-25 13:41
支持楼主,表示楼主教程写的很棒

{:10_510:}不给人气就不更,啦啦啦啦啦

评分

参与人数 4人气 +6 金粒 +35 收起 理由
gooding300 + 3 更新QwQ
白狼oy + 1 + 15 多更些啦~
jhjhjhjh + 1 + 15 金粒人气都给你~快更新0.0
tallmoon + 1 + 5 上面我给你了啊,加油更

查看全部评分

回复

使用道具 举报

发表于 2015-8-26 11:37:54 | 显示全部楼层
100个使用C#和BakaXL的理由
回复

使用道具 举报

发表于 2015-8-26 17:03:08 | 显示全部楼层
{:10_492:}写得很详细嘛 (听说楼主是个小萝莉,而且只有12岁,然而却被kblack爆过,太残忍了,太变态了

评分

参与人数 3人气 +2 金粒 +6 收起 理由
simon3000 + 2 一群禽兽(mark)
godhonest + 5 谢谢科普~~~
zhouyiran2 + 1 YOU are being WATCHED

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2018-10-21 17:47 , Processed in 0.136291 second(s), 7 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表