diff --git a/MinecraftClient/Program.cs b/MinecraftClient/Program.cs index a03fe6cc..20e607fb 100644 --- a/MinecraftClient/Program.cs +++ b/MinecraftClient/Program.cs @@ -324,14 +324,14 @@ namespace MinecraftClient /// /// Disconnect the current client from the server and exit the app /// - public static void Exit() + public static void Exit(int exitcode = 0) { new Thread(new ThreadStart(delegate { if (client != null) { client.Disconnect(); ConsoleIO.Reset(); } if (offlinePrompt != null) { offlinePrompt.Abort(); offlinePrompt = null; ConsoleIO.Reset(); } if (Settings.playerHeadAsIcon) { ConsoleIcon.revertToMCCIcon(); } - Environment.Exit(0); + Environment.Exit(exitcode); })).Start(); } @@ -421,7 +421,20 @@ namespace MinecraftClient offlinePrompt.Start(); } } - else Exit(); + else + { + // Not in interactive mode, just exit and let the calling script handle the failure + if (disconnectReason.HasValue) + { + // Return distinct exit codes for known failures. + if (disconnectReason.Value == ChatBot.DisconnectReason.UserLogout) Exit(1); + if (disconnectReason.Value == ChatBot.DisconnectReason.InGameKick) Exit(2); + if (disconnectReason.Value == ChatBot.DisconnectReason.ConnectionLost) Exit(3); + if (disconnectReason.Value == ChatBot.DisconnectReason.LoginRejected) Exit(4); + } + Exit(); + } + } ///