/// <summary> /// Returns the motd for server.properties /// </summary> /// <param name="def">The default motd</param> /// <returns></returns> private string GetMotd(string def) { Console.WriteLine("Message of the day:\n\\u00A7"); Console.WriteLine("Black: 0 | Dark Blue: 1 | Dark Green: 2 | Dark Aqua: 3 | Dark Red: 4\n" + "Dark Purple: 5 | Gold: 6 | Gray: 7 | Dark Gray: 8 | Blue: 9 | Green: a\n" + "Aqua: b | Red: c | Light Purple: d | Yellow: e | White: f\n" + "Obfuscated: k | Bold: l | Strikethrough: s | Underline: n | Italic: o | Reset: r"); return(Funcs.NullEmpty(def)); }
/// <summary> /// Ask for the version to be used /// </summary> /// <returns>A validated version string</returns> private string AskForVersion() { Console.Clear(); Console.WriteLine("Available versions:"); string[] files = Directory.GetFiles(Variables.vFiles); List <string> versions = new List <string>(); foreach (string file in files) { versions.Add(Path.GetFileNameWithoutExtension(file).Replace("minecraft_server.", "")); } Funcs.PrettyPrint(versions); Console.WriteLine($"Version [{Variables.VV}]: "); return(Funcs.NullEmpty(Variables.VV)); }
public static void Main(string[] args) { string action = Assign(args, 0); // What the action is launch/create/update string arg1 = Assign(args, 1); // serverName or serverType string arg2 = Assign(args, 2); // startType or newVersion string version = Assign(args, 3); // The server version (applicable if launchType==legacy) if (action == "") // Gets program action { Console.WriteLine("Would you like to launch, create, or update?"); Console.Write("Action [launch]: "); action = Funcs.NullEmpty("launch"); } // Both serverName and serverType are arg1, context depending string serverName = arg1, serverType = serverName; // serverName: The name of the server // serverType: The type of server (vanilla/snapshot/both) // Both launchType and newVersion are arg2, context depending string launchFile = arg2, newVersion = launchFile; // launchFile: The launch file the server should use (backup/restore/legacy/default) // newVersion: The new version to update to // Create the server object Server server = new Server(serverName, launchFile, version); switch (action.ToLower().First <char>()) { case 'l': // Launch server server.Launch(); break; case 'c': // Create server, then launch server server.Create(); goto case 'l'; case 'u': // Update specified version server.Update(serverType, newVersion); break; } }
/// <summary> /// Updates servers to specified version /// </summary> /// <param name="serverType">The type of server Vanilla/Snapshot/Legacy</param> /// <param name="newVersion">The new version to update to</param> /// <param name="changeVersionsTXT">Should the version be updated in the text file (if no, serverType is irrelevant)</param> public void Update(string serverType, string newVersion) { ServerType = serverType; NewVersion = newVersion; if (ServerType == "") // Gets serverType { Console.Clear(); Console.WriteLine("What is the server type?"); Console.WriteLine("Server types include:"); Funcs.PrettyPrint(new string[] { "vanilla", "snapshot", "both" }); Console.Write("Server Type [vanilla]: "); ServerType = Funcs.NullEmpty("vanilla").ToLower(); } // Gets the new version if empty if (String.IsNullOrEmpty(NewVersion)) { string currentVersion = ""; string latestVersion = ""; switch (ServerType.ToLower().First <char>()) { case 'v': // Vanilla currentVersion = Variables.VV; latestVersion = Manifest.latest.release; Console.WriteLine($"Latest vanilla version is: {latestVersion}"); goto default; case 's': // Snapshot currentVersion = Variables.SV; latestVersion = Manifest.latest.snapshot; Console.WriteLine($"Latest snapshot version is: {latestVersion}"); goto default; case 'b': Update("both"); return; default: Console.WriteLine($"What is the new minecraft version? Current version is: {currentVersion}"); Console.Write($"New version [{latestVersion}]: "); NewVersion = Funcs.NullEmpty(latestVersion); break; } // The lower case `newVersion` is used because we want to know if the passed arg was null if (string.IsNullOrEmpty(currentVersion) || newVersion == null) { UpdateVersions(); Variables.LoadVariables(); } } // If the file already exists, don't do anything if (File.Exists(LauncherPath)) { Console.WriteLine("File already exists."); UpdateVersions(); Console.ReadLine(); return; } Download(); }
/// <summary> /// Launches the server /// </summary> public void Launch() { // Gets the name of the Server while (ServerName == "") { Console.Clear(); Console.WriteLine("----------"); IEnumerable <string> folders = Directory.GetDirectories(ParentDir).Select(i => Path.GetFileName(i)); Funcs.PrettyPrint(folders); Console.WriteLine("\nWhich server would you like to start?"); Console.Write("Server Name: "); ServerName = Console.ReadLine(); if (string.IsNullOrEmpty(ServerName)) { Console.WriteLine("You must specify a name."); Console.ReadLine(); } } // If the directory exists, launch if (Directory.Exists(ServerDir)) { // Sets current directory to that of the selected server Directory.SetCurrentDirectory(ServerDir); // Asks for the StartType if (LaunchType == "") { Console.Clear(); Console.WriteLine("----------"); string[] allFiles = Directory.GetFiles(ServerDir); // Prints all files with .type extension in the server's directory (backup, restore, default, legacy) List <string> files = new List <string>(); foreach (string file in allFiles) { if (Path.GetExtension(file) == ".type") { files.Add(Path.GetFileNameWithoutExtension(file)); } } files.Add("legacy (for specific version)"); Funcs.PrettyPrint(files); Console.WriteLine("Which start type would you like to use?"); Console.Write("Start Type [default]: "); LaunchType = Funcs.NullEmpty("default"); if (LaunchType.ToLower().First <char>() != 'l') // If the launch file isn't legacy { IEnumerable <string> fileLines = new string[] { "vanilla" }; if (File.Exists(Path.Combine(ServerDir, "default.type"))) { fileLines = File.ReadLines(Path.Combine(ServerDir, "default.type")); } switch (fileLines.DefaultIfEmpty("vanilla").FirstOrDefault().ToLower().First <char>()) { case 'v': // vanilla ServerType = "vanilla"; Version = Variables.VV; break; case 's': // snapshot ServerType = "snapshot"; Version = Variables.SV; break; case 'c': // custom ServerType = "legacy"; // Version will be set before starting server break; default: // custom (predefined): i.e. 1.8.9 ServerType = "legacy"; Version = fileLines.First(); break; } } } } // If the server doesn't exist, ask if we should create it else { Console.WriteLine($"The server {ServerName}, does not exist. Would you like to create it?"); Console.Write("Create? Y/[N]: "); bool input = Funcs.ValidateBool(false); // Create the server, or exit program if (input) { Create(); } else { return; } } // Start the server Start(); }
/// <summary> /// Creates the server /// </summary> public void Create() { LaunchType = "default"; // Set ServerName (exits if name is blank) while (ServerName == "") { Console.WriteLine("What is the server name?"); Console.Write("Name: "); ServerName = Console.ReadLine(); if (string.IsNullOrEmpty(ServerName)) { Console.WriteLine("You must specify a name."); Console.ReadLine(); continue; } if (Directory.Exists(ServerDir)) { Console.WriteLine("That server already exists, enter a new server name."); ServerName = ""; } } // Create and go to directory Directory.CreateDirectory(ServerDir); Directory.SetCurrentDirectory(ServerDir); // Get text to put in `default.type` Console.Clear(); Console.WriteLine("----------"); Console.WriteLine("Launch types: "); Funcs.PrettyPrint(new string[] { "vanilla", "snapshot", "custom (1.8.9, 1.13.2, etc.)" }); Console.WriteLine("Launch type [vanilla]: "); string launchType = Funcs.NullEmpty("vanilla"); // Make .type files Write("backup.type", ""); Write("restore.type", ""); Write("default.type", launchType); // vanilla, snapshot, custom {1.8.9,1.13.1,etc.} // The eula has to be accepted before the server can run, automatically accept this Write("eula.txt", "eula=true"); // Op and Whitelist self string myUID = "1b7ffd7a-6c9a-463e-8910-60c7a531b2a4"; string myName = "maxh76"; Write("ops.json", $@"[{{ ""uuid"":""{myUID}"", ""name"":""{myName}"", ""level"":4, ""bypassesplayerlimit"":true }}]"); Write("whitelist.json", $@"[{{ ""uuid"":""{myUID}"", ""name"":""{myName}"" }}]"); /* * These files are created when the server runs for the first time. * Since they are empty we can let the server handle that * Write("banned-ips.json", false, $"[]"); * Write("banned-players.json", false, $"[]"); * Write("usercache.json", false, $"[]"); */ // Copy the server icon to the directory (if it exists) string iconName = "server-icon.png"; string iconPath = Path.Combine(Variables.sFiles, iconName); if (File.Exists(iconPath)) { File.Copy(iconPath, Path.Combine(ServerDir, iconName), true); } else { Console.WriteLine(@"No server icon (""server-icon.png"") exists"); Console.WriteLine(@"Place an image called server-icon.png in the folder where this executable is stored."); } // Create/change server.properties and set motd Console.WriteLine("Would you like to make settings changes?"); Console.Write("Changes Y/[N]: "); bool changes = Funcs.ValidateBool(false); ServerProperties(changes); }