diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb index 554bb8a..93abb67 100644 --- a/Plain Craft Launcher 2/FormMain.xaml.vb +++ b/Plain Craft Launcher 2/FormMain.xaml.vb @@ -83,6 +83,12 @@ Public Class FormMain '3:BUG+ IMP* FEAT- '2:BUG* IMP- '1:BUG- + If LastVersion < 364 Then 'Snapshot 2.10.5 + If LastVersion >= 363 Then + FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法添加新的正版账号")) + BugCount += 1 + End If + End If If LastVersion < 363 Then 'Snapshot 2.10.4 FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:下载资源时,会单独记忆每种资源上次下载到的文件夹,以防混淆")) FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:网络底层框架与下载稳定性")) diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb index 86eb2a3..edc5b95 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModBase.vb +++ b/Plain Craft Launcher 2/Modules/Base/ModBase.vb @@ -13,13 +13,13 @@ Public Module ModBase #Region "声明" '下列版本信息由更新器自动修改 - Public Const VersionBaseName As String = "2.10.4" '不含分支前缀的显示用版本名 - Public Const VersionStandardCode As String = "2.10.4." & VersionBranchCode '标准格式的四段式版本号 + Public Const VersionBaseName As String = "2.10.5" '不含分支前缀的显示用版本名 + Public Const VersionStandardCode As String = "2.10.5." & VersionBranchCode '标准格式的四段式版本号 Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换 #If BETA Then Public Const VersionCode As Integer = 361 'Release #Else - Public Const VersionCode As Integer = 363 'Snapshot + Public Const VersionCode As Integer = 364 'Snapshot #End If '自动生成的版本信息 Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName diff --git a/Plain Craft Launcher 2/Modules/Base/ModNet.vb b/Plain Craft Launcher 2/Modules/Base/ModNet.vb index 37c8c2e..a3dc0e8 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModNet.vb +++ b/Plain Craft Launcher 2/Modules/Base/ModNet.vb @@ -12,9 +12,9 @@ Public Module ModNet Public Function NetRequestByClient(Url As String, Optional Method As HttpMethod = Nothing, Optional Content As Object = Nothing, Optional ContentType As String = Nothing, Optional Accept As String = "*/*", Optional Timeout As Integer = 25000, Optional Headers As String(,) = Nothing, - Optional Encoding As Encoding = Nothing, Optional UseBrowserUserAgent As Boolean = False) As String + Optional Encoding As Encoding = Nothing, Optional UseBrowserUserAgent As Boolean = False, Optional MakeLog As Boolean = True) As String If Method Is Nothing Then Method = HttpMethod.Get - Log("[Net] 发起网络请求(" & Method.Method & "," & Url & "),最大超时 " & Timeout) + If MakeLog Then Log("[Net] 发起网络请求(" & Method.Method & "," & Url & "),最大超时 " & Timeout) Try Dim HeaderDictionary = If(Headers, {}).ToDictionary If ContentType IsNot Nothing Then HeaderDictionary("Content-Type") = ContentType @@ -22,8 +22,11 @@ Public Module ModNet Return If(Encoding, Encoding.UTF8).GetString(SendRequest(Url, Method, Content, HeaderDictionary, Timeout:=Timeout, Encoding:=Encoding, UseBrowserUserAgent:=UseBrowserUserAgent)) Catch ex As ThreadInterruptedException Throw + Catch ex As ResponsedWebException + If MakeLog Then Log(ex, "网络请求失败,返回内容为:" & vbCrLf & ex.Response, LogLevel.Developer) + Throw Catch ex As Exception - Log(ex, "网络请求失败", LogLevel.Developer) + If MakeLog Then Log(ex, "网络请求失败", LogLevel.Developer) Throw End Try End Function diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb index 683adee..f2f9923 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb @@ -1106,24 +1106,24 @@ Public Function DlModRequest(Url As String, Optional Method As HttpMethod = Nothing, Optional Content As String = Nothing, Optional ContentType As String = Nothing) As JToken Dim Urls As New List(Of KeyValuePair(Of String, Integer)) - Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5)) + Urls.Add(New KeyValuePair(Of String, Integer)(Url, 10)) '至少 10s,要不然有时候远端服务器来不及完成 Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30)) 'Dim McimUrl As String = DlSourceModGet(Url) 'If McimUrl <> Url Then ' Select Case Setup.Get("ToolDownloadMod") ' Case 0 - ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5)) ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10)) - ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15)) + ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30)) + ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30)) ' Case 1 - ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5)) - ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5)) - ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15)) + ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 10)) ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10)) + ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30)) + ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30)) ' Case Else - ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5)) - ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15)) - ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10)) + ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 10)) + ' Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30)) + ' Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30)) ' End Select 'End If Dim Exs As String = "" diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb index 2e1f9fd..6aef890 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb @@ -857,7 +857,7 @@ Retry: McLaunchLog("开始微软登录步骤 1/6(原始登录)") Dim PrepareJson As JObject = GetJson(NetRequestByClientRetry("https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode", HttpMethod.Post, Content:=$"client_id={OAuthClientId}&tenant=/consumers&scope=XboxLive.signin%20offline_access", - Accept:="application/x-www-form-urlencoded")) + ContentType:="application/x-www-form-urlencoded")) McLaunchLog("网页登录地址:" & PrepareJson("verification_uri").ToString) '弹窗 @@ -994,10 +994,10 @@ Retry: Catch ex As Net.WebException Dim Message As String = GetExceptionSummary(ex) If Message.Contains("(429)") Then - Log(ex, "微软登录第 5 步汇报 429") + Log(ex, "微软登录第 4 步汇报 429") Throw New Exception("$登录尝试太过频繁,请等待几分钟后再试!") ElseIf Message.Contains("(403)") Then - Log(ex, "微软登录第 5 步汇报 403") + Log(ex, "微软登录第 4 步汇报 403") Throw New Exception("$当前 IP 的登录尝试异常。" & vbCrLf & "如果你使用了 VPN 或加速器,请把它们关掉或更换节点后再试!") Else Throw @@ -1024,7 +1024,7 @@ Retry: Throw New Exception("$$") End If Catch ex As Exception - Log(ex, "微软登录第 6 步异常:" & Result) + Log(ex, "微软登录第 5 步异常:" & Result) Throw End Try End Sub @@ -1039,10 +1039,10 @@ Retry: Catch ex As Net.WebException Dim Message As String = GetExceptionSummary(ex) If Message.Contains("(429)") Then - Log(ex, "微软登录第 7 步汇报 429") + Log(ex, "微软登录第 6 步汇报 429") Throw New Exception("$登录尝试太过频繁,请等待几分钟后再试!") ElseIf Message.Contains("(404)") Then - Log(ex, "微软登录第 7 步汇报 404") + Log(ex, "微软登录第 6 步汇报 404") RunInNewThread( Sub() Select Case MyMsgBox("请先创建 Minecraft 玩家档案,然后再重新登录。", "登录失败", "创建档案", "取消") diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb index 9de41ac..407176a 100644 --- a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb +++ b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb @@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices ' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 ' 方法是按如下所示使用“*” - - + + diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/MyMsgLogin.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/MyMsgLogin.xaml.vb index 7181978..2ef95d9 100644 --- a/Plain Craft Launcher 2/Pages/PageLaunch/MyMsgLogin.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageLaunch/MyMsgLogin.xaml.vb @@ -113,7 +113,8 @@ "device_code=" & DeviceCode & "&" & "scope=XboxLive.signin%20offline_access", ContentType:="application/x-www-form-urlencoded", - Timeout:=5000 + UnknownFailureCount * 5000) + Timeout:=5000 + UnknownFailureCount * 5000, + MakeLog:=False) '获取结果 Dim ResultJson As JObject = GetJson(Result) McLaunchLog($"令牌过期时间:{ResultJson("expires_in")} 秒") @@ -121,24 +122,29 @@ Finished({ResultJson("access_token").ToString, ResultJson("refresh_token").ToString}) Return Catch ex As Exception - If ex.Message.Contains("authorization_declined") Then - Finished(New Exception("$你拒绝了 PCL 申请的权限……")) - Return - ElseIf ex.Message.Contains("expired_token") Then - Finished(New Exception("$登录用时太长啦,重新试试吧!")) - Return - ElseIf ex.Message.Contains("Account security interrupt") Then - Finished(New Exception("$该账号由于安全问题无法登陆,请前往微软账户页获取更多信息。")) - Return - ElseIf ex.Message.Contains("service abuse") Then - Finished(New Exception("$非常抱歉,该账号已被微软封禁,无法登录。")) - Return - ElseIf ex.Message.Contains("AADSTS70000") Then '可能不能判 “invalid_grant”,见 #269 - Finished(New RestartException) - Return - ElseIf ex.Message.Contains("authorization_pending") Then - Thread.Sleep(2000) - ElseIf UnknownFailureCount <= 2 Then + If TypeOf ex Is ResponsedWebException Then + Dim Response = CType(ex, ResponsedWebException).Response + If Response.Contains("authorization_declined") Then + Finished(New Exception("$你拒绝了 PCL 申请的权限……")) + Return + ElseIf Response.Contains("expired_token") Then + Finished(New Exception("$登录用时太长啦,重新试试吧!")) + Return + ElseIf Response.Contains("Account security interrupt") Then + Finished(New Exception("$该账号由于安全问题无法登陆,请前往微软账户页获取更多信息。")) + Return + ElseIf Response.Contains("service abuse") Then + Finished(New Exception("$非常抱歉,该账号已被微软封禁,无法登录。")) + Return + ElseIf Response.Contains("AADSTS70000") Then '可能不能判 “invalid_grant”,见 #269 + Finished(New RestartException) + Return + ElseIf Response.Contains("authorization_pending") Then + Thread.Sleep(2000) + Continue Do + End If + End If + If UnknownFailureCount <= 2 Then UnknownFailureCount += 1 Log(ex, $"登录轮询第 {UnknownFailureCount} 次失败") Thread.Sleep(2000)