minecraft吧 关注:2,568,825贴子:32,084,571

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

只看楼主收藏回复

String[] vins = listBox1.SelectedItem.ToString().Split(" ".ToCharArray());//分离出版本和下载地址


281楼2016-07-12 20:48
回复
    S t r i n g v d p = A p p l i c a t i o n . S t a r t u p P a t h + " \ \ . m i n e c r a f t \ \ v e r s i o n s \ \ " + v i n s [ 0 ] ; //处理下 载 目 标 路 径,别忘了删掉空格


    285楼2016-07-12 20:52
    回复
      2026-01-14 21:23:25
      广告
      不感兴趣
      开通SVIP免广告
      if (!Directory.Exists(vdp))//如果无文件夹
      {
      Directory.CreateDirectory(vdp);//创建
      }
      wc.DownloadFile(vins[1], vdp + "\\" + vins[0] + ".json");//处理并下载目标文件
      while (!File.Exists(vdp + "\\" + vins[0] + ".json"))//等待下载完成
      {
      System.Threading.Thread.Sleep(10);//休眠
      }
      String rtxt = File.ReadAllText(vdp + "\\" + vins[0] + ".json").Replace(" ", "").Replace("\n", "").Replace("\r", "").Replace("\t", "");//读取数据
      int a = rtxt.IndexOf("downloads");//读取主jar文件下载地址部分
      int b = rtxt.IndexOf("client", a);//读取主jar文件下载地址部分
      int c = rtxt.IndexOf("url", b) + "url".Length + 3;//读取主jar文件下载地址部分
      List<String> cu = new List<string>();//声明下载列表
      cu.Add(rtxt.Substring(c, rtxt.IndexOf("\"", c) - c) + ":::" + vdp + "\\" + vins[0] + ".jar");//加入下载项
      new ShowDownload().DownloadBL(cu, "restart");//执行下载并要求重启启动器


      286楼2016-07-12 20:53
      回复
        然后我们双击“获取纯净版列表”按钮,在button4_click()中键入代码:
        if (File.Exists(Application.StartupPath + "\\tmp.json"))//如果临时文件存在
        {
        File.Delete(Application.StartupPath + "\\tmp.json");//删掉
        }
        wc.DownloadFile("https://launchermeta.mojang.com/mc/game/version_manifest.json", Application.StartupPath + "\\tmp.json");//下载版本列表文件
        String rtxt = File.ReadAllText(Application.StartupPath + "\\tmp.json").Replace("\n", "").Replace(" ", "");//读取版本列表
        File.Delete(Application.StartupPath + "\\tmp.json");//删除临时文件
        int tmp = rtxt.IndexOf("versions") + "versions".Length + 3;//读取objects数组数据
        String versions_S = rtxt.Substring(tmp, rtxt.LastIndexOf("]", rtxt.Length - 1) - tmp);//同上
        String[] versions = versions_S.Replace("},{", "$").Split("$".ToCharArray());//分割数组
        String tmu = "";//声明并初始化tmu
        listBox1.Items.Clear();//清空列表
        foreach (String vi in versions)
        {//为每个项循环
        tmp = vi.IndexOf("id") + "id".Length + 3;//读取id
        tmu = vi.Substring(tmp, vi.IndexOf("\"", tmp) - tmp);//同上
        tmp = vi.IndexOf("url") + "url".Length + 3;//读取url
        String tmua = vi.Substring(tmp, vi.IndexOf("\"", tmp) - tmp);//同上
        listBox1.Items.Add(tmu + " " + tmua);//添加项
        }


        287楼2016-07-12 20:56
        回复
          转到ShowDownload.cs,将NextDownload方法改为
          private void NextDownload(object sender, AsyncCompletedEventArgs e)
          {//下载任务队列执行方法
          String[] uat;//声明公共数组uat
          if (pointer != 0)//如果不是刚开始
          {
          uat = targetURL[pointer - 1].Replace(":::", "|").Split("|".ToCharArray());//处理下载地址和目标文件路径
          if (new FileInfo(uat[1]).Length == 0)//检查上一个下载的文件
          {//如果下载出错
          File.Delete(uat[1]);//删掉有问题的文件
          }
          }
          if (pointer == targetURL.Count)//如果下载完成
          {
          if (reCall == "restart")//如果要重启
          {
          System.Diagnostics.Process.Start(Application.ExecutablePath);//运行
          Application.Exit();//退出
          return;//返回
          }
          if (reCall != "")//如果调用不为空
          {
          String[] ra = reCall.Replace(",%,%,", "\"").Split("\"".ToCharArray());//处理参数
          new Launcher().Launch(ra[0], ra[1], ra[2], ra[3], 0, true);//重新调用Launch方法并传参
          }
          this.Close();//关闭窗体
          return;//退出方法执行
          }
          listBox1.SelectedIndex = pointer;//选中正在下载的项,以告诉用户
          uat = targetURL[pointer].Replace(":::", "|").Split("|".ToCharArray());//处理下载地址和目标文件路径
          String s = uat[1].Replace(Path.GetFileName(uat[1]), "");//获得文件所在文件夹路径
          if (!Directory.Exists(s))//如果文件夹不存在
          {
          Directory.CreateDirectory(s);//创建文件夹(在C#里面可能是多余的,但是在其他编程语言中要这么做)
          }
          wc.DownloadFileAsync(new Uri(uat[0]), uat[1]);//下载指定的文件
          pointer = pointer + 1;//指针后退
          int per = pointer * 100 / targetURL.Count;//计算下载完成的百分比
          progressBar1.Step = per - progressBar1.Value;//设置进度条的单次前进值
          progressBar1.PerformStep();//进度条前进
          progperc.Text = per + "%";//显示最新的进度百分比(已取整)
          }


          288楼2016-07-12 20:58
          回复
            效果图:


            289楼2016-07-12 21:01
            回复
              当然,您也可以用bmclapi来完成。


              来自Android客户端290楼2016-07-14 10:12
              回复
                进阶八:Forge版的下载。


                来自Android客户端291楼2016-07-14 10:14
                回复
                  2026-01-14 21:17:25
                  广告
                  不感兴趣
                  开通SVIP免广告
                  您可以访问一下http://files.minecraftforge.net/,这里有所有Forge版本下载。


                  来自Android客户端292楼2016-07-14 11:19
                  回复
                    但是我们编写的是应用程序,它不能这么显示。


                    来自Android客户端293楼2016-07-14 17:55
                    回复
                      我们可以通过读取http://files.minecraftforge.net/maven/net/minecraftforge/forge/json来获取版本列表。


                      294楼2016-07-15 16:36
                      回复
                        内容如下:
                        {
                        "adfocus": "271228",
                        "artifact": "forge",
                        "branches": {
                        "1.10.0": [
                        1981,
                        1982,
                        1983,
                        1984,
                        1986,
                        1989,
                        1991,
                        1992,
                        1993,
                        1994,
                        1995,
                        1996,
                        1997,
                        1999,
                        2000,
                        2001,
                        2002,
                        2003,
                        2004,
                        2005,
                        2006,
                        2007
                        ],
                        "1.7.10": [
                        1300,
                        1307,
                        1340,
                        1342,
                        1343,
                        1346,
                        1347,
                        1351,
                        1352,
                        1355,
                        1356,
                        1358,
                        1360,
                        1362,
                        1363,
                        1364,
                        1365,
                        1366,
                        1367,
                        1368,
                        1369,
                        1370,
                        1372,
                        1373,
                        1374,
                        1376,
                        1377,
                        1378,
                        1379,
                        1380,
                        1381,
                        1382,
                        1383,
                        1384,
                        1385,
                        1387,
                        1388,
                        1399,
                        1400,
                        1403,
                        1406,
                        1407,
                        1408,
                        1420,
                        1422,
                        1424,
                        1428,
                        1445,
                        1447,
                        1448,
                        1451,
                        1452,
                        1456,
                        1469,
                        1470,
                        1472,
                        1481,
                        1490,
                        1492,
                        1517,
                        1539,
                        1540,
                        1541,
                        1557,
                        1558,
                        1564,
                        1566,
                        1614
                        ],
                        (省略)
                        },
                        "name": "Minecraft Forge",
                        "number": {
                        (省略)
                        "2014": {
                        "branch": null,
                        "build": 2014,
                        "files": [
                        [
                        "zip",
                        "mdk",
                        "6204d951e8095c73c4148371f41c997b"
                        ],
                        [
                        "txt",
                        "changelog",
                        "0bdda6e0cf112423fb35622c0aad4214"
                        ],
                        [
                        "jar",
                        "universal",
                        "4126bfa051ef8d17cb858e1aae64de2a"
                        ],
                        [
                        "jar",
                        "userdev",
                        "0b4d97e0d5605b709bdf40b4a4d88cb9"
                        ],
                        [
                        "exe",
                        "installer-win",
                        "79b51c42661e9a505324f662bd41890f"
                        ],
                        [
                        "jar",
                        "installer",
                        "87a2a5534b74c6f762a305a5abd2e840"
                        ]
                        ],
                        "mcversion": "1.10.2",
                        "modified": 1468437497.0,
                        "version": "12.18.1.2014"
                        }
                        },
                        "promos": {
                        "1.10-latest": 2000,
                        "1.10.2-latest": 2014,
                        "1.10.2-recommended": 2011,
                        "1.5.2-latest": 738,
                        "1.5.2-recommended": 737,
                        "1.6.1-latest": 775,
                        "1.6.2-latest": 871,
                        "1.6.2-recommended": 871,
                        "1.6.3-latest": 878,
                        "1.6.4-latest": 1345,
                        "1.6.4-recommended": 1345,
                        "1.7.10-latest": 1614,
                        "1.7.10-latest-1.7.10": 1343,
                        "1.7.10-recommended": 1558,
                        "1.7.2-latest": 1147,
                        "1.7.2-recommended": 1121,
                        "1.8-latest": 1577,
                        "1.8-recommended": 1563,
                        "1.8.8-latest": 1655,
                        "1.8.9-latest": 1902,
                        "1.8.9-recommended": 1722,
                        "1.9-recommended": 1887,
                        "1.9.4-recommended": 1976,
                        "latest": 2014,
                        "latest-1.7.10": 1343,
                        "recommended": 2011
                        },
                        "webpath": "http://files.minecraftforge.net/maven/net/minecraftforge/forge/"
                        }


                        295楼2016-07-15 16:39
                        回复
                          "1812": {
                          "branch": "1.9",
                          "build": 1812,
                          "files": [
                          [
                          "zip",
                          "mdk",
                          "1a0546cd564a78135f62fc0e7265e204"
                          ],
                          [
                          "txt",
                          "changelog",
                          "6afcf2b41dd937813a979f27b5666064"
                          ],
                          [
                          "jar",
                          "universal",
                          "2a8490dc8e84f7e7a9846aac08c7a196"
                          ],
                          [
                          "jar",
                          "userdev",
                          "5e4f07d8f0b56843245edfa2dbed6dbf"
                          ],
                          [
                          "exe",
                          "installer-win",
                          "d02954efb88c7b292d04320f538637d8"
                          ],
                          [
                          "jar",
                          "installer",
                          "344d63f0585087c1a129537328abc821"
                          ]
                          ],
                          "mcversion": "1.9",
                          "modified": 1459221310.0,
                          "version": "12.16.0.1812"
                          },


                          296楼2016-07-15 16:39
                          回复
                            您看到这些内容,也许会认为只要读取纯净版的所有数字,如1.10.2的2014,然后读取"2014":{}中version的内容就行了。


                            来自Android客户端297楼2016-07-16 19:07
                            回复
                              2026-01-14 21:11:25
                              广告
                              不感兴趣
                              开通SVIP免广告
                              这也是Forge团队希望我们做的。


                              来自Android客户端298楼2016-07-16 19:08
                              回复