Esempio n. 1
0
        private void button2_Click(object sender, EventArgs e)
        {
            //启动
            LauncherReturn lr     = new LauncherReturn();
            String         FrArgs = "";//初始化

            foreach (String ait in arge.CheckedItems)
            {
                FrArgs = FrArgs + ait + " ";                                                                  //循环加入附加参数
            }
            String[] TCfg     = System.IO.File.ReadAllLines(Application.StartupPath + "\\JLConfig.JLConfig"); //读取配置
            Launcher launcher = new Launcher();
            String   emca     = "";                                                                           //以下是后置参数加载部分

            if (TCfg[6] == "1")
            {
                emca = emca + " --fullscreen";
            }
            if (TCfg[7] == "1")
            {
                emca = emca + " --demo";
            }
            if (TCfg[8] != "")
            {
                emca = emca + " --width " + TCfg[8];
            }
            if (TCfg[9] != "")
            {
                emca = emca + " --height " + TCfg[9];
            }
            if (TCfg[10].IndexOf(":") != -1)
            {
                emca = emca + " --server " + TCfg[10].Split(":".ToCharArray())[0] + " --port " + TCfg[10].Split(":".ToCharArray())[1];
            }
            String[] vers = Directory.GetDirectories(Application.StartupPath + "\\.minecraft\\versions"); //读取版本
            int      m    = 0;                                                                            //读取版本

            for (int i = 0; i < vers.Length; i++)                                                         //读取版本
            {
                if (File.Exists(vers[i] + "\\JLSelVer.sym"))                                              //读取版本
                {
                    m = i;                                                                                //读取版本
                }
            }
            lr = launcher.Launch(TCfg[0], TCfg[1], TCfg[2], vers[m].Replace(Application.StartupPath + "\\.minecraft\\versions\\", ""), 2, false, emca, FrArgs); //启动
            if (bat.Checked == true)                                                                                                                            //生成bat
            {
                File.WriteAllText(genPath.Text, "@echo off\r\nset appdata=\"" + Application.StartupPath + "\\.minecraft\"\r\n" + lr.rtv, Encoding.Default);
            }
            if (vbs.Checked == true)  //生成vbs
            {
                File.WriteAllText(genPath.Text, "Set Wsl = CreateObject(\"Wscript.Shell\")\r\nWsl.Run \"" + lr.rtv.Replace("\"", "\"\"") + "\"", Encoding.Default);
            }
        }
Esempio n. 2
0
        public void DebugGame(Object[] DebugOptions)
        {
            //启动
            String[] TCfg     = System.IO.File.ReadAllLines(Application.StartupPath + "\\JLConfig.JLConfig"); //读取配置
            Launcher launcher = new Launcher();
            String   emca     = "";                                                                           //以下是后置参数加载部分

            if (TCfg[6] == "1")
            {
                emca = emca + " --fullscreen";
            }
            if (TCfg[7] == "1")
            {
                emca = emca + " --demo";
            }
            if (TCfg[8] != "")
            {
                emca = emca + " --width " + TCfg[8];
            }
            if (TCfg[9] != "")
            {
                emca = emca + " --height " + TCfg[9];
            }
            if (TCfg[10].IndexOf(":") != -1)
            {
                emca = emca + " --server " + TCfg[10].Split(":".ToCharArray())[0] + " --port " + TCfg[10].Split(":".ToCharArray())[1];
            }
            String[] vers = Directory.GetDirectories(Application.StartupPath + "\\.minecraft\\versions"); //读取版本
            int      m    = 0;                                                                            //读取版本

            for (int i = 0; i < vers.Length; i++)                                                         //读取版本
            {
                if (File.Exists(vers[i] + "\\JLSelVer.sym"))                                              //读取版本
                {
                    m = i;                                                                                //读取版本
                }
            }
            lr = launcher.Launch(TCfg[0], TCfg[1], TCfg[2], vers[m].Replace(Application.StartupPath + "\\.minecraft\\versions\\", ""), 3, false, emca, DebugOptions[0].ToString());//启动
            if (lr.LP == null)
            {
                lr.LP = lr.sdd.plr.LP;                                           //为空就用代存的值
            }
            lr.LP.OutputDataReceived += new DataReceivedEventHandler(this.onRD); //注册事件
            lr.LP.BeginOutputReadLine();                                         //开始异步读写
        }
Esempio n. 3
0
        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 == "installforge")                                                                                                                                                                        //如果要安装forge
                {
                    uat = targetURL[pointer - 1].Replace(":::", "|").Split("|".ToCharArray());                                                                                                                       //处理下载地址和目标文件路径
                    new Launcher().decompress(uat[1], Application.StartupPath + "\\Forge_Install_Temp");                                                                                                             //解压安装文件
                    String fr = File.ReadAllText(Application.StartupPath + "\\Forge_Install_Temp\\install_profile.json").Replace(" ", "").Replace("\n", "").Replace("\r", "").Replace("\t", "");                     //读取install_profile.json
                    int    tp = fr.IndexOf("\"versionInfo\":") + "\"versionInfo".Length + 2;                                                                                                                         //读取versionInfo的值
                    String vi = fr.Substring(tp, fr.LastIndexOf("}") - tp);                                                                                                                                          //同上
                    tp = fr.IndexOf("\"target") + "\"target".Length + 3;                                                                                                                                             //读取版本名
                    if (!Directory.Exists(Application.StartupPath + "\\.minecraft\\versions\\" + fr.Substring(tp, fr.IndexOf("\"", tp) - tp)))                                                                       //如果版本文件夹不存在
                    {
                        Directory.CreateDirectory(Application.StartupPath + "\\.minecraft\\versions\\" + fr.Substring(tp, fr.IndexOf("\"", tp) - tp));                                                               //创建
                    }
                    if (Directory.Exists(Application.StartupPath + "\\.minecraft\\versions\\" + fr.Substring(tp, fr.IndexOf("\"", tp) - tp).Substring(0, fr.Substring(tp, fr.IndexOf("\"", tp) - tp).IndexOf("-")))) //如果安装了纯净版
                    {
                        if (vi.IndexOf("\"jar\":") == -1)                                                                                                                                                            //如果文件中未指定jar
                        {
                            vi = "{\"jar\":\"" + fr.Substring(tp, fr.IndexOf("\"", tp) - tp).Substring(0, fr.Substring(tp, fr.IndexOf("\"", tp) - tp).IndexOf("-")) + "\"," + vi.Substring(1);                       //指定
                        }
                    }
                    else//未安装纯净版
                    {
                        MessageBox.Show("请先安装纯净版!");//提示用户安装
                        this.Close();                                                                                                                                                                         //关闭窗体
                        return;                                                                                                                                                                               //返回
                    }
                    File.WriteAllText(Application.StartupPath + "\\.minecraft\\versions\\" + fr.Substring(tp, fr.IndexOf("\"", tp) - tp) + "\\" + fr.Substring(tp, fr.IndexOf("\"", tp) - tp) + ".json", vi); //写入读取到的json值
                    this.Close();                                                                                                                                                                             //关闭窗体
                    System.Diagnostics.Process.Start(Application.ExecutablePath);                                                                                                                             //运行
                    Application.Exit();                                                                                                                                                                       //退出
                    return;                                                                                                                                                                                   //返回
                }
                if (reCall != "")                                                                                                                                                                             //如果调用不为空
                {
                    String[] ra = reCall.Replace(",%,%,", "\"").Split("\"".ToCharArray());                                                                                                                    //处理参数
                    plr = new Launcher().Launch(ra[0], ra[1], ra[2], ra[3], 0, true);                                                                                                                         //重新调用Launch方法并传参
                }
                this.Close();                                                                                                                                                                                 //关闭窗体
                return;                                                                                                                                                                                       //退出方法执行
            }
            uat = targetURL[pointer].Replace(":::", "|").Split("|".ToCharArray());                                                                                                                            //处理下载地址和目标文件路径
            listBox1.SelectedIndex = pointer;                                                                                                                                                                 //选中正在下载的项,以告诉用户
            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 + "%";                                                                                                                                                                        //显示最新的进度百分比(已取整)
        }