From 9af9fe78eeb64fc6026b7ab7aeedc0537669bce2 Mon Sep 17 00:00:00 2001 From: ORelio Date: Thu, 20 May 2021 19:09:41 +0200 Subject: [PATCH] Realms: Allow direct server ID, handle invalid ID (#1533) --- MinecraftClient/MinecraftClient.csproj | 1 + MinecraftClient/Program.cs | 26 ++++++++++++++++++-------- MinecraftClient/Resources/lang/de.ini | 1 + MinecraftClient/Resources/lang/en.ini | 1 + 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/MinecraftClient/MinecraftClient.csproj b/MinecraftClient/MinecraftClient.csproj index b4c605de..1dccb4a7 100644 --- a/MinecraftClient/MinecraftClient.csproj +++ b/MinecraftClient/MinecraftClient.csproj @@ -402,6 +402,7 @@ + diff --git a/MinecraftClient/Program.cs b/MinecraftClient/Program.cs index 27552182..7b660115 100644 --- a/MinecraftClient/Program.cs +++ b/MinecraftClient/Program.cs @@ -256,18 +256,28 @@ namespace MinecraftClient HandleFailure(Translations.Get("error.realms.access_denied"), false, ChatBot.DisconnectReason.LoginRejected); return; } - int worldIndex = Convert.ToUInt16(addressInput.Split(':')[1]); - string worldId = availableWorlds[worldIndex]; - string RealmsAddress = ProtocolHandler.GetRealmsWorldServerAddress(worldId, Settings.Username, session.PlayerID, session.ID); - if (RealmsAddress != "") + int worldIndex = 0; + string worldId = addressInput.Split(':')[1]; + if (!availableWorlds.Contains(worldId) && int.TryParse(worldId, out worldIndex) && worldIndex < availableWorlds.Count) + worldId = availableWorlds[worldIndex]; + if (availableWorlds.Contains(worldId)) { - addressInput = RealmsAddress; - isRealms = true; - Settings.ServerVersion = MCHighestVersion; + string RealmsAddress = ProtocolHandler.GetRealmsWorldServerAddress(worldId, Settings.Username, session.PlayerID, session.ID); + if (RealmsAddress != "") + { + addressInput = RealmsAddress; + isRealms = true; + Settings.ServerVersion = MCHighestVersion; + } + else + { + HandleFailure(Translations.Get("error.realms.server_unavailable"), false, ChatBot.DisconnectReason.LoginRejected); + return; + } } else { - HandleFailure(Translations.Get("error.realms.server_unavailable"), false, ChatBot.DisconnectReason.LoginRejected); + HandleFailure(Translations.Get("error.realms.server_id"), false, ChatBot.DisconnectReason.LoginRejected); return; } } diff --git a/MinecraftClient/Resources/lang/de.ini b/MinecraftClient/Resources/lang/de.ini index 58f4bdd2..f36b6b16 100644 --- a/MinecraftClient/Resources/lang/de.ini +++ b/MinecraftClient/Resources/lang/de.ini @@ -87,6 +87,7 @@ error.auth=§8Es gab einen Fehlercode vom Server, während die Authentication er error.realms.ip_error=Konnte die Server-IP deiner Realms-Welt nicht abfragen error.realms.access_denied=Diese Realms-Welt existiert nicht oder der Zugang wurde verweigert error.realms.server_unavailable=Der Realms-Server braucht ein wenig Zeit zum starten. Bitte versuche es später erneut. +error.realms.server_id=Invalid or unknown Realms server ID. error.realms.disabled=Versuche der Realms-Welt beizutreten, allerdings wurde der Realms-Support in der Config deaktiviert [internal command] diff --git a/MinecraftClient/Resources/lang/en.ini b/MinecraftClient/Resources/lang/en.ini index 7fb475c1..80c97d04 100644 --- a/MinecraftClient/Resources/lang/en.ini +++ b/MinecraftClient/Resources/lang/en.ini @@ -87,6 +87,7 @@ error.auth=§8Got error code from server while refreshing authentication: {0} error.realms.ip_error=Cannot retrieve the server IP of your Realms world error.realms.access_denied=This Realms world does not exist or access was denied error.realms.server_unavailable=Realms server may require some time to start up. Please retry again later. +error.realms.server_id=Invalid or unknown Realms server ID. error.realms.disabled=Trying to join a Realms world but Realms support is disabled in config [internal command]