龙腾猫跃 1 год назад
Родитель
Сommit
28ef67ee0f

+ 6 - 0
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, "优化:网络底层框架与下载稳定性"))

+ 3 - 3
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

+ 6 - 3
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

+ 9 - 9
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 = ""

+ 6 - 6
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 玩家档案,然后再重新登录。", "登录失败", "创建档案", "取消")

+ 2 - 2
Plain Craft Launcher 2/My Project/AssemblyInfo.vb

@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
 ' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
 ' 方法是按如下所示使用“*”
 
-<Assembly: AssemblyVersion("2.10.4.0")>
-<Assembly: AssemblyFileVersion("2.10.4.0")>
+<Assembly: AssemblyVersion("2.10.5.0")>
+<Assembly: AssemblyFileVersion("2.10.5.0")>
 <Assembly: NeutralResourcesLanguage("")>

+ 25 - 19
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)