minecraft吧 关注:2,568,785贴子:32,087,655

回复:我的世界启动器制作教程

只看楼主收藏回复

至此,第二部分完成。运行一下,是不是勾选正版登录以后游戏名字对应的文本框变灰了呢?贴吧吞帖严重,我就不截图了。


338楼2016-07-22 09:58
回复
    第三部分:正版登录的实现


    339楼2016-07-22 09:59
    回复
      2026-01-14 07:22:35
      广告
      不感兴趣
      开通SVIP免广告
      上述内容完成以后,我们就可以开始实现正版登录了。请大家浏览这个网站: http://wiki.vg/Authentication


      340楼2016-07-22 10:01
      回复
        网站里面全是英文,目前我没找到中文版网页,百度翻译的又是一团糟。大家先拿本英汉词典在电脑前先看着吧,我试试看能不能把网页翻译成中文然后传网盘。


        来自Android客户端341楼2016-07-23 16:08
        回复
          好吧,我可能翻译不了了。网页一抠下来就整个乱了。。。


          来自Android客户端342楼2016-07-24 17:47
          收起回复
            翻译好了一部分,用的特定的技术。
            上链接:http://pan.baidu.com/s/1c2x9PjM


            343楼2016-07-25 09:29
            回复
              从网页中我们可以看到,正版登录只需要向https://authserver.mojang.com/authentication请求一段json即可。具体请看网页。


              344楼2016-07-25 09:33
              回复
                于是我们在Launcher.cs中定义方法:
                public LauncherReturn YggLogin(String Email, String Password)
                {
                WebRequest wr = WebRequest.Create("https://authserver.mojang.com/authenticate");//创建请求对象
                wr.ContentType = "application/json";//定义Content-Type
                wr.Method = "post";//定义请求类型
                String uls = "{ \"agent\": { \"name\": \"Minecraft\", \"version\": 1 },\"username\": \"" + Email + "\", \"password\": \"" + Password + "\"}";//处理数据
                byte[] bs = Encoding.UTF8.GetBytes(uls);//上传数据部分
                wr.ContentLength = bs.Length;//上传数据部分
                Stream sw = wr.GetRequestStream();//上传数据部分
                sw.Write(bs, 0, bs.Length);//上传数据部分
                sw.Flush();//上传数据部分
                sw.Close();//上传数据部分
                LauncherReturn lr = new LauncherReturn();//定义返回量
                StreamReader sr = new StreamReader(wr.GetResponse().GetResponseStream());//读取返回数据部分
                string rtxt = sr.ReadToEnd();//读取返回数据部分
                int tmp = rtxt.IndexOf("accessToken") + "accessToken".Length + 3;//读取json部分
                String accessToken = rtxt.Substring(tmp, rtxt.IndexOf("\"", tmp) - tmp);//读取json部分
                tmp = rtxt.IndexOf("id") + "id".Length + 3;//读取json部分
                String uuid = rtxt.Substring(tmp, rtxt.IndexOf("\"", tmp) - tmp);//读取json部分
                tmp = rtxt.IndexOf("name") + "name".Length + 3;//读取json部分
                String UserName = rtxt.Substring(tmp, rtxt.IndexOf("\"", tmp) - tmp);//读取json部分
                String legacy = "Legacy";//定义Legacy
                if(rtxt.IndexOf("legacy")==-1){//如果有说明是Legacy
                legacy = "mojang";//设置
                }
                lr.rtvs = new String[] { UserName, accessToken, uuid ,legacy};//赋值
                return lr;//返回
                }


                345楼2016-07-25 09:38
                收起回复
                  2026-01-14 07:16:35
                  广告
                  不感兴趣
                  开通SVIP免广告
                  相信您一定注意到了,启动时有一个UserType参数,之前我们给的都是Legacy。而正版登录后我们需要将它改成mojang。


                  346楼2016-07-25 09:40
                  回复
                    至此,第三部分结束。


                    348楼2016-07-25 09:42
                    收起回复
                      第四部分:离线登录


                      349楼2016-07-25 09:43
                      回复
                        如果这名用户没有正版账号,我们应该在uuid处填什么?不填?当然不行!由于现在很多服务器都是靠uuid认人,我们的启动器也要保证uuid和昵称一致对应。


                        350楼2016-07-25 10:20
                        回复
                          我的思路是在一开始就为每个用户名生成专属的随机uuid,存储下来,以后每次都用这个即可。
                          至于怎么生成,每种语言都有自己的方式。比如Java里可以用UUID随机生成,C#里可以用GUID随机生成。如果您正在使用的编程语言实在没有类似的可以生成一串由字母和数字组成的32位字符串,那么您只有声明一个字典,循环32次生成随机值作为索引去取字典里的内容。


                          351楼2016-07-25 11:08
                          收起回复
                            要修改的代码太多,很多集中在Launcher.cs中,直接上网盘链接:http://pan.baidu.com/s/1qYznqQ4


                            352楼2016-07-25 11:11
                            回复
                              2026-01-14 07:10:35
                              广告
                              不感兴趣
                              开通SVIP免广告
                              至此,第四部分结束。


                              353楼2016-07-25 11:14
                              回复