From 881e79dfdf3c8a87ff5e4a5171e7754832d61ba9 Mon Sep 17 00:00:00 2001 From: JingHai-Lingyun Date: Wed, 14 Aug 2024 22:38:24 +0800 Subject: [PATCH] Fix --- .../Modules/Minecraft/ModLaunch.vb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb index 852dc78..4fe4428 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb @@ -1,4 +1,5 @@ Imports System.IO.Compression +Imports Newtonsoft.Json Public Module ModLaunch @@ -708,6 +709,16 @@ LoginFinish: Setup.Set("Cache" & Data.Input.Token & "Pass", Data.Input.Password) McLaunchLog("刷新登录成功(Refresh, " & Data.Input.Token & ")") End Sub + + Public Class AuthErrorResponse + Public Property [error] As String + Public Property errorMessage As String + End Class + Private Function ParseErrorResponse(ex As Exception) As AuthErrorResponse + Dim SplitEx As String = ex.ToString().Split(vbCrLf)(1).Split("-")(0).ToString().Trim() + Dim JsonEx As AuthErrorResponse = JsonConvert.DeserializeObject(Of AuthErrorResponse)(SplitEx) + Return JsonEx + End Function Private Function McLoginRequestLogin(ByRef Data As LoaderTask(Of McLoginServer, McLoginResult)) As Boolean Try Dim NeedRefresh As Boolean = False @@ -717,10 +728,13 @@ LoginFinish: New JProperty("username", Data.Input.UserName), New JProperty("password", Data.Input.Password), New JProperty("requestUser", True)) + Dim LHeaders As New Dictionary(Of String, String) + LHeaders.Add("Accept-Language", "zh_CN") Dim LoginJson As JObject = GetJson(NetRequestRetry( Url:=Data.Input.BaseUrl & "/authenticate", Method:="POST", Data:=RequestData.ToString(0), + Headers:=LHeaders, ContentType:="application/json; charset=utf-8")) '检查登录结果 If LoginJson("availableProfiles").Count = 0 Then @@ -783,6 +797,10 @@ LoginFinish: If AllMessage.Contains("403") Then Select Case Data.Input.Type Case McLoginType.Auth + Dim ErrorResponse As AuthErrorResponse = ParseErrorResponse(ex) + If (ErrorResponse.errorMessage <> "") Then + Throw New Exception("$登录失败,以下为可能的原因:" & vbCrLf & $" - {ErrorResponse.errorMessage}") + End If Throw New Exception("$登录失败,以下为可能的原因:" & vbCrLf & " - 输入的账号或密码错误。" & vbCrLf & " - 登录尝试过于频繁,导致被暂时屏蔽。请不要操作,等待 10 分钟后再试。" & vbCrLf &