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(); } }
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); } }