Beispiel #1
0
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.ProcessExit += new EventHandler(ProgramExit);

            client.DownloadProgressChanged += Client_DownloadProgressChanged;
            client.DownloadFileCompleted   += Client_DownloadFileCompleted;


            if (!File.Exists("settings.json"))
            {
                SaveSettings();
            }
            else
            {
                var job = JObject.Parse(File.ReadAllText("settings.json"));
                sLatestVersion      = GetString(job, "sLatestVersion", sLatestVersion);
                bUseSingleDirectory = job["bUseSingleDirectory"] != null?bool.Parse(job["bUseSingleDirectory"].ToString()) : false;

                bReadEULA = job["bReadEULA"] != null?bool.Parse(job["bReadEULA"].ToString()) : false;

                sLaunchArgs          = GetString(job, "sLaunchArgs", sLaunchArgs);
                sQLaunchSType        = GetString(job, "sQLaunchSType", sQLaunchSType);
                sQLaunchSVersion     = GetString(job, "sQLaunchSVersion", sQLaunchSVersion);
                sJavaPath            = GetString(job, "sJavapath", sJavaPath);
                bUseGUI              = true;//job["bUseGUI"] != null ? bool.Parse(job["bUseGUI"].ToString()) : false;
                bCloseOnServerLaunch = job["bCloseOnServerLaunch"] != null?bool.Parse(job["bCloseOnServerLaunch"].ToString()) : false;

                bFirstStart = job["bFirstStart"] != null?bool.Parse(job["bFirstStart"].ToString()) : true;

                bForceEnable64Bit = job["bForceEnable64Bit"] != null?bool.Parse(job["bForceEnable64Bit"].ToString()) : false;

                bForceJavaPath = job["bForceJavaPath"] != null?bool.Parse(job["bForceJavaPath"].ToString()) : false;

                //bAskedGit = job["bAskedGit"] != null ? bool.Parse(job["bAskedGit"].ToString()) : false;
            }

            // imma just put this in here so i don't feel bad/what ever
            MessageBoxResult mbrResult = MessageBoxResult.No;


            if (!bReadEULA)
            {
                mbrResult = MessageBox.Show("Please read the Minecraft EULA before continuing: https://account.mojang.com/documents/minecraft_eula\nHit a button to continue", "Read before continuing (Or not, you probably won't)", MessageBoxButton.YesNo);

                if (mbrResult == MessageBoxResult.Yes)
                {
                    bReadEULA = true;
                }
                else
                {
                    Environment.Exit(0);
                }
            }


            // Java check
            if (bForceJavaPath)
            {
                goto _java_check_end;
            }
            if (!Directory.Exists(sJavaPath) || !File.Exists(sJavaPath + "java.exe"))
            {
                sJavaPath = null;
            }
            if (sJavaPath == null)
            {
                try
                {
                    if (Directory.Exists("C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath"))
                    {
                        if (File.Exists("C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath\\java.exe"))
                        {
                            sJavaPath = "C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath";
                            goto _java_check_end;
                        }
                    }
                }
                catch
                { }
                string path = Environment.GetEnvironmentVariable("Path");

                string[] paths = path.Split(';');
                foreach (string sDir in paths)
                {
                    if (sDir != "")
                    {
                        var add = sDir[sDir.Length - 1] == '/' ? "" : "/";


                        if (Directory.Exists(sDir))
                        {
                            if (Directory.Exists(sDir + add + "bin"))
                            {
                                if (File.Exists(sDir + add + "bin\\java.exe"))
                                {
                                    sJavaPath = sDir + add + "bin";
                                }
                            }
                        }
                        if (File.Exists(sDir + add + "java.exe"))
                        {
                            sJavaPath = sDir;
                        }
                    }
                }

                if (sJavaPath == null)
                {
                    string jpath = Environment.GetEnvironmentVariable("JAVA_HOME");

                    if (jpath == null)
                    {
                        while (true)
                        {
                            MessageBox.Show("Can't find a java installation, please select from the options below");
                            Console.WriteLine("1) I have a java installation\n2) I don't have a java installation\n3) Exit");
                            char key = Console.ReadKey().KeyChar;
                            if (key == '1')
                            {
                                var          fbdDialog = new FolderBrowserDialog();
                                DialogResult fbdResult = fbdDialog.ShowDialog();

                                MessageBox.Show(fbdDialog.SelectedPath + "/bin/java.exe");
                                if (fbdResult == DialogResult.OK)
                                {
                                    if (Directory.Exists(fbdDialog.SelectedPath + "/bin"))
                                    {
                                        if (File.Exists(fbdDialog.SelectedPath + "/bin/java.exe"))
                                        {
                                            sJavaPath = fbdDialog.SelectedPath + "\\bin";
                                            // Environment.SetEnvironmentVariable("Path", Environment.GetEnvironmentVariable("Path") + ";" + sJavaPath);
                                            break;
                                        }
                                    }
                                    if (File.Exists(fbdDialog.SelectedPath + "java.exe"))
                                    {
                                        sJavaPath = fbdDialog.SelectedPath;
                                    }
                                }
                            }
                            if (key == '2')
                            {
                                Process.Start("https://www.java.com/en/download/");
                                Console.Clear();
                                Console.WriteLine("Download java and relaunch the program\nPress any key to exit");
                                Console.ReadKey();
                                Environment.Exit(1);
                            }
                            if (key == '3')
                            {
                                Environment.Exit(1);
                            }

                            Console.Clear();
                        }
                    }
                    else
                    {
                        sJavaPath = jpath + "\\";
                    }
                }

                SaveSettings();
            }

_java_check_end:

            var f = File.Open(sJavaPath + "\\java.exe", FileMode.Open, FileAccess.Read);

            // 64 / 32 bit check
            byte[] buffer = new byte[2];
            while (true)
            {
                f.Read(buffer, 0, 2);

                if (buffer[0] == 'P' && buffer[1] == 'E')
                {
                    break;
                }

                if (f.Position + 2 >= f.Length)
                {
                    break;
                }

                f.Seek(2, SeekOrigin.Current);
            }
            f.Seek(2, SeekOrigin.Current);
            f.Read(buffer, 0, 2);
            if (buffer[0] == 100 && buffer[1] == 134)
            {
                iJavaType = 64;
            }
            else if (buffer[0] == 0x4c && buffer[1] == 1)
            {
                iJavaType = 32;
            }
            else
            {
                iJavaType = 16; // Invalid java probably
            }
            f.Close();

            Console.Clear();

            /*
             * if(bFirstStart)
             * {
             *  while (true)
             *  {
             *      Console.Clear();
             *      Console.WriteLine("This program has can use either console or a GUI , please select the one you'd like to use (this can be changed later)\n1) GUI (Recommended)\n2) Console");
             *
             *      var key = Console.ReadKey().KeyChar;
             *      if (key == '1')
             *      {
             *          bUseGUI = true;
             *          bFirstStart = false;
             *          break;
             *      }
             *      else if (key == '2')
             *      {
             *          bUseGUI = false;
             *          bFirstStart = false;
             *          break;
             *      }
             *  }
             *  Console.Clear();
             *  SaveSettings();
             *
             * }
             */

            var  sLV     = "";
            bool sLVWait = false;
            var  sLT     = "";
            bool sLTWait = false;
            bool args_   = false;

            foreach (string arg in args)
            {
                if (arg == "-help" || arg == "-?")
                {
                    Console.WriteLine("Commands:\n-help / -? : Shows this text\n-quicklaunch / -ql : Activates Quicklaunch on startup\n-version / -v : Sets version (must be combined with -stype)\n-stype / -st : Server type (Vanilla/Spigot)");
                    Console.WriteLine("Press any key to continue");
                    Console.ReadKey();
                    args_ = true;
                }

                if (arg == "-quicklaunch" || arg == "-ql")
                {
                    launch(sQLaunchSType, sQLaunchSVersion);
                    args_ = true;
                }

                if (sLVWait)
                {
                    sLVWait = false;
                    sLV     = arg;
                    Console.WriteLine(arg);
                    if (sLV != "" && sLT != "")
                    {
                        TryLaunch(sLT, sLV);
                    }
                    args_ = true;
                }
                if (arg == "-version" || arg == "-v")
                {
                    sLVWait = true;
                    args_   = true;
                }

                if (sLTWait)
                {
                    sLTWait = false;
                    sLT     = arg;
                    if (sLV != "" && sLT != "")
                    {
                        TryLaunch(sLT, sLV);
                    }
                    args_ = true;
                }
                if (arg == "-stype" || arg == "-st")
                {
                    sLTWait = true;
                    args_   = true;
                }
            }
            if (args_)
            {
                //Console.WriteLine("Press any key to exit");
                //Console.ReadKey();
                Environment.Exit(1);
            }

            if (bUseGUI)
            {
                var conHandle = NativeMethods.GetConsoleWindow();
                NativeMethods.ShowWindow(conHandle, NativeMethods.SW_HIDE);

                var slLauncher = new ServerLauncher();

                slLauncher.ShowDialog();
                return;
            }

            Console.Title = "MCServerLauncher 1.0.1";
            while (true)
            {
                Console.WriteLine("1) Download / Launch Server\n2) Modify Properties\n3) List Versions\n4) Quick Launch (" + sQLaunchSType + " / " + sQLaunchSVersion + ")\n5) Switch to GUI mode\n6) Exit");
                var sel = Console.ReadKey();
                Console.Clear();
                switch (sel.KeyChar)
                {
                case '1':
                    Console.WriteLine("1) Vanilla Server\n2) Spigot Server\nPress any other key to return");
                    var sel2 = Console.ReadKey();
                    Console.Clear();
                    switch (sel2.KeyChar)
                    {
                    case '1':
                        start_server_vanilla(null, false);
                        break;

                    case '2':
                        start_server_spigot(null, false);
                        break;

                    default:
                        break;
                    }

                    break;

                case '2':
                    modify_prop();
                    break;

                case '3':
                    if (!Directory.Exists("Servers"))
                    {
                        Directory.CreateDirectory("Servers");
                    }
                    if (!Directory.Exists("Servers/Spigot"))
                    {
                        Directory.CreateDirectory("Servers/Spigot");
                    }
                    if (!Directory.Exists("Servers/Vanilla"))
                    {
                        Directory.CreateDirectory("Servers/Vanilla");
                    }
                    var saDirs = Directory.GetDirectories("Servers/Vanilla");
                    Console.WriteLine("Avalable Server Versions:\nVanilla)");
                    foreach (string sDir in saDirs)
                    {
                        var str = sDir.Substring(16);
                        Console.WriteLine(str + (str == sLatestVersion ? " (Latest)" : ""));
                    }
                    saDirs = Directory.GetDirectories("Servers/Spigot");
                    Console.WriteLine("Spigot)");
                    foreach (string sDir in saDirs)
                    {
                        var str = sDir.Substring(15);
                        Console.WriteLine(str + (str == sLatestVersion ? " (Latest)" : ""));
                    }
                    Console.WriteLine("Press any key to continue...");
                    Console.ReadKey();
                    break;

                case '4':
                    launch(sQLaunchSType, sQLaunchSVersion);
                    break;

                case '5':
                    bUseGUI = true;
                    var              cp  = Process.GetCurrentProcess();
                    string           exe = cp.MainModule.FileName;
                    ProcessStartInfo a   = new ProcessStartInfo(exe);
                    System.Diagnostics.Process.Start(a);
                    Environment.Exit(1);
                    break;

                case '6':
                    Environment.Exit(1);
                    break;

                default:
                    break;
                }



                Console.Clear();
            }
        }
Beispiel #2
0
        public int Compare(object a, object b)
        {
            try
            {
                var s1 = (string)a;
                var s2 = (string)b;

                var s1s        = s1.Split('.');
                var s2s        = s2.Split('.');
                var s1Snapshot = false;
                var s2Snapshot = false;
                var s1Pre      = false;
                var s2Pre      = false;


                if (s1.Contains("pre"))
                {
                    s1Pre = true;
                }
                if (s2.Contains("pre"))
                {
                    s2Pre = true;
                }



                if (s1s.Length == 1)
                {
                    s1s        = s1.Split('w');
                    s1Snapshot = true;
                }
                if (s2s.Length == 1)
                {
                    s2s        = s2.Split('w');
                    s2Snapshot = true;
                }

                if (s1Snapshot && s2Snapshot)
                {
                    var s1n1 = Convert.ToInt32(s1s[0]);
                    var s1n2 = Convert.ToInt32(s1s[1].Substring(0, 2));
                    var s2n1 = Convert.ToInt32(s2s[0]);
                    var s2n2 = Convert.ToInt32(s2s[1].Substring(0, 2));


                    if (s1n1 > s2n1)
                    {
                        return(-1);
                    }
                    if (s1n1 < s2n1)
                    {
                        return(1);
                    }
                    //throw new Exception();
                    if (s1n2 > s2n2)
                    {
                        return(-1);
                    }
                    if (s1n2 < s2n2)
                    {
                        return(1);
                    }
                }



                if (s1Pre || s2Pre)
                {
                    if (s1Snapshot)
                    {
                        return(1);
                    }
                    if (s2Snapshot)
                    {
                        return(-1);
                    }

                    var cc1      = s1.Split(new string[] { "-pre" }, StringSplitOptions.None);
                    var cc2      = s2.Split(new string[] { "-pre" }, StringSplitOptions.None);
                    var cc1Split = cc1[0].Split('.');
                    var cc2Split = cc2[0].Split('.');
                    var Minor1   = Convert.ToInt32(cc1Split[1]);
                    var Minor2   = Convert.ToInt32(cc2Split[1]);
                    var Rev1     = cc1Split.Length == 3 ? Convert.ToInt32(cc1Split[2]) : 0;
                    var Rev2     = cc2Split.Length == 3 ? Convert.ToInt32(cc2Split[2]) : 0;


                    if (Minor1 > Minor2)
                    {
                        return(1);
                    }
                    else if (Minor1 < Minor2)
                    {
                        return(-1);
                    }

                    if (Rev1 > Rev2)
                    {
                        return(-1);
                    }
                    else if (Rev1 < Rev2)
                    {
                        return(1);
                    }

                    if (cc2.Length == 1)
                    {
                        return(1);
                    }
                    if (cc1.Length == 1)
                    {
                        return(-1);
                    }

                    if (Convert.ToInt32(cc1[1]) > Convert.ToInt32(cc2[1]) && (Minor1 > Minor2 || Minor1 == Minor2))
                    {
                        return(-1);
                    }
                    else
                    {
                        return(1);
                    }
                }



                var s1Minor = !s1Snapshot && !s1Pre?Convert.ToInt32(s1s[!s1Snapshot ? 1 : 0]) : 0;

                var s2Minor = !s2Snapshot && !s2Pre?Convert.ToInt32(s2s[!s2Snapshot ? 1 : 0]) : 0;

                var s1Fix = 0;
                var s2Fix = 0;

                if (!s1Pre)
                {
                    s1Fix = s1s.Length > 2 ? Convert.ToInt32(s1s[2]) : 0;
                }
                if (!s2Pre)
                {
                    s2Fix = s2s.Length > 2 ? Convert.ToInt32(s2s[2]) : 0;
                }

                var snparent = s1Snapshot ? ServerLauncher.GetSnapshotParent(s1) : s2Snapshot?ServerLauncher.GetSnapshotParent(s2) : "";

                if (s1Snapshot)
                {
                    if (s2Minor.ToString() == snparent.Split('.')[1])
                    {
                        return(1);
                    }
                }
                if (s2Snapshot)
                {
                    if (s1Minor.ToString() == snparent.Split('.')[1])
                    {
                        return(1);
                    }
                }


                if (s1Minor > s2Minor)
                {
                    return(-1);
                }
                else if (s1Minor == s2Minor && s1Fix > s2Fix)
                {
                    return(-1);
                }
                else
                {
                    return(1);
                }
            } catch
            {
                return(1);
            }
        }