龙腾猫跃 1 year ago
parent
commit
adf52d56b7
27 changed files with 705 additions and 682 deletions
  1. 2 1
      Plain Craft Launcher 2/Application.xaml
  2. 1 0
      Plain Craft Launcher 2/Application.xaml.vb
  3. 1 2
      Plain Craft Launcher 2/Controls/MyCard.vb
  4. 22 6
      Plain Craft Launcher 2/FormMain.xaml.vb
  5. 68 65
      Plain Craft Launcher 2/Modules/Base/ModBase.vb
  6. 16 10
      Plain Craft Launcher 2/Modules/Base/ModNet.vb
  7. 15 7
      Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
  8. 30 22
      Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
  9. 32 17
      Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
  10. 2 2
      Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
  11. 2 2
      Plain Craft Launcher 2/Modules/Minecraft/ModWatcher.vb
  12. 1 4
      Plain Craft Launcher 2/Modules/ModEvent.vb
  13. 2 0
      Plain Craft Launcher 2/Modules/ModSecret.vb
  14. 1 1
      Plain Craft Launcher 2/Modules/ThirdParty/DragHelper.vb
  15. 2 2
      Plain Craft Launcher 2/My Project/AssemblyInfo.vb
  16. 15 13
      Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
  17. 2 2
      Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
  18. 451 492
      Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml
  19. 0 6
      Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml.vb
  20. 2 8
      Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb
  21. 1 1
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
  22. 17 11
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml
  23. 5 3
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb
  24. 2 2
      Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
  25. 9 3
      Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
  26. 4 0
      Plain Craft Launcher 2/Resources/Custom.xaml
  27. BIN
      Plain Craft Launcher 2/Resources/Help.zip

+ 2 - 1
Plain Craft Launcher 2/Application.xaml

@@ -1,9 +1,9 @@
 <Application x:Class="Application"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:behaviors="clr-namespace:PCL.Controls.Behaviors"
     xmlns:local="clr-namespace:PCL"
     xmlns:sys="clr-namespace:System;assembly=mscorlib"
-    xmlns:behaviors="clr-namespace:PCL.Controls.Behaviors"
     StartupUri="FormMain.xaml"
     ShutdownMode="OnExplicitShutdown">
     <Application.Resources>
@@ -345,6 +345,7 @@
                         </ControlTemplate>
                     </Setter.Value>
                 </Setter>
+                <Setter Property="behaviors:ClipboardInterceptor.EnableSafeClipboard" Value="True" />
             </Style>
 
             <!-- ComboBox -->

+ 1 - 0
Plain Craft Launcher 2/Application.xaml.vb

@@ -140,6 +140,7 @@ WaitRetry:
             ServicePointManager.Expect100Continue = True
             ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 Or SecurityProtocolType.Tls Or SecurityProtocolType.Tls11 Or SecurityProtocolType.Tls12
             ServicePointManager.DefaultConnectionLimit = 1024
+            ServicePointManager.UseNagleAlgorithm = False
             '计时
             Log("[Start] 第一阶段加载用时:" & GetTimeTick() - ApplicationStartTick & " ms")
             ApplicationStartTick = GetTimeTick()

+ 1 - 2
Plain Craft Launcher 2/Controls/MyCard.vb

@@ -320,11 +320,10 @@
         End Set
     End Property
     Private _IsSwapped As Boolean = False
-    
     ''' <summary>
     ''' 是否已被折叠。(已过时,请使用 IsSwapped)
     ''' </summary>
-    <Obsolete("请使用 IsSwapped 属性,IsSwaped 存在拼写错误")>
+    <Obsolete("IsSwaped 存在拼写错误,请换用 IsSwapped 属性。")>
     Public Property IsSwaped As Boolean
         Get
             Return IsSwapped

+ 22 - 6
Plain Craft Launcher 2/FormMain.xaml.vb

@@ -11,6 +11,19 @@ Public Class FormMain
         Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
         '统计更新日志条目
 #If BETA Then
+        If LastVersion < 367 Then 'Release 2.10.6
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:启用 MCIM 社区资源镜像源,以缓解社区资源难以下载的问题"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:正版登录出错时无法给出正确的错误信息"))
+            FeatureCount += 9
+            BugCount += 9
+        End If
+        If LastVersion < 365 Then 'Release 2.10.5
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:下载资源时,会单独记忆每种资源上次下载到的文件夹,以防混淆"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:网络底层框架与下载稳定性"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法启动一部分 LabyMod 和 GTNH 客户端"))
+            FeatureCount += 22
+            BugCount += 26
+        End If
         If LastVersion < 361 Then 'Release 2.10.3
             FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法安装部分使用老版本 PCL 导出的整合包"))
         End If
@@ -83,6 +96,12 @@ Public Class FormMain
         '3:BUG+ IMP* FEAT-
         '2:BUG* IMP-
         '1:BUG-
+        If LastVersion < 366 Then 'Snapshot 2.10.6
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:启用 MCIM 社区资源镜像源,以缓解社区资源难以下载的问题"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:正版登录出错时无法给出正确的错误信息"))
+            FeatureCount += 9
+            BugCount += 9
+        End If
         If LastVersion < 364 Then 'Snapshot 2.10.5
             If LastVersion >= 363 Then
                 FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法添加新的正版账号"))
@@ -268,11 +287,6 @@ Public Class FormMain
             AddHandler Closing, Sub() Helper.RemoveDragHook()
             AddHandler Helper.DragDrop, Sub() FileDrag(Helper.DropFilePaths)
         End If
-        'If IsAdmin() Then '下列代码没用(#2531)
-        '    ChangeWindowMessageFilter(&H233, 1)
-        '    ChangeWindowMessageFilter(&H4A, 1)
-        '    ChangeWindowMessageFilter(&H49, 1)
-        'End If
         '切换到首页
         If Not IsNothing(FrmLaunchLeft.Parent) Then FrmLaunchLeft.SetValue(ContentPresenter.ContentProperty, Nothing)
         If Not IsNothing(FrmLaunchRight.Parent) Then FrmLaunchRight.SetValue(ContentPresenter.ContentProperty, Nothing)
@@ -389,6 +403,8 @@ Public Class FormMain
             Catch ex As Exception
                 Log(ex, "清理自动更新文件失败")
             End Try
+            '上报
+            Telemetry("启动")
         End Sub, "初始化", ThreadPriority.Lowest)
 
         Log("[Start] 第三阶段加载用时:" & GetTimeTick() - ApplicationStartTick & " ms")
@@ -874,7 +890,7 @@ Public Class FormMain
             '错误报告分析
             Try
                 Log("[System] 尝试进行错误报告分析")
-                Dim Analyzer As New CrashAnalyzer(GetUuid())
+                Dim Analyzer As New CrashAnalyzer
                 Analyzer.Import(FilePath)
                 If Not Analyzer.Prepare() Then Exit Try
                 Analyzer.Analyze()

+ 68 - 65
Plain Craft Launcher 2/Modules/Base/ModBase.vb

@@ -1,6 +1,6 @@
 Imports System.Globalization
 Imports System.IO.Compression
-Imports System.Reflection
+Imports System.Net.Sockets
 Imports System.Runtime.CompilerServices
 Imports System.Security.Cryptography
 Imports System.Security.Principal
@@ -13,13 +13,13 @@ Public Module ModBase
 #Region "声明"
 
     '下列版本信息由更新器自动修改
-    Public Const VersionBaseName As String = "2.10.5" '不含分支前缀的显示用版本名
-    Public Const VersionStandardCode As String = "2.10.5." & VersionBranchCode '标准格式的四段式版本号
+    Public Const VersionBaseName As String = "2.10.6" '不含分支前缀的显示用版本名
+    Public Const VersionStandardCode As String = "2.10.6." & VersionBranchCode '标准格式的四段式版本号
     Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换
 #If BETA Then
-    Public Const VersionCode As Integer = 361 'Release
+    Public Const VersionCode As Integer = 367 'Release
 #Else
-    Public Const VersionCode As Integer = 364 'Snapshot
+    Public Const VersionCode As Integer = 366 'Snapshot
 #End If
     '自动生成的版本信息
     Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -791,8 +791,8 @@ Public Module ModBase
     Public Sub CopyFile(FromPath As String, ToPath As String)
         Try
             '还原文件路径
-            If Not FromPath.Contains(":\") Then FromPath = Path & FromPath
-            If Not ToPath.Contains(":\") Then ToPath = Path & ToPath
+            FromPath = ShortenPath(If(FromPath.Contains(":\"), FromPath, Path & FromPath))
+            ToPath = ShortenPath(If(ToPath.Contains(":\"), ToPath, Path & ToPath))
             '如果复制同一个文件则跳过
             If FromPath = ToPath Then Return
             '确保目录存在
@@ -861,7 +861,7 @@ Public Module ModBase
     ''' <param name="Append">是否将文件内容追加到当前文件,而不是覆盖它。</param>
     Public Sub WriteFile(FilePath As String, Text As String, Optional Append As Boolean = False, Optional Encoding As Encoding = Nothing)
         '处理相对路径
-        If Not FilePath.Contains(":\") Then FilePath = Path & FilePath
+        FilePath = ShortenPath(If(FilePath.Contains(":\"), FilePath, Path & FilePath))
         '确保目录存在
         Directory.CreateDirectory(GetPathFromFullPath(FilePath))
         '写入文件
@@ -886,7 +886,7 @@ Public Module ModBase
     ''' <param name="Append">是否将文件内容追加到当前文件,而不是覆盖它。</param>
     Public Sub WriteFile(FilePath As String, Content As Byte(), Optional Append As Boolean = False)
         '处理相对路径
-        If Not FilePath.Contains(":\") Then FilePath = Path & FilePath
+        FilePath = ShortenPath(If(FilePath.Contains(":\"), FilePath, Path & FilePath))
         '确保目录存在
         Directory.CreateDirectory(GetPathFromFullPath(FilePath))
         '写入文件
@@ -1294,11 +1294,11 @@ Re:
     ''' </summary>
     Public Sub ExtractFile(CompressFilePath As String, DestDirectory As String, Optional Encode As Encoding = Nothing,
                            Optional ProgressIncrementHandler As Action(Of Double) = Nothing)
-        Directory.CreateDirectory(DestDirectory)
+        Directory.CreateDirectory(ShortenPath(DestDirectory))
         If CompressFilePath.EndsWithF(".gz", True) Then
             '以 gz 方式解压
             Dim stream As New GZipStream(New FileStream(CompressFilePath, FileMode.Open, FileAccess.ReadWrite), CompressionMode.Decompress)
-            Dim decompressedFile As New FileStream(DestDirectory & GetFileNameFromPath(CompressFilePath).ToLower.Replace(".tar", "").Replace(".gz", ""), FileMode.OpenOrCreate, FileAccess.Write)
+            Dim decompressedFile As New FileStream(ShortenPath(DestDirectory & GetFileNameFromPath(CompressFilePath).ToLower.Replace(".tar", "").Replace(".gz", "")), FileMode.OpenOrCreate, FileAccess.Write)
             Dim data As Integer = stream.ReadByte()
             While data <> -1
                 decompressedFile.WriteByte(data)
@@ -1309,10 +1309,10 @@ Re:
         Else
             '以 zip 方式解压
             Using Archive = ZipFile.Open(CompressFilePath, ZipArchiveMode.Read, If(Encode, Encoding.GetEncoding("GB18030")))
-                Dim TotalCount As Integer = Archive.Entries.Count
+                Dim TotalCount As Long = Archive.Entries.Count
                 For Each Entry As ZipArchiveEntry In Archive.Entries
-                    If ProgressIncrementHandler IsNot Nothing Then ProgressIncrementHandler(1 / TotalCount)
-                    Dim DestinationPath As String = IO.Path.Combine(DestDirectory, Entry.FullName)
+                    If ProgressIncrementHandler IsNot Nothing AndAlso TotalCount > 0 Then ProgressIncrementHandler(1 / TotalCount)
+                    Dim DestinationPath As String = ShortenPath(IO.Path.Combine(DestDirectory, Entry.FullName))
                     If DestinationPath.EndsWithF("\") OrElse DestinationPath.EndsWithF("/") Then
                         Continue For '不创建空文件夹
                     Else
@@ -1387,10 +1387,10 @@ RetryDir:
         ToPath = ToPath.Replace("/", "\")
         If Not ToPath.EndsWithF("\") Then ToPath &= "\"
         Dim AllFiles = EnumerateFiles(FromPath).ToList
-        Dim FileCount As Integer = AllFiles.Count
+        Dim FileCount As Long = AllFiles.Count
         For Each File In AllFiles
             CopyFile(File.FullName, File.FullName.Replace(FromPath, ToPath))
-            If ProgressIncrementHandler IsNot Nothing Then ProgressIncrementHandler(1 / FileCount)
+            If ProgressIncrementHandler IsNot Nothing AndAlso FileCount > 0 Then ProgressIncrementHandler(1 / FileCount)
         Next
     End Sub
     ''' <summary>
@@ -1449,22 +1449,8 @@ RetryDir:
             IsInner = True
         Loop
 
-        '常见错误(记得同时修改下面的)
-        Dim CommonReason As String = Nothing
-        If TypeOf InnerEx Is TypeLoadException OrElse TypeOf InnerEx Is BadImageFormatException OrElse TypeOf InnerEx Is MissingMethodException OrElse TypeOf InnerEx Is NotImplementedException OrElse TypeOf InnerEx Is TypeInitializationException Then
-            CommonReason = "PCL 的运行环境存在问题。请尝试重新安装 .NET Framework 4.6.2 然后再试。若无法安装,请先卸载较新版本的 .NET Framework,然后再尝试安装。"
-        ElseIf TypeOf InnerEx Is UnauthorizedAccessException Then
-            CommonReason = "PCL 的权限不足。请尝试右键 PCL,选择以管理员身份运行。"
-        ElseIf TypeOf InnerEx Is OutOfMemoryException Then
-            CommonReason = "你的电脑运行内存不足,导致 PCL 无法继续运行。请在关闭一部分不需要的程序后再试。"
-        ElseIf TypeOf InnerEx Is Runtime.InteropServices.COMException Then
-            CommonReason = "由于操作系统或显卡存在问题,导致出现错误。请尝试重启 PCL。"
-        ElseIf {"远程主机强迫关闭了", "远程方已关闭传输流", "未能解析此远程名称", "由于目标计算机积极拒绝",
-                "操作已超时", "操作超时", "服务器超时", "连接超时"}.Any(Function(s) DescList.Any(Function(l) l.Contains(s))) Then
-            CommonReason = "你的网络环境不佳,导致难以连接到服务器。请稍后重试,或使用 VPN 以改善网络环境。"
-        End If
-
         '构造输出信息
+        Dim CommonReason As String = AnalyzeCommonReason(InnerEx, DescList)
         If CommonReason Is Nothing Then
             Return DescList.Join(vbCrLf)
         Else
@@ -1492,22 +1478,8 @@ RetryDir:
         DescList = DescList.Distinct.ToList
         Dim Desc As String = Join(DescList, vbCrLf & "→ ")
 
-        '常见错误(记得同时修改上面的)
-        Dim CommonReason As String = Nothing
-        If TypeOf InnerEx Is TypeLoadException OrElse TypeOf InnerEx Is BadImageFormatException OrElse TypeOf InnerEx Is MissingMethodException OrElse TypeOf InnerEx Is NotImplementedException OrElse TypeOf InnerEx Is TypeInitializationException Then
-            CommonReason = "PCL 的运行环境存在问题。请尝试重新安装 .NET Framework 4.6.2 然后再试。若无法安装,请先卸载较新版本的 .NET Framework,然后再尝试安装。"
-        ElseIf TypeOf InnerEx Is UnauthorizedAccessException Then
-            CommonReason = "PCL 的权限不足。请尝试右键 PCL,选择以管理员身份运行。"
-        ElseIf TypeOf InnerEx Is OutOfMemoryException Then
-            CommonReason = "你的电脑运行内存不足,导致 PCL 无法继续运行。请在关闭一部分不需要的程序后再试。"
-        ElseIf TypeOf InnerEx Is Runtime.InteropServices.COMException Then
-            CommonReason = "由于操作系统或显卡存在问题,导致出现错误。请尝试重启 PCL。"
-        ElseIf {"远程主机强迫关闭了", "远程方已关闭传输流", "未能解析此远程名称", "由于目标计算机积极拒绝",
-                "操作已超时", "操作超时", "服务器超时", "连接超时"}.Any(Function(s) Desc.Contains(s)) Then
-            CommonReason = "你的网络环境不佳,导致难以连接到服务器。请稍后重试,或使用 VPN 以改善网络环境。"
-        End If
-
         '构造输出信息
+        Dim CommonReason As String = AnalyzeCommonReason(InnerEx, DescList)
         If CommonReason IsNot Nothing Then
             Return CommonReason & "详细错误:" & DescList.First
         Else
@@ -1515,6 +1487,24 @@ RetryDir:
             Return Join(DescList, " ← ")
         End If
     End Function
+    Private Function AnalyzeCommonReason(InnerEx As Exception, DescList As List(Of String)) As String
+        If TypeOf InnerEx Is TypeLoadException OrElse TypeOf InnerEx Is BadImageFormatException OrElse TypeOf InnerEx Is MissingMethodException OrElse TypeOf InnerEx Is NotImplementedException OrElse TypeOf InnerEx Is TypeInitializationException Then
+            Return "PCL 的运行环境存在问题。请尝试重新安装 .NET Framework 4.6.2 然后再试。若无法安装,请先卸载较新版本的 .NET Framework,然后再尝试安装。"
+        ElseIf TypeOf InnerEx Is UnauthorizedAccessException Then
+            Return "PCL 的权限不足。请尝试右键 PCL,选择以管理员身份运行。"
+        ElseIf TypeOf InnerEx Is OutOfMemoryException Then
+            Return "你的电脑运行内存不足,导致 PCL 无法继续运行。请在关闭一部分不需要的程序后再试。"
+        ElseIf TypeOf InnerEx Is Runtime.InteropServices.COMException Then
+            Return "由于操作系统或显卡存在问题,导致出现错误。请尝试重启 PCL。"
+        ElseIf TypeOf InnerEx Is SocketException AndAlso DescList.Any(Function(l) l.Contains("WSAStartup")) Then
+            Return "请尝试卸载中国移动云盘,然后再试。"
+        ElseIf {"远程主机强迫关闭了", "远程方已关闭传输流", "未能解析此远程名称", "由于目标计算机积极拒绝",
+                "操作已超时", "操作超时", "服务器超时", "连接超时"}.Any(Function(s) DescList.Any(Function(l) l.Contains(s))) Then
+            Return "你的网络环境不佳,导致难以连接到服务器。请稍后重试,或使用 VPN 以改善网络环境。"
+        Else
+            Return Nothing
+        End If
+    End Function
 
     ''' <summary>
     ''' 返回一个枚举对应的字符串。
@@ -1556,7 +1546,7 @@ RetryDir:
             Return JsonConvert.DeserializeObject(Data, New JsonSerializerSettings With {.DateTimeZoneHandling = DateTimeZoneHandling.Local})
         Catch ex As Exception
             Dim Length As Integer = If(Data, "").Length
-            Throw New Exception("格式化 JSON 失败:" & If(Length > 2000, Data.Substring(0, 500) & $"...(全长 {Length} 个字符)..." & Right(Data, 500), Data))
+            Throw New Exception("格式化 JSON 失败:" & If(Length > 2000, Data.Substring(0, 500) & $"...(全长 {Length} 个字符)..." & Right(Data, 500), Data), ex)
         End Try
     End Function
 
@@ -2641,10 +2631,6 @@ Retry:
     ''' 相对增减控件的左边距。
     ''' </summary>
     Public Sub DeltaLeft(control As FrameworkElement, newValue As Double)
-        '安全性检查
-        DebugAssert(Not Double.IsNaN(newValue))
-        DebugAssert(Not Double.IsInfinity(newValue))
-
         If TypeOf control Is Window Then
             '窗口改变
             CType(control, Window).Left += newValue
@@ -2656,8 +2642,6 @@ Retry:
                 Case HorizontalAlignment.Right
                     control.Margin = New Thickness(control.Margin.Left, control.Margin.Top, control.Margin.Right - newValue, control.Margin.Bottom)
                     'control.Margin = New Thickness(control.Margin.Left, control.Margin.Top, CType(control.Parent, Object).ActualWidth - control.ActualWidth - newValue, control.Margin.Bottom)
-                Case Else
-                    DebugAssert(False)
             End Select
         End If
     End Sub
@@ -2665,17 +2649,12 @@ Retry:
     ''' 设置控件的左边距。(仅针对置左控件)
     ''' </summary>
     Public Sub SetLeft(control As FrameworkElement, newValue As Double)
-        DebugAssert(control.HorizontalAlignment = HorizontalAlignment.Left)
         control.Margin = New Thickness(newValue, control.Margin.Top, control.Margin.Right, control.Margin.Bottom)
     End Sub
     ''' <summary>
     ''' 相对增减控件的上边距。
     ''' </summary>
     Public Sub DeltaTop(control As FrameworkElement, newValue As Double)
-        '安全性检查
-        DebugAssert(Not Double.IsNaN(newValue))
-        DebugAssert(Not Double.IsInfinity(newValue))
-
         If TypeOf control Is Window Then
             '窗口改变
             CType(control, Window).Top += newValue
@@ -2687,11 +2666,8 @@ Retry:
                 Case VerticalAlignment.Bottom
                     control.Margin = New Thickness(control.Margin.Left, control.Margin.Top, control.Margin.Right, control.Margin.Bottom - newValue)
                     'control.Margin = New Thickness(control.Margin.Left, control.Margin.Top, CType(control.Parent, Object).ActualWidth - control.ActualWidth - newValue, control.Margin.Bottom)
-                Case Else
-                    DebugAssert(False)
             End Select
         End If
-
         'If Double.IsNaN(newValue) OrElse Double.IsInfinity(newValue) Then Return '安全性检查
         'Select Case control.VerticalAlignment
         '  Case VerticalAlignment.Top, VerticalAlignment.Stretch, VerticalAlignment.Center
@@ -2705,7 +2681,6 @@ Retry:
     ''' 设置控件的顶边距。(仅针对置上控件)
     ''' </summary>
     Public Sub SetTop(control As FrameworkElement, newValue As Double)
-        DebugAssert(control.VerticalAlignment = VerticalAlignment.Top)
         control.Margin = New Thickness(control.Margin.Left, newValue, control.Margin.Right, control.Margin.Bottom)
     End Sub
 
@@ -2989,6 +2964,13 @@ Retry:
                 End If
         End Select
 
+        '上报
+        If Level >= LogLevel.Hint Then
+            Telemetry("PCL 错误",
+                      "Level", GetStringFromEnum(Level),
+                      "Title", FilterUserName(FilterAccessToken(Title, "*"), "*"),
+                      "Exception", FilterUserName(FilterAccessToken(Text, "*"), "*"))
+        End If
     End Sub
     ''' <summary>
     ''' 输出错误信息。
@@ -3055,6 +3037,13 @@ Retry:
                 End If
         End Select
 
+        '上报
+        If Level >= LogLevel.Hint Then
+            Telemetry("PCL 异常",
+                      "Level", GetStringFromEnum(Level),
+                      "Title", FilterUserName(FilterAccessToken(Title, "*"), "*"),
+                      "Exception", FilterUserName(FilterAccessToken(ExFull, "*"), "*"))
+        End If
     End Sub
 
     '反馈
@@ -3091,9 +3080,23 @@ Retry:
             "文件位置:" & Path)
     End Sub
 
-    '断言
-    Public Sub DebugAssert(Exp As Boolean)
-        If Not Exp Then Throw New Exception("断言命中")
+    '遥测
+    Public Sub Telemetry([Event] As String, ParamArray Datas As String())
+        If Not Setup.Get("SystemSystemTelemetry") Then Return '用户关闭了遥测
+        If Not ClsBaseUrl.StartsWithF("http") Then Return '开源版没有设置遥测地址
+        RunInNewThread(
+        Sub()
+            Try
+                Log($"[System] 匿名数据上报:{[Event]}")
+                Dim Url As String = $"{ClsBaseUrl}&Event={WebUtility.UrlEncode([Event])}"
+                For i = 0 To Datas.Length - 1 Step 2
+                    Url &= "&" & WebUtility.UrlEncode(Datas(i)) & "=" & WebUtility.UrlEncode(Datas(i + 1).Replace(vbCrLf, vbLf))
+                Next
+                NetRequestByClient(Url, MakeLog:=False)
+            Catch
+                Log("[System] 匿名数据上报失败", LogLevel.Debug)
+            End Try
+        End Sub, "Telemetry", ThreadPriority.Lowest)
     End Sub
 
     '获取当前的堆栈信息

+ 16 - 10
Plain Craft Launcher 2/Modules/Base/ModNet.vb

@@ -22,9 +22,6 @@ 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
             If MakeLog Then Log(ex, "网络请求失败", LogLevel.Developer)
             Throw
@@ -244,7 +241,10 @@ RequestFinished:
             If Response.IsSuccessStatusCode Then
                 Return ResponseBytes
             Else
-                Throw New ResponsedWebException($"错误码 {Response.StatusCode} ({CInt(Response.StatusCode)}),{Method},{Url}", If(Encoding, Encoding.UTF8).GetString(ResponseBytes))
+                Dim ResponseMessage = If(Encoding, Encoding.UTF8).GetString(ResponseBytes)
+                Throw New ResponsedWebException(
+                    $"错误码 {Response.StatusCode} ({CInt(Response.StatusCode)}),{Method},{Url}" &
+                    If(String.IsNullOrEmpty(ResponseMessage), "", vbCrLf & ResponseMessage), ResponseMessage)
             End If
         Catch ex As ThreadInterruptedException
             Throw
@@ -807,7 +807,7 @@ StartSingleThreadDownload:
                     '是否禁用多线程,以及规定碎片大小
                     Dim TargetUrl As String = GetSource().Url
                     If TargetUrl.Contains("pcl2-server") OrElse TargetUrl.Contains("bmclapi") OrElse TargetUrl.Contains("github.com") OrElse
-                       TargetUrl.Contains("optifine.net") OrElse TargetUrl.Contains("modrinth") Then Return Nothing
+                       TargetUrl.Contains("optifine.net") OrElse TargetUrl.Contains("modrinth") OrElse TargetUrl.Contains("momot.rs") Then Return Nothing
                     '寻找最大碎片
                     'FUTURE: 下载引擎重做,计算下载源平均链接时间和线程下载速度,按最高时间节省来开启多线程
                     Dim FilePieceMax As NetThread = Threads
@@ -990,7 +990,8 @@ NotSupportRange:
                                     Th.DownloadDone += RealDataCount
                                     ResultStream.Write(ResponseBytes, 0, RealDataCount)
                                     '检查速度是否过慢
-                                    If DeltaTime > 1500 AndAlso DeltaTime > RealDataCount Then '数据包间隔大于 1.5s,且速度小于 1.5K/s
+                                    If DeltaTime > 1500 AndAlso DeltaTime > RealDataCount AndAlso '数据包间隔大于 1.5s,且速度小于 1.5K/s
+                                        Th.Source.SingleThread Is Nothing Then '并非单线程下载
                                         Throw New TimeoutException("由于速度过慢断开链接,下载 " & RealDataCount & " B,消耗 " & DeltaTime & " ms。")
                                     End If
                                     Th.LastReceiveTime = GetTimeTick()
@@ -1027,7 +1028,8 @@ SourceBreak:
                 End SyncLock
                 '合并
                 If Not IsNoSplit Then ResultStream?.Dispose()
-                If ((FileSize >= 0 AndAlso DownloadDone >= FileSize) OrElse (FileSize = -1 AndAlso DownloadDone > 0)) AndAlso State < NetState.Merge Then Merge(Th)
+                If ((FileSize >= 0 AndAlso DownloadDone >= FileSize) OrElse (FileSize = -1 AndAlso DownloadDone > 0)) AndAlso
+                    State < NetState.Merge AndAlso Th.State <> NetState.Error Then Merge(Th)
             End Try
         End Sub
         Private Sub SourceFail(Th As NetThread, ex As Exception, IsMergeFailure As Boolean)
@@ -1069,7 +1071,7 @@ SourceBreak:
                         '当前源失败,但还有下载源:正常地继续执行
                     ElseIf Not Retried AndAlso Sources.Count > 1 Then
                         '合并失败或首次下载失败,未重试:将所有下载源重新标记为不允许断点续传的下载源,逐个重新尝试下载
-                        Log($"[Download] {LocalName}:文件下载失败,正在自动重试……", If(ModeDebug, LogLevel.Hint, LogLevel.Debug)) '在调试模式下给出红色提示
+                        Hint($"{LocalName}:文件下载失败,正在自动重试……", If(ModeDebug, HintType.Critical, HintType.Info)) '在调试模式下给出红色提示
                         Retried = True
                         SyncLock LockSource
                             SourcesOnce.Clear()
@@ -1525,10 +1527,14 @@ Retry:
                 '获取实际失败的文件
                 For Each File In Files
                     If File.State <> NetState.Error Then Continue For
+                    Dim Detail As String = Join(File.Sources.Select(Function(s) $"{If(s.Ex?.Message, "无错误信息。")}({s.Url})"), vbCrLf)
                     [Error] = New Exception("文件下载失败:" & File.LocalPath & vbCrLf &
-                                            "各下载源的错误如下:" & vbCrLf &
-                                            Join(File.Sources.Select(Function(s) $"{If(s.Ex?.Message, "无错误信息。")}({s.Url})"), vbCrLf),
+                                            "各下载源的错误如下:" & vbCrLf & Detail,
                                             [Error])
+                    '上报
+                    Telemetry("文件下载失败",
+                              "FileName", File.LocalName,
+                              "Exception", Detail)
                     Exit For
                 Next
                 '在设置 Error 对象后再更改为失败,避免 WaitForExit 无法捕获错误

+ 15 - 7
Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb

@@ -2,7 +2,9 @@
 
     '构造函数
     Private TempFolder As String
-    Public Sub New(UUID As Integer)
+    Private TargetVersion As McVersion
+    Public Sub New(Optional TargetVersion As McVersion = Nothing)
+        Me.TargetVersion = TargetVersion
         '构建文件结构
         TempFolder = RequestTaskTempFolder()
         Directory.CreateDirectory(TempFolder & "Temp\")
@@ -508,7 +510,7 @@ Done:
             If LogMc.Contains("Couldn't set pixel format") Then AppendReason(CrashReason.显卡驱动不支持导致无法设置像素格式)
             If LogMc.Contains("java.lang.OutOfMemoryError") OrElse LogMc.Contains("an out of memory error") Then AppendReason(CrashReason.内存不足)
             If LogMc.Contains("java.lang.RuntimeException: Shaders Mod detected. Please remove it, OptiFine has built-in support for shaders.") Then AppendReason(CrashReason.ShadersMod与OptiFine同时安装)
-            If LogMc.Contains("java.lang.NoSuchMethodError: sun.security.util.ManifestEntryVerifier") Then AppendReason(CrashReason.低版本Forge与高版本Java不兼容)
+            If LogMc.Contains("java.lang.NoSuchMethodError: sun.security.util.ManifestEntryVerifier") OrElse LogMc.Contains("java.lang.NoSuchMethodError: 'void sun.security.util.ManifestEntryVerifier") Then AppendReason(CrashReason.低版本Forge与高版本Java不兼容)
             If LogMc.Contains("1282: Invalid operation") Then AppendReason(CrashReason.光影或资源包导致OpenGL1282错误)
             If LogMc.Contains("signer information does not match signer information of other classes in the same package") Then AppendReason(CrashReason.文件或内容校验失败, If(RegexSeek(LogMc, "(?<=class "")[^']+(?=""'s signer information)"), "").TrimEnd(vbCrLf))
             If LogMc.Contains("Maybe try a lower resolution resourcepack?") Then AppendReason(CrashReason.材质过大或显卡配置不足)
@@ -856,12 +858,13 @@ NextStack:
     ''' <summary>
     ''' 弹出崩溃弹窗,并指导导出崩溃报告。
     ''' </summary>
-    Public Sub Output(IsHandAnalyze As Boolean, Optional ExtraFiles As List(Of String) = Nothing)
+    Public Sub Output(IsManualAnalyze As Boolean, Optional ExtraFiles As List(Of String) = Nothing)
         '弹窗提示
         FrmMain.ShowWindowToTop()
-        Select Case MyMsgBox(GetAnalyzeResult(IsHandAnalyze), If(IsHandAnalyze, "错误报告分析结果", "Minecraft 出现错误"),
-            "确定", If(IsHandAnalyze OrElse DirectFile Is Nothing, "", "查看日志"), If(IsHandAnalyze, "", "导出错误报告"),
-            Button2Action:=If(IsHandAnalyze OrElse DirectFile Is Nothing, Nothing,
+        Dim Detail As String = GetAnalyzeResult(IsManualAnalyze)
+        Select Case MyMsgBox(Detail, If(IsManualAnalyze, "错误报告分析结果", "Minecraft 出现错误"),
+            "确定", If(IsManualAnalyze OrElse DirectFile Is Nothing, "", "查看日志"), If(IsManualAnalyze, "", "导出错误报告"),
+            Button2Action:=If(IsManualAnalyze OrElse DirectFile Is Nothing, Nothing,
             Sub()
                 '弹窗选择:查看日志
                 If File.Exists(DirectFile.Value.Key) Then
@@ -918,6 +921,11 @@ NextStack:
                 End Try
                 OpenExplorer(FileAddress)
         End Select
+        '上报
+        If IsManualAnalyze Then Return
+        Telemetry("Minecraft 崩溃",
+                  "Version", If(TargetVersion Is Nothing, "null", TargetVersion.Version.ToString),
+                  "Detail", FilterUserName(Detail, "*"))
     End Sub
     ''' <summary>
     ''' 获取崩溃分析的结果描述。
@@ -1102,7 +1110,7 @@ NextStack:
                 If(Not Results.Any(Function(r) r.EndsWithF("\h")) OrElse IsHandAnalyze, "",
                     vbCrLf & "如果要寻求帮助,请把错误报告文件发给对方,而不是发送这个窗口的照片或者截图。" &
                     If(If(PageSetupSystem.IsLauncherNewest(), True), "",
-                    vbCrLf & vbCrLf & "此外,你正在使用老版本 PCL,更新 PCL 或许也能解决这个问题。" & vbCrLf & "你可以点击 设置 → 启动器 → 检查更新 来更新 PCL。"))
+                    vbCrLf & vbCrLf & "此外,你正在使用老版本 PCL,更新 PCL 或许也能解决这个问题。" & vbCrLf & "你可以点击 [设置 → 其他 → 启动器 → 检查更新] 更新 PCL。"))
     End Function
 
 End Class

+ 30 - 22
Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb

@@ -594,7 +594,7 @@
             VersionName = Version
             Me.Version = New Version(Version)
             Me.Inherit = Inherit
-            FileVersion = Version & If(Branch Is Nothing, "", "-" & Branch)
+            FileVersion = Version & If(Branch Is Nothing, "", "-" & Branch)
         End Sub
     End Class
 
@@ -1106,26 +1106,27 @@
     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, 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, 10))
-        '           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, 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, 10))
-        '           Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
-        '           Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
-        '   End Select
-        'End If
+        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, 10))
+                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
+                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
+                Case 1
+                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 10)) '至少 10s,要不然有时候远端服务器来不及完成
+                    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, 10))
+                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
+                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
+            End Select
+        Else
+            Urls.Add(New KeyValuePair(Of String, Integer)(Url, 10))
+            Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
+        End If
         Dim Exs As String = ""
         For Each Source In Urls
             Try
@@ -1232,7 +1233,14 @@
 
     'Mod 下载源
     Public Function DlSourceModGet(Original As String) As String
-        Return Original
+        Return Original.
+            Replace("api.modrinth.com", "mod.mcimirror.top/modrinth").
+            Replace("staging-api.modrinth.com", "mod.mcimirror.top/modrinth").
+            Replace("cdn.modrinth.com", "mod.mcimirror.top").
+            Replace("api.curseforge.com", "mod.mcimirror.top/curseforge").
+            Replace("edge.forgecdn.net", "mod.mcimirror.top").
+            Replace("mediafilez.forgecdn.net", "mod.mcimirror.top").
+            Replace("media.forgecdn.net", "mod.mcimirror.top")
     End Function
 
     'Loader 自动切换

+ 32 - 17
Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb

@@ -66,7 +66,7 @@ Public Module ModLaunch
     ''' </summary>
     Public Sub McLaunchLog(Text As String)
         Text = FilterUserName(FilterAccessToken(Text, "*"), "*")
-        RunInUi(Sub() FrmLaunchRight.LabLog.Text += vbCrLf & "[" & GetTimeNow() & "] " & Text)
+        RunInUi(Sub() FrmLaunchRight.LabLog.Text += $"{vbCrLf}[{GetTimeNow()}] {Text}")
         Log("[Launch] " & Text)
     End Sub
 
@@ -101,6 +101,8 @@ Public Module ModLaunch
             If Not ex.Message.StartsWithF("$$") Then Hint(ex.Message, HintType.Critical)
             Throw
         End Try
+        Dim IsSavingBatch As Boolean = CurrentLaunchOptions?.SaveBatch IsNot Nothing
+
         '正式加载
         Try
             '构造主加载器
@@ -145,9 +147,15 @@ Public Module ModLaunch
             Select Case LaunchLoader.State
                 Case LoadState.Finished
                     Hint(McVersionCurrent.Name & " 启动成功!", HintType.Finish)
+                    '上报
+                    If Not IsSavingBatch Then
+                        Telemetry("Minecraft 启动成功",
+                              "Version", McVersionCurrent.Version.ToString,
+                              "LoginType", GetStringFromEnum(CType(Setup.Get("LoginType"), McLoginType)))
+                    End If
                 Case LoadState.Aborted
                     If AbortHint Is Nothing Then
-                        Hint(If(CurrentLaunchOptions?.SaveBatch Is Nothing, "已取消启动!", "已取消导出启动脚本!"), HintType.Info)
+                        Hint(If(IsSavingBatch, "已取消导出启动脚本!", "已取消启动!"), HintType.Info)
                     Else
                         Hint(AbortHint, HintType.Finish)
                     End If
@@ -162,7 +170,7 @@ NextInner:
             If CurrentEx.Message.StartsWithF("$") Then
                 '若有以 $ 开头的错误信息,则以此为准显示提示
                 '若错误信息为 $$,则不提示
-                If Not CurrentEx.Message = "$$" Then MyMsgBox(CurrentEx.Message.TrimStart("$"), If(CurrentLaunchOptions?.SaveBatch Is Nothing, "启动失败", "导出启动脚本失败"))
+                If Not CurrentEx.Message = "$$" Then MyMsgBox(CurrentEx.Message.TrimStart("$"), If(IsSavingBatch, "导出启动脚本失败", "启动失败"))
                 Throw
             ElseIf CurrentEx.InnerException IsNot Nothing Then
                 '检查下一级错误
@@ -172,8 +180,15 @@ NextInner:
                 '没有特殊处理过的错误信息
                 McLaunchLog("错误:" & GetExceptionDetail(ex))
                 Log(ex,
-                    If(CurrentLaunchOptions?.SaveBatch Is Nothing, "Minecraft 启动失败", "导出启动脚本失败"), LogLevel.Msgbox,
-                    If(CurrentLaunchOptions?.SaveBatch Is Nothing, "启动失败", "导出启动脚本失败"))
+                    If(IsSavingBatch, "导出启动脚本失败", "Minecraft 启动失败"), LogLevel.Msgbox,
+                    If(IsSavingBatch, "导出启动脚本失败", "启动失败"))
+                '上报
+                If Not IsSavingBatch Then
+                    Telemetry("Minecraft 启动失败",
+                              "Version", McVersionCurrent.Version.ToString,
+                              "LoginType", GetStringFromEnum(CType(Setup.Get("LoginType"), McLoginType)),
+                              "Exception", FilterUserName(FilterAccessToken(GetExceptionDetail(ex), "*"), "*"))
+                End If
                 Throw
             End If
         End Try
@@ -891,9 +906,9 @@ Retry:
                 ContentType:="application/x-www-form-urlencoded",
                 Headers:={{"Accept-Language", "en-US,en;q=0.5"}, {"X-Requested-With", "XMLHttpRequest"}},
                 ThreadCount:=2)
-        Catch ex As Exception
-            If ex.Message.ContainsF("must sign in again", True) OrElse ex.Message.ContainsF("password expired", True) OrElse
-               (ex.Message.Contains("refresh_token") AndAlso ex.Message.Contains("is not valid")) Then '#269
+        Catch ex As ResponsedWebException
+            If ex.Response.ContainsF("must sign in again", True) OrElse ex.Response.ContainsF("password expired", True) OrElse
+               (ex.Response.Contains("refresh_token") AndAlso ex.Response.Contains("is not valid")) Then '#269
                 Return {"Relogin", ""}
             Else
                 Throw
@@ -942,20 +957,20 @@ Retry:
         Try
             Result = NetRequestByClientMultiple("https://xsts.auth.xboxlive.com/xsts/authorize", HttpMethod.Post,
                 Content:=Request, ContentType:="application/json")
-        Catch ex As Net.WebException
+        Catch ex As ResponsedWebException
             '参考 https://github.com/PrismarineJS/prismarine-auth/blob/master/src/common/Constants.js
-            If ex.Message.Contains("2148916227") Then
+            If ex.Response.Contains("2148916227") Then
                 MyMsgBox("该账号似乎已被微软封禁,无法登录。", "登录失败", "我知道了", IsWarn:=True)
                 Throw New Exception("$$")
-            ElseIf ex.Message.Contains("2148916233") Then
+            ElseIf ex.Response.Contains("2148916233") Then
                 If MyMsgBox("你尚未注册 Xbox 账户,请在注册后再登录。", "登录提示", "注册", "取消") = 1 Then
                     OpenWebsite("https://signup.live.com/signup")
                 End If
                 Throw New Exception("$$")
-            ElseIf ex.Message.Contains("2148916235") Then
+            ElseIf ex.Response.Contains("2148916235") Then
                 MyMsgBox($"你的网络所在的国家或地区无法登录微软账号。{vbCrLf}请使用加速器或 VPN。", "登录失败", "我知道了")
                 Throw New Exception("$$")
-            ElseIf ex.Message.Contains("2148916238") Then
+            ElseIf ex.Response.Contains("2148916238") Then
                 If MyMsgBox("该账号年龄不足,你需要先修改出生日期,然后才能登录。" & vbCrLf &
                             "该账号目前填写的年龄是否在 13 岁以上?", "登录提示", "13 岁以上", "12 岁以下", "我不知道") = 1 Then
                     OpenWebsite("https://account.live.com/editprof.aspx")
@@ -1364,13 +1379,13 @@ Retry:
             McLaunchLog("新版 Game 参数获取成功")
         End If
         '编码参数(#4700、#5892、#5909)
+        If McLaunchJavaSelected.VersionCode >= 18 Then 'Dfile.encoding 需要放在 Dstdout.encoding 后面(#6934)
+            If Not Arguments.Contains("-Dfile.encoding=") Then Arguments = "-Dfile.encoding=COMPAT " & Arguments
+        End If
         If McLaunchJavaSelected.VersionCode > 8 Then
             If Not Arguments.Contains("-Dstdout.encoding=") Then Arguments = "-Dstdout.encoding=UTF-8 " & Arguments
             If Not Arguments.Contains("-Dstderr.encoding=") Then Arguments = "-Dstderr.encoding=UTF-8 " & Arguments
         End If
-        If McLaunchJavaSelected.VersionCode >= 18 Then
-            If Not Arguments.Contains("-Dfile.encoding=") Then Arguments = "-Dfile.encoding=COMPAT " & Arguments
-        End If
         'MJSB
         Arguments = Arguments.Replace(" -Dos.name=Windows 10", " -Dos.name=""Windows 10""")
         '全屏
@@ -1692,7 +1707,7 @@ NextVersion:
         GameArguments.Add("${access_token}", McLoginLoader.Output.AccessToken)
         GameArguments.Add("${auth_session}", McLoginLoader.Output.AccessToken)
         GameArguments.Add("${user_type}", "msa") '#1221
-        GameArguments.Add("${primary_jar}", Version.Path & Version.Name & ".jar")
+        GameArguments.Add("${primary_jar}", Version.Path & Version.Name & ".jar") '#6942
 
         '窗口尺寸参数
         Dim GameSize As Size

+ 2 - 2
Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb

@@ -989,7 +989,7 @@ ExitDataLoad:
             If ToString = "" Then
                 Return "原版 " & McName
             Else
-                Return McName & ToString & If(ModeDebug, " (" & SortCode & "#)", "")
+                Return McName & ToString
             End If
         End Function
 
@@ -2415,7 +2415,7 @@ NextEntry:
     Public Function FilterUserName(Raw As String, FilterChar As Char) As String
         If Raw.Contains(":\Users\") Then
             For Each Token In RegexSearch(Raw, "(?<=:\\Users\\)[^\\]+")
-                Raw = Raw.Replace(Token, New String(FilterChar, Token.Count))
+                Raw = Raw.Replace("\" & Token, "\" & New String(FilterChar, Token.Count))
             Next
         End If
         Return Raw

+ 2 - 2
Plain Craft Launcher 2/Modules/Minecraft/ModWatcher.vb

@@ -349,14 +349,14 @@
             State = MinecraftState.Crashed
             '崩溃分析
             WatcherLog("Minecraft 已崩溃,将在 2 秒后开始崩溃分析")
-            Hint("检测到 Minecraft 出现错误,错误分析已开始……")
+            Hint("检测到 Minecraft 出现错误,错误分析已开始……", HintType.Critical)
             FeedbackInfo()
             RunInNewThread(
             Sub()
                 Try
                     Thread.Sleep(2000)
                     WatcherLog("崩溃分析开始")
-                    Dim Analyzer As New CrashAnalyzer(PID)
+                    Dim Analyzer As New CrashAnalyzer(Version)
                     Analyzer.Collect(Version.PathIndie, LatestLog.ToList)
                     Analyzer.Prepare()
                     Analyzer.Analyze(Version)

+ 1 - 4
Plain Craft Launcher 2/Modules/ModEvent.vb

@@ -116,11 +116,8 @@
                     End Try
 
                 Case "修改设置"
-                    If Setup.IsEncoded(Data(0)) Then
-                        Throw New Exception($"无法修改受加密保护的设置:{Data(0)}")
-                    End If
                     Setup.Set(Data(0), Data(1))
-                    Hint("已修改设置!", HintType.Finish)
+                    Hint($"已写入设置:{Data(0)} → {Data(1)}", HintType.Finish)
 
                 Case Else
                     MyMsgBox("未知的事件类型:" & Type & vbCrLf & "请检查事件类型填写是否正确,或者 PCL 是否为最新版本。", "事件执行失败")

+ 2 - 0
Plain Craft Launcher 2/Modules/ModSecret.vb

@@ -12,6 +12,8 @@ Friend Module ModSecret
     Public OAuthClientId As String = If(Environment.GetEnvironmentVariable("PCL_MS_CLIENT_ID"), "")
     'CurseForge API Key
     Public CurseForgeAPIKey As String = If(Environment.GetEnvironmentVariable("PCL_CURSEFORGE_API_KEY"), "")
+    '用于匿名数据收集的腾讯云日志服务上报 URL,形如 https://{region}.cls.tencentcs.com/track?topic_id={topic_id}
+    Public Const ClsBaseUrl As String = ""
 
     Friend Sub SecretOnApplicationStart()
         '提升 UI 线程优先级

+ 1 - 1
Plain Craft Launcher 2/Modules/ThirdParty/DragHelper.vb

@@ -137,7 +137,7 @@ Public Class DragHelper
         Dim fileCount As UInteger = DragQueryFile(wParam, UInteger.MaxValue, Nothing, 0)
         ReDim dropFilePaths(CInt(fileCount) - 1)
 
-        For i As UInteger = 0 To fileCount - 1
+        For i As UInteger = 0 To CInt(fileCount) - 1
             Dim sb As New StringBuilder(MAX_PATH)
             Dim result As UInteger = DragQueryFile(wParam, i, sb, sb.Capacity)
             If result > 0 Then dropFilePaths(i) = sb.ToString()

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

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

+ 15 - 13
Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb

@@ -243,19 +243,21 @@
             If Not IsNothing(PageNew) AndAlso Not IsNothing(PageNew.Parent) Then PageNew.SetValue(ContentPresenter.ContentProperty, Nothing)
             If Anim Then
                 '动画
-                Dispatcher.Invoke(Sub()
-                                      '执行动画
-                                      AniStart({
-                                                     AaOpacity(PanLogin, -PanLogin.Opacity, 100,, New AniEaseOutFluent),
-                                                     AaCode(Sub()
-                                                                AniControlEnabled += 1
-                                                                PanLogin.Children.Clear()
-                                                                PanLogin.Children.Add(PageNew)
-                                                                AniControlEnabled -= 1
-                                                            End Sub, 100),
-                                                     AaOpacity(PanLogin, 1, 100, 120, New AniEaseInFluent)
-                                                 }, "FrmLogin PageChange")
-                                  End Sub, Threading.DispatcherPriority.Render)
+                Dispatcher.Invoke(
+                Sub()
+                    '执行动画
+                    AniStart({
+                        AaOpacity(PanLogin, -PanLogin.Opacity, 100,, New AniEaseOutFluent),
+                        AaCode(
+                        Sub()
+                            AniControlEnabled += 1
+                            PanLogin.Children.Clear()
+                            PanLogin.Children.Add(PageNew)
+                            AniControlEnabled -= 1
+                        End Sub, 100),
+                        AaOpacity(PanLogin, 1, 100, 120, New AniEaseInFluent)
+                    }, "FrmLogin PageChange")
+                End Sub, Threading.DispatcherPriority.Render)
             Else
                 '无动画
                 AniControlEnabled += 1

+ 2 - 2
Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb

@@ -93,7 +93,7 @@ Download:
                         GoTo Download
                     Case 3
                         Log("[Page] 主页预设:简单主页")
-                        Url = "https://raw.gitcode.com/mfn233/PCL-Mainpage/raw/main/Custom.xaml"
+                        Url = "https://pclhomeplazaoss.lingyunawa.top:26994/d/Homepages/MFn233/Custom.xaml"
                         GoTo Download
                     Case 4
                         Log("[Page] 主页预设:每日整合包推荐")
@@ -129,7 +129,7 @@ Download:
                         GoTo Download
                     Case 12
                         Log("[Page] 主页预设:PCL GitHub 仪表盘")
-                        Url = "https://raw.gitcode.com/Deep-Dark-Forest/PCL2-GitHub-Dashboard-Homepage/raw/main/custom.xaml"
+                        Url = "https://ddf.pcl-community.org/Custom.xaml"
                         GoTo Download
                 End Select
         End Select

+ 451 - 492
Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml

@@ -1,492 +1,451 @@
-<local:MyPageRight
-    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
-    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
-    xmlns:local="clr-namespace:PCL" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
-    mc:Ignorable="d" x:Class="PageOtherAbout"
-    PanScroll="{Binding ElementName=PanBack}" RenderOptions.BitmapScalingMode="LowQuality">
-    <local:MyScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" x:Name="PanBack">
-        <StackPanel x:Name="PanMain" Margin="25,10" Grid.IsSharedSizeScope="True">
-            <local:MyCard Margin="0,15" Title="关于">
-                <Grid Margin="21,40,21,16">
-                    <Grid.RowDefinitions>
-                        <RowDefinition Height="45" />
-                        <RowDefinition Height="45" />
-                    </Grid.RowDefinitions>
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="40" />
-                        <ColumnDefinition />
-                        <ColumnDefinition Width="150" />
-                    </Grid.ColumnDefinitions>
-                    <local:MyListItem IsHitTestVisible="False" Title="龙腾猫跃" Margin="-5,0,15,0" Info="Plain Craft Launcher 的作者!" Grid.Row="0" Grid.Column="1" />
-                    <local:MyListItem IsHitTestVisible="False" Title="Plain Craft Launcher 2" Margin="-5,0,15,0" Info="当前版本:%VERSION%(%VERSIONCODE%.%BRANCH%)" Grid.Row="1" Grid.Column="1" x:Name="ItemAboutPcl" />
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/Logo.png" Grid.Row="1" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/LTCat.jpg" Grid.Row="0" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                    <local:MyButton Text="赞助作者" Grid.Column="2" Grid.Row="0" Height="35" EventType="打开网页" EventData="https://afdian.com/a/LTCat" />
-                    <local:MyButton Text="查看源代码" Grid.Column="2" Grid.Row="1" Height="35" EventType="打开网页" EventData="https://github.com/Hex-Dragon/PCL2" />
-                </Grid>
-            </local:MyCard>
-            <local:MyCard Margin="0,0,0,15" Title="特别鸣谢">
-                <Grid Margin="21,40,21,16">
-                    <Grid.RowDefinitions>
-                        <RowDefinition Height="45" />
-                        <RowDefinition Height="45" />
-                        <RowDefinition Height="45" />
-                        <RowDefinition Height="45" />
-                        <RowDefinition Height="45" />
-                        <RowDefinition Height="45" />
-                        <RowDefinition Height="45" />
-                        <RowDefinition Height="45" />
-                    </Grid.RowDefinitions>
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="40" />
-                        <ColumnDefinition />
-                        <ColumnDefinition Width="150" />
-                    </Grid.ColumnDefinitions>
-                    <local:MyListItem Title="bangbang93" Margin="-5,0,15,0" IsHitTestVisible="False" Info="提供 BMCLAPI 镜像源和 Forge 安装工具,详见 https://bmclapi.bangbang93.com" Grid.Row="0" Grid.Column="1" />
-                    <local:MyButton x:Name="BtnAboutBmclapi" Text="赞助镜像源" Grid.Row="0" Grid.Column="2" Height="35" />
-                    <local:MyListItem Title="MC 百科" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="提供了 Mod 名称的中文翻译和更多相关信息!" Grid.Row="1" Grid.Column="1" />
-                    <local:MyButton x:Name="BtnAboutWiki" Text="打开百科" Grid.Row="1" Grid.Column="2" Height="35" />
-                    <local:MyListItem Title="00ll00" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="提供了 Java Launch Wrapper 和一些重要服务支持!" Grid.Row="2" Grid.Column="1" />
-                    <local:MyListItem Title="z0z0r4" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="提供了 MCIM 中国 Mod 下载镜像源和帮助库图床!" Grid.Row="3" Grid.Column="1" />
-                    <local:MyListItem Title="Patrick" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="设计并制作了 PCL 图标,让我从做图标的水深火热中得到了解脱……" Grid.Row="4" Grid.Column="1" />
-                    <local:MyListItem Title="Hao_Tian" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="在内测中找出了一大堆没人想得到的诡异 Bug,有非同寻常的 Bug 体质" Grid.Row="5" Grid.Column="1" />
-                    <local:MyListItem Title="Minecraft 中文论坛" Margin="-5,0,15,0" IsHitTestVisible="False" Info="虽然已经关站了,但感谢此前提供了 MCBBS 镜像源……" Grid.Row="6" Grid.Column="1" />
-                    <local:MyListItem Title="PCL 内群的各位" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="感谢内群的沙雕网友们这么久以来对我和 PCL 的支持与鼓励!" Grid.Row="7" Grid.Column="1" />
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/bangbang93.png" Grid.Row="0" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/wiki.png" Grid.Row="1" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/00ll00.png" Grid.Row="2" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/z0z0r4.png" Grid.Row="3" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/Patrick.png" Grid.Row="4" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/Hao_Tian.jpg" Grid.Row="5" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/MCBBS.png" Grid.Row="6" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/PCL2.png" Grid.Row="7" Margin="3">
-                        <Image.Clip>
-                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
-                        </Image.Clip>
-                    </Image>
-                </Grid>
-            </local:MyCard>
-            <local:MyCard Margin="0,0,0,15" Title="赞助者">
-                <StackPanel Margin="25,40,10,20">
-                    <TextBlock HorizontalAlignment="Left" Text="以下是 2025 年 6 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
-                    <WrapPanel Margin="0,0,0,10">
-                        <TextBlock Width="120" Margin="0,1.5" Text="星月" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Nemo" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="长歌当天" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="飒黎lIlIlI" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="hy" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="SaDhhJe" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="风铃子啊" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="柠娜" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="W丶北辰" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="才KRE" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Yang_mistakeof" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="close eyes" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="顾顾" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="LTuuxj" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="花吃" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="FICazk" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="屑屑你" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="凉凉" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="WDSJ" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Tohka" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="lz" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="哦嚯嚯嚯皮筋头" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="陈肖杰" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="MC小满" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="残光" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="玖玖璃" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="水晶OTZ" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="伯克礼" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="白猫海贼船" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="zhang1232" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Never" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Fish_pomelo" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="生风" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="富士山下" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="小七" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="发呆的呆毛君" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="天黑时看月亮" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="夜枫" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="_章333_" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="孙杰" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="wby" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="封尾==" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="你与空白皆无名" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="鱼" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="zzxniubi" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="炎燚火淼淼" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="三巿" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="奈落" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="华佗" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="oran9e" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="赤冰雨" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Urizen" />
-                        <TextBlock Width="120" Margin="0,1.5" Text=":)" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="skyqyzm" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="橘子皮丶" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="额外awa" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="安上月" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="念城南" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="多低山丘陵" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="书童呀" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="sxy192425" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="李好啊" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="MH_Nine" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="周先生" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="原" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="良田满穗" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="柴" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="庭师" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="。,。" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="DHLH" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Xayj" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="绳网用户#37" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="LLLL" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="深绯红" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="奇伢七星" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Akapigo" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Shink_guns" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Aqua 极&amp;坏." />
-                        <TextBlock Width="120" Margin="0,1.5" Text="大事化小蛋糕" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Nakiya233" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="花小妖" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="septebr" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="一只马喽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="下暴雨BWB" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="QAQ" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="sl土豆社区服主B友" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Wang" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="......" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ResTmoW" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="bochibochibo" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="铸魂之灵" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="柏柏柏" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Mart1s" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="KuruM148" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="KaiTouCrow" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="LIE-SHAN" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="慈悲方舟" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="于析" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="陌道" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="摇椅上的猫" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="五个麦卷" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Miraclepoi" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="XiaoLI" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="啊吧啊吧的肥宅" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="不娶雨婷不改名" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="oppo19" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="博麗靈夢" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="莹 of yours" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ChinaFZXPVP" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="城之内sama" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ENXI" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="steve_c418" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="洛长安" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="magic_muggle" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="小猫游六喵" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="JY" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="雪豹起司可颂" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="wlsy" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="齐先生爱溜达" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="是小泠啊" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="xioyiao" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="BunnyMiku" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="dadagga" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="无极之笔" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="xiaoyu" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="王梓杰" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="wjbjjd" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Candy_Mo" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="lettmin_" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="七九·Alnasl" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="辉" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="何为最优解" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="crazy丶天人" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="XsBlueSky" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="冬将軍" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="tiechui" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Liu2Shi2Pu2" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Yu_s" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="刘四妹" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="枝皙" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="CC" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Slana23" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="MMMy" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Venuse" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="microjie" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="Miner#Cetyleno~^" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="春江花月夜" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="落南子" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="AL1Su-爱丽丝" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="我木有呆毛" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="乌羽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="知性de含羞草" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="星の殇" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="IED LTAM" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="格罗夫斯基" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="梦启泉" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="岁月无痕" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="????" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="超级脑壳" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="空梦" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="薛小欣" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="蛋黄豆角" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="芒果茶州" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="癫风院院长" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="三十一" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="美醉了" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="中科院在逃量子计算机" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="." />
-                        <TextBlock Width="120" Margin="0,1.5" Text="枫" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="jjj" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="clilick" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="我很快乐" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Phoenix tamer" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Lsp77" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="太阳神" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ikun0014" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="IncredibleYu" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="在下粉毛控" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="SuperCrazyK" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="阿柔" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="HaKNa" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="胡十一" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="菲利絲" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="迷梦的羽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="20018" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="波比科普员" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Xiao_JIA" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="龙腾我是你的头号粉丝" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="keer1563" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="百鬼まル" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="DPSYnt" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="七色彩羽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="臭氧化碳" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="情来风" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="柒月" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="汪汪队队长" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="迷路的猫" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ktyxlan_lan" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="琳琅039" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="黑色额度" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="sahaua" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="宦昭" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="镜刹" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="房石诶多" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="熊" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="NQ" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="我志永纯" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="漫城" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="憨憨的小草" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="泽涛" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="星海鹿樱" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="祭°" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="赛冷特呀" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="无妄之灾" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ZGW2008" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="没事多喝感冒灵" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="一梦筱筱" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="twokness" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="hhy7171" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="子虚" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="猫羽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="有氧丁真" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="dddr" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="天气热" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Emmanuel" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="夕尽暮染" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Bob_Marcus" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="初心无尘" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="朱利安" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="461863352" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="庭" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Xing_K" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="yzt" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="nuycn" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="鸡人" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="爱无界i" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Zik yeung" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="墨子吉安" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="柠果籽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="cai1" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="小比登T^T" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="hb" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="caizzz" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="yyin" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="無言" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="修" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="改头换面" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="无敌百搭的款式" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="御坂1354号" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="木子" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="萤火焱攸" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="盼盼不是Panda" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="烤肉真香" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ZhuTan12" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="tom" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="洛竹" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="foob" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Garylu" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="阮绍轩" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="xin822" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="BAIgivele" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ljc" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="暖笑" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="焦糖流酥" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="绚丽的星河" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="魔导兔" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="吾乃斗笔" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="君殇" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="沙轻" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="邓布利多" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="红薯散养专业户" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="十言" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="vvvghjvvv" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="法斯" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="DASENSUN" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="HTS" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="握不住信新心" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="sycuuj133" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="天杉大将军" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="风见翎" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="江心Rain" />
-                    </WrapPanel>
-                    <Grid Height="35">
-                        <Grid.ColumnDefinitions>
-                            <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
-                            <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
-                            <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
-                        </Grid.ColumnDefinitions>
-                        <local:MyButton x:Name="BtnDonateOutput" Grid.Column="0" MinWidth="140" Text="生成解锁码" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" ColorType="Highlight" Visibility="Collapsed" />
-                        <local:MyButton x:Name="BtnDonateDonate" Grid.Column="0" MinWidth="140" Text="赞助作者" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" ColorType="Highlight" EventType="打开网页" EventData="https://afdian.com/a/LTCat" />
-                        <local:MyButton x:Name="BtnDonateCopy" Grid.Column="1" MinWidth="140" Text="复制识别码" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" />
-                        <local:MyButton x:Name="BtnDonateInput" Grid.Column="2" MinWidth="140" Text="输入解锁码" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" />
-                    </Grid>
-                </StackPanel>
-            </local:MyCard>
-            <local:MyCard Margin="0,0,0,15" Title="法律信息" IsSwapped="True" CanSwap="True">
-                <StackPanel Margin="25,39,23,20">
-                    <TextBlock Text="隐私说明" TextWrapping="Wrap" Margin="0,6,0,4" FontWeight="Bold" />
-                    <TextBlock Margin="0,0,0,2" LineHeight="17" Text="本软件的 User Agent 中包含启动器的版本号,以统计各版本的用户数量。&#13;除此之外,本软件不会向开发者上传任何其他信息。" TextWrapping="Wrap" />
-                    <TextBlock Text="其他信息" TextWrapping="Wrap" Margin="0,12,0,4" FontWeight="Bold" />
-                    <TextBlock Margin="0,0,0,2" LineHeight="17" Text="Copyright © 龙腾猫跃 2016. All Rights Reserved.&#13;计算机软件著作权登记号:2020SR0875133&#13;违法违规行为举报投诉邮箱:[email protected]&#13;非 MINECRAFT 官方产品。未经 MOJANG 或 MICROSOFT 批准,也不与 MOJANG 或 MICROSOFT 关联。" TextWrapping="Wrap" />
-                    <StackPanel Orientation="Horizontal" Height="35" HorizontalAlignment="Left" Margin="0,12,0,0">
-                        <local:MyButton Text="用户协议与免责声明" Width="170" Padding="13,0" Margin="0,0,20,0" ColorType="Highlight" EventType="打开网页" EventData="https://shimo.im/docs/rGrd8pY8xWkt6ryW" />
-                        <local:MyButton Text="开源代码" Width="140" Padding="13,0" EventType="打开网页" EventData="https://github.com/Hex-Dragon/PCL2" />
-                    </StackPanel>
-                </StackPanel>
-            </local:MyCard>
-            <local:MyCard Margin="0,0,0,15" Title="许可与版权声明" IsSwapped="True" CanSwap="True">
-                <Grid Margin="25,42,23,4">
-                    <Grid.ColumnDefinitions>
-                        <ColumnDefinition Width="Auto" />
-                        <ColumnDefinition Width="20" />
-                        <ColumnDefinition Width="Auto" />
-                        <ColumnDefinition />
-                    </Grid.ColumnDefinitions>
-                    <Grid.RowDefinitions>
-                        <RowDefinition Height="Auto" />
-                        <RowDefinition Height="60" />
-                        <RowDefinition Height="Auto" />
-                        <RowDefinition Height="60" />
-                        <RowDefinition Height="Auto" />
-                        <RowDefinition Height="60" />
-                        <RowDefinition Height="Auto" />
-                        <RowDefinition Height="60" />
-                        <RowDefinition Height="Auto" />
-                        <RowDefinition Height="60" />
-                        <RowDefinition Height="Auto" />
-                        <RowDefinition Height="60" />
-                        <RowDefinition Height="Auto" />
-                        <RowDefinition Height="60" />
-                        <RowDefinition Height="Auto" />
-                    </Grid.RowDefinitions>
-                    <TextBlock Grid.Row="0" Grid.Column="0" Text="Java Launch Wrapper" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2022 00ll00&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="1" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://github.com/00ll00/java_launch_wrapper" />
-                    <local:MyButton Grid.Row="1" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://github.com/00ll00/java_launch_wrapper?tab=MIT-1-ov-file#readme" />
-
-                    <TextBlock Grid.Row="2" Grid.Column="0" Text="Newtonsoft.Json" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2007 James Newton-King&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="3" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://www.newtonsoft.com/json" />
-                    <local:MyButton Grid.Row="3" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://opensource.org/licenses/MIT" />
-                    
-                    <TextBlock Grid.Row="4" Grid.Column="0" Text="NAudio" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2015 Mark Heath ([email protected])&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="5" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://github.com/naudio/NAudio" />
-                    <local:MyButton Grid.Row="5" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left" 
-                                    EventType="打开网页" EventData="https://github.com/naudio/NAudio/blob/master/license.txt" />
-                    
-                    <TextBlock Grid.Row="6" Grid.Column="0" Text="Ookii.Dialogs" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2009 Sven Groot (Ookii.org)" TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="7" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://www.ookii.org/Software/Dialogs/" />
-                    <local:MyButton Grid.Row="7" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://github.com/caioproiete/ookii-dialogs-wpf/blob/master/LICENSE" />
-                    
-                    <TextBlock Grid.Row="8" Grid.Column="0" Text="Iconmonstr" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="8" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2019 iconmonstr (Alexander Kahlkopf)" TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="9" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://iconmonstr.com/" />
-                    <local:MyButton Grid.Row="9" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://iconmonstr.com/license/" />
-                    
-                    <TextBlock Grid.Row="10" Grid.Column="0" Text="libwebp wrapper for .NET" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="10" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2012 Imazen&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="11" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://github.com/imazen/libwebp-net" />
-                    <local:MyButton Grid.Row="11" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://github.com/imazen/libwebp-net/blob/master/LICENSE.txt" />
-
-                    <TextBlock Grid.Row="12" Grid.Column="0" Text="Iconfont" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © ALIMAMA MUX, powered by alimama THX." TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="13" Grid.Column="2" MinWidth="140" Text="查看原网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    EventType="打开网页" EventData="https://www.iconfont.cn/" />
-
-                </Grid>
-            </local:MyCard>
-        </StackPanel>
-    </local:MyScrollViewer>
-</local:MyPageRight>
+<local:MyPageRight
+    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+    xmlns:local="clr-namespace:PCL" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+    mc:Ignorable="d" x:Class="PageOtherAbout"
+    PanScroll="{Binding ElementName=PanBack}" RenderOptions.BitmapScalingMode="LowQuality">
+    <local:MyScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" x:Name="PanBack">
+        <StackPanel x:Name="PanMain" Margin="25,10" Grid.IsSharedSizeScope="True">
+            <local:MyCard Margin="0,15" Title="关于">
+                <Grid Margin="21,40,21,16">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="45" />
+                        <RowDefinition Height="45" />
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="40" />
+                        <ColumnDefinition />
+                        <ColumnDefinition Width="150" />
+                    </Grid.ColumnDefinitions>
+                    <local:MyListItem IsHitTestVisible="False" Title="龙腾猫跃" Margin="-5,0,15,0" Info="Plain Craft Launcher 的开发者!" Grid.Row="0" Grid.Column="1" />
+                    <local:MyListItem IsHitTestVisible="False" Title="Plain Craft Launcher 2" Margin="-5,0,15,0" Info="当前版本:%VERSION%(%VERSIONCODE%.%BRANCH%)" Grid.Row="1" Grid.Column="1" x:Name="ItemAboutPcl" />
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/Logo.png" Grid.Row="1" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/LTCat.jpg" Grid.Row="0" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                    <local:MyButton Text="赞助 PCL !" Grid.Column="2" Grid.Row="0" Height="35" EventType="打开网页" EventData="https://afdian.com/a/LTCat" ColorType="Highlight" />
+                    <local:MyButton Text="查看源代码" Grid.Column="2" Grid.Row="1" Height="35" EventType="打开网页" EventData="https://github.com/Hex-Dragon/PCL2" />
+                </Grid>
+            </local:MyCard>
+            <local:MyCard Margin="0,0,0,15" Title="特别鸣谢">
+                <Grid Margin="21,40,21,16">
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="45" />
+                        <RowDefinition Height="45" />
+                        <RowDefinition Height="45" />
+                        <RowDefinition Height="45" />
+                        <RowDefinition Height="45" />
+                        <RowDefinition Height="45" />
+                        <RowDefinition Height="45" />
+                        <RowDefinition Height="45" />
+                    </Grid.RowDefinitions>
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="40" />
+                        <ColumnDefinition />
+                        <ColumnDefinition Width="150" />
+                    </Grid.ColumnDefinitions>
+                    <local:MyListItem Title="bangbang93" Margin="-5,0,15,0" IsHitTestVisible="False" Info="提供 BMCLAPI 镜像源和 Forge 安装工具,详见 https://bmclapi.bangbang93.com" Grid.Row="0" Grid.Column="1" />
+                    <local:MyButton Text="赞助镜像源" Grid.Row="0" Grid.Column="2" Height="35" EventType="打开网页" EventData="https://afdian.com/a/bangbang93" />
+                    <local:MyListItem Title="MC 百科" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="提供了 Mod 名称的中文翻译和更多相关信息!" Grid.Row="1" Grid.Column="1" />
+                    <local:MyButton Text="打开百科" Grid.Row="1" Grid.Column="2" Height="35" EventType="打开网页" EventData="https://www.mcmod.cn" />
+                    <local:MyListItem Title="z0z0r4" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="提供了 MCIM 社区资源镜像源和帮助库图床!" Grid.Row="2" Grid.Column="1" />
+                    <local:MyButton Text="MCIM 主页" Grid.Row="2" Grid.Column="2" Height="35" EventType="打开网页" EventData="https://github.com/mcmod-info-mirror" />
+                    <local:MyListItem Title="00ll00" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="提供了 Java Launch Wrapper 和一些重要服务支持!" Grid.Row="3" Grid.Column="1" />
+                    <local:MyListItem Title="Patrick" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="设计并制作了 PCL 图标,让我从做图标的水深火热中得到了解脱……" Grid.Row="4" Grid.Column="1" />
+                    <local:MyListItem Title="Hao_Tian" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="在内测中找出了一大堆没人想得到的诡异 Bug,有非同寻常的 Bug 体质" Grid.Row="5" Grid.Column="1" />
+                    <local:MyListItem Title="Minecraft 中文论坛" Margin="-5,0,15,0" IsHitTestVisible="False" Info="虽然已经关站了,但感谢此前提供了 MCBBS 镜像源……" Grid.Row="6" Grid.Column="1" />
+                    <local:MyListItem Title="PCL 内群的各位" Margin="-5,0,0,0" IsHitTestVisible="False" Grid.ColumnSpan="2" Info="感谢内群的沙雕网友们这么久以来对我和 PCL 的支持与鼓励!" Grid.Row="7" Grid.Column="1" />
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/bangbang93.png" Grid.Row="0" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/wiki.png" Grid.Row="1" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/z0z0r4.png" Grid.Row="2" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/00ll00.png" Grid.Row="3" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/Patrick.png" Grid.Row="4" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/Hao_Tian.jpg" Grid.Row="5" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/MCBBS.png" Grid.Row="6" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                    <Image Source="/Plain Craft Launcher 2;component/Images/Heads/PCL2.png" Grid.Row="7" Margin="3">
+                        <Image.Clip>
+                            <EllipseGeometry Center="17 17" RadiusX="17" RadiusY="17" />
+                        </Image.Clip>
+                    </Image>
+                </Grid>
+            </local:MyCard>
+            <local:MyCard Margin="0,0,0,15" Title="赞助者">
+                <StackPanel Margin="25,40,10,20">
+                    <TextBlock HorizontalAlignment="Left" Text="以下是 2025 年 7 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
+                    <WrapPanel Margin="0,0,0,10">
                        <TextBlock Width="120" Margin="0,1.5" Text="ZSF" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="TizhleF" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="方源" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="日月空呵" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="贾明志" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="百瑞" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Flying___pig" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="绝世" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Jwac" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="万玖" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="墨忆" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="天刹" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Cess" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ender_glass" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="TT" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="白玄.雪狼" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="MUCT" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="崇昀" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="绪" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="吾皇万岁" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Ander·Les" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Eoctopus" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="时光飞逝一下午" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Carl7412" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ShinyChariot" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="骨故谷" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="?" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Jinji希子" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="自然选择" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="云念" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="钱尹鹏" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="TBONC" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="祈农" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="凤凰院凶真" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ShuangDaoRen" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="PXZ233" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="二十二今天有没有" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="天魕" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="南华清" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="66112447" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="夏行子" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="周俊成" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="乌漆嘛黑" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="肘击恶魔佐巴扬" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Pari~" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="红云" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Link-an" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="想要钱用不完" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="花宝" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="生于春天的雷电" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="被偷去的睡眠" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="liuxuan" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="寒枫凌" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="雀色时" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="架" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="终成究竟觉" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="S0D1UM" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="吞仔送命" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="白浪宇宙" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Crimson" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Mibo_MkIX" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="G.snine18^7" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="两把雨伞" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="古明地苑" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="MarbleMionshevic" />
+                        <TextBlock Width="120" Margin="0,1.5" Text=":〈" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="紫罗兰" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="asai" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="隔壁小明" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="就爱唱歌" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="沫神鹤" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="风已消逝" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="光意留闪" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="我们长征的路上" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="芸芷" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="函数极限" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="冰川泥" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="XunWei" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="sirous" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="路过某打酱油的" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Gnight07" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="结构德古拉" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="myyukee" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="云之彼端约定的地方" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="苏玖" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="赤沃净" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="YYC" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="晨曦酒庄高冷男" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="herald112" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Foxman" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="KoreQAQ" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="TechOfRevo" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="lqs" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="简某" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="源起于此" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="爱莉希雅" />
+                        <TextBlock Width="120" Margin="0,1.5" Text=" 和忧" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="全明星小面包批发商DIO" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="碎序" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="U" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Dumlet" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="johnqian" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="KANG" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="owod" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="九" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="苑煜" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="壹" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="UA-Ming" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="可爱小探姬" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="霜月" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="bud" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="小虐SAIKYO" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="zealotand" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="comico" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="万山松" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="依梦明天" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="化形彧九尾" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="知崎" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="LOG175" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="绵" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="scp00813" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="宝宝" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="9527" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ICE_xwx" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="羽笙喵喵" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ssvgg(☉ x ☉)" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Happymeals" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="shen12244" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="一般路过AAA" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Niko" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="qroiwopqri" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="TringDron" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="有屳則名" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="TX2006" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="滑天下之大稽" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="中东悍匪" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="鬼泣々离殇" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="蒼崎青子" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="wyh114514" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="飞飞在睡觉。" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="柚西" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="XIAOSHUAI" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="saxioh" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="baibaibai" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="事屑Jerry" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Rs32" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="SPDish" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="风早九夜" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Reg" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="hellord" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="时本ki" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="mamana" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="放肆的微笑" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="人没逝" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="wddjww" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="xiao澄" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="银狼碎片" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="OniKata_Kayoko" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="曦" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Echo" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="画卿颜" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="夏 " />
+                        <TextBlock Width="120" Margin="0,1.5" Text="jiege45" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="甜食先生" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="虚莫妄玄" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="天恒" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="我有馄饨" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="布布曼" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="qwqewe" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="114514" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="YJ_42" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Xricron" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="抛弃大脑" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="10455885" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="羽渡白砂" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="沙" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="sukous" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="册那" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="KMYLS" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="kakadeso" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="懒猫" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="清岚" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Atopos" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="苦尽柑来" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="脑洞大开的血魔" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ももかわるこ" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="空中的风" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="黑夜幽灵" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="H1saNe" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="故风" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="臭氧化碳" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="云阿云" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="小命" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="南宫若兮" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Landsilde" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="zzz" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="星期三" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Ashburn" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="123" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="九日" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="古神" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="月宫星耀" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="郁子恒是FW" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="每天吃吃吃吃吃不饱" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Freezhao" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ZHypocrite" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="十下小雨" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="九 十" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="RuthlessXdream" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="zv-vz" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="汐沄的随记" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="REMOTE" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="昔阳" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="七度ユキノ" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="KNISX" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="RainbowDashRD" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="夢曦" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="跳雨风" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="望言苏" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="四分白Fortenz" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="UUZ" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Ankairis" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Jn1E" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="云山如昨好" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="LYJ0415" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="空?" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Awfrlu+" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="懒帝" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="北安丶七叔" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="xkw" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="KINO" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="POTATO" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="少昊氏" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="狂踹瘸子那條好腿丶" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="Thallium_Ash【铊尘】(坨坨)" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="陌雨泠涯" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="bajie79" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="紘垰" />
+                    </WrapPanel>
+                    <Grid Height="35">
+                        <Grid.ColumnDefinitions>
+                            <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
+                            <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
+                            <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
+                        </Grid.ColumnDefinitions>
+                        <local:MyButton x:Name="BtnDonateOutput" Grid.Column="0" MinWidth="140" Text="生成解锁码" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" ColorType="Highlight" Visibility="Collapsed" />
+                        <local:MyButton x:Name="BtnDonateDonate" Grid.Column="0" MinWidth="140" Text="赞助作者" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" ColorType="Highlight" EventType="打开网页" EventData="https://afdian.com/a/LTCat" />
+                        <local:MyButton x:Name="BtnDonateCopy" Grid.Column="1" MinWidth="140" Text="复制识别码" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" />
+                        <local:MyButton x:Name="BtnDonateInput" Grid.Column="2" MinWidth="140" Text="输入解锁码" Padding="13,0" Margin="0,0,20,0" HorizontalAlignment="Left" />
+                    </Grid>
+                </StackPanel>
+            </local:MyCard>
+            <local:MyCard Margin="0,0,0,15" Title="法律信息" IsSwapped="True" CanSwap="True">
+                <StackPanel Margin="25,39,23,20">
+                    <TextBlock Text="匿名数据收集" TextWrapping="Wrap" Margin="0,6,0,4" FontWeight="Bold" />
+                    <TextBlock Margin="0,0,0,2" LineHeight="17" Text="当下载失败、PCL 出错、游戏崩溃等事件时,PCL 会匿名上报信息,以通知龙猫 “哦吼,出错了”,让龙猫能更好地修 Bug……(PCL 不会上传或收集任何个人信息,包括上报的东西里面也没有!)&#xa;你可以在 设置 → 其他 → 启动器 中关闭上报,不过龙猫就不知道你遇到了什么 Bug 了……" TextWrapping="Wrap" />
+                    <TextBlock Text="隐私声明与个人信息保护政策" TextWrapping="Wrap" Margin="0,10,0,4" FontWeight="Bold" />
+                    <TextBlock Margin="0,0,0,2" LineHeight="17" Text="PCL 没有收集个人信息,所以这里其实啥都不用写……&#xa;留个这个其实只是为了让你知道 PCL 没有收集个人信息,诶嘿。" TextWrapping="Wrap" />
+                    <TextBlock Text="其他信息" TextWrapping="Wrap" Margin="0,10,0,4" FontWeight="Bold" />
+                    <TextBlock Margin="0,0,0,2" LineHeight="17" Text="Copyright © 龙腾猫跃 2016. All Rights Reserved.&#13;计算机软件著作权登记号:2020SR0875133&#13;违法违规行为举报投诉邮箱:[email protected]&#13;非 MINECRAFT 官方产品。未经 MOJANG 或 MICROSOFT 批准,也不与 MOJANG 或 MICROSOFT 关联。" TextWrapping="Wrap" />
+                    <StackPanel Orientation="Horizontal" Height="35" HorizontalAlignment="Left" Margin="0,12,0,0">
+                        <local:MyButton Text="用户协议与免责声明" Width="170" Padding="13,0" Margin="0,0,20,0" ColorType="Highlight" EventType="打开网页" EventData="https://shimo.im/docs/rGrd8pY8xWkt6ryW" />
+                        <local:MyButton Text="开源代码" Width="140" Padding="13,0" EventType="打开网页" EventData="https://github.com/Hex-Dragon/PCL2" />
+                    </StackPanel>
+                </StackPanel>
+            </local:MyCard>
+            <local:MyCard Margin="0,0,0,15" Title="许可与版权声明" IsSwapped="True" CanSwap="True">
+                <Grid Margin="25,42,23,4">
+                    <Grid.ColumnDefinitions>
+                        <ColumnDefinition Width="Auto" />
+                        <ColumnDefinition Width="20" />
+                        <ColumnDefinition Width="Auto" />
+                        <ColumnDefinition />
+                    </Grid.ColumnDefinitions>
+                    <Grid.RowDefinitions>
+                        <RowDefinition Height="Auto" />
+                        <RowDefinition Height="60" />
+                        <RowDefinition Height="Auto" />
+                        <RowDefinition Height="60" />
+                        <RowDefinition Height="Auto" />
+                        <RowDefinition Height="60" />
+                        <RowDefinition Height="Auto" />
+                        <RowDefinition Height="60" />
+                        <RowDefinition Height="Auto" />
+                        <RowDefinition Height="60" />
+                        <RowDefinition Height="Auto" />
+                        <RowDefinition Height="60" />
+                        <RowDefinition Height="Auto" />
+                        <RowDefinition Height="60" />
+                        <RowDefinition Height="Auto" />
+                    </Grid.RowDefinitions>
+                    <TextBlock Grid.Row="0" Grid.Column="0" Text="Java Launch Wrapper" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2022 00ll00&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="1" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://github.com/00ll00/java_launch_wrapper" />
+                    <local:MyButton Grid.Row="1" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://github.com/00ll00/java_launch_wrapper?tab=MIT-1-ov-file#readme" />
+
+                    <TextBlock Grid.Row="2" Grid.Column="0" Text="Newtonsoft.Json" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2007 James Newton-King&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="3" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://www.newtonsoft.com/json" />
+                    <local:MyButton Grid.Row="3" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://opensource.org/licenses/MIT" />
+                    
+                    <TextBlock Grid.Row="4" Grid.Column="0" Text="NAudio" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2015 Mark Heath ([email protected])&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="5" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://github.com/naudio/NAudio" />
+                    <local:MyButton Grid.Row="5" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left" 
+                                    EventType="打开网页" EventData="https://github.com/naudio/NAudio/blob/master/license.txt" />
+                    
+                    <TextBlock Grid.Row="6" Grid.Column="0" Text="Ookii.Dialogs" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2009 Sven Groot (Ookii.org)" TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="7" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://www.ookii.org/Software/Dialogs/" />
+                    <local:MyButton Grid.Row="7" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://github.com/caioproiete/ookii-dialogs-wpf/blob/master/LICENSE" />
+                    
+                    <TextBlock Grid.Row="8" Grid.Column="0" Text="Iconmonstr" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="8" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2019 iconmonstr (Alexander Kahlkopf)" TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="9" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://iconmonstr.com/" />
+                    <local:MyButton Grid.Row="9" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://iconmonstr.com/license/" />
+                    
+                    <TextBlock Grid.Row="10" Grid.Column="0" Text="libwebp wrapper for .NET" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="10" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2012 Imazen&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="11" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://github.com/imazen/libwebp-net" />
+                    <local:MyButton Grid.Row="11" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://github.com/imazen/libwebp-net/blob/master/LICENSE.txt" />
+
+                    <TextBlock Grid.Row="12" Grid.Column="0" Text="Iconfont" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © ALIMAMA MUX, powered by alimama THX." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="13" Grid.Column="2" MinWidth="140" Text="查看原网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    EventType="打开网页" EventData="https://www.iconfont.cn/" />
+
+                </Grid>
+            </local:MyCard>
+        </StackPanel>
+    </local:MyScrollViewer>
+</local:MyPageRight>

+ 0 - 6
Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml.vb

@@ -18,12 +18,6 @@
 
     End Sub
 
-    Private Sub BtnAboutBmclapi_Click(sender As Object, e As EventArgs) Handles BtnAboutBmclapi.Click
-        OpenWebsite("https://afdian.com/a/bangbang93")
-    End Sub
-    Private Sub BtnAboutWiki_Click(sender As Object, e As EventArgs) Handles BtnAboutWiki.Click
-        OpenWebsite("https://www.mcmod.cn")
-    End Sub
     Public Shared Sub CopyUniqueAddress() Handles BtnDonateCopy.Click
         ClipboardSet(UniqueAddress)
     End Sub

+ 2 - 8
Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb

@@ -41,6 +41,7 @@
         {"SystemSystemCache", New SetupEntry("", Source:=SetupSource.Registry)},
         {"SystemSystemUpdate", New SetupEntry(0)},
         {"SystemSystemActivity", New SetupEntry(0)},
+        {"SystemSystemTelemetry", New SetupEntry(True, Source:=SetupSource.Registry)},
         {"CacheExportConfig", New SetupEntry("", Source:=SetupSource.Registry)},
         {"CacheSavedPageUrl", New SetupEntry("", Source:=SetupSource.Registry)},
         {"CacheSavedPageVersion", New SetupEntry("", Source:=SetupSource.Registry)},
@@ -123,7 +124,7 @@
         {"ToolDownloadTranslateV2", New SetupEntry(1, Source:=SetupSource.Registry)},
         {"ToolDownloadIgnoreQuilt", New SetupEntry(True, Source:=SetupSource.Registry)},
         {"ToolDownloadCert", New SetupEntry(False, Source:=SetupSource.Registry)},
-        {"ToolDownloadMod", New SetupEntry(1, Source:=SetupSource.Registry)},
+        {"ToolDownloadMod", New SetupEntry(2, Source:=SetupSource.Registry)},
         {"ToolModLocalNameStyle", New SetupEntry(0, Source:=SetupSource.Registry)},
         {"ToolUpdateAlpha", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)},
         {"ToolUpdateRelease", New SetupEntry(False, Source:=SetupSource.Registry)},
@@ -356,13 +357,6 @@
                 Return Not HasIniKey(Version.Path & "PCL\Setup.ini", Key)
         End Select
     End Function
-    ''' <summary>
-    ''' 某个设置项是否加密。
-    ''' </summary>
-    Public Function IsEncoded(Key As String) As Boolean
-        If Not SetupDict.ContainsKey(Key) Then Throw New KeyNotFoundException("未找到设置项:" & Key) With {.Source = Key}
-        Return SetupDict(Key).Encoded
-    End Function
 
     ''' <summary>
     ''' 读取设置。

+ 1 - 1
Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml

@@ -242,7 +242,7 @@
                     </StackPanel>
                     <local:MyTextBox x:Name="TextAdvanceJvm" Grid.ColumnSpan="2" Tag="LaunchAdvanceJvm" Grid.Column="1" ToolTip="启动 Minecraft 时使用的额外 JVM 参数,除非有确定把握,否则请不要修改。&#xa;支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。" MaxLength="4000"
                                  Height="100" AcceptsReturn="True" TextWrapping="Wrap" VerticalContentAlignment="Top" Padding="0,5" VerticalScrollBarVisibility="Auto" />
-                    <TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="游戏参数尾部" Margin="0,0,25,0" />
+                    <TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="游戏参数" Margin="0,0,25,0" />
                     <local:MyTextBox x:Name="TextAdvanceGame" Grid.Row="2" Grid.ColumnSpan="2" Tag="LaunchAdvanceGame" Grid.Column="1" ToolTip="文本框中的内容将会被直接拼合在启动参数的末尾。&#xa;例如,输入 --demo 则会以试玩模式启动游戏。&#xa;支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。" />
                     <TextBlock Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Left" Text="启动前执行命令" Margin="0,0,25,0" />
                     <local:MyTextBox x:Name="TextAdvanceRun" Grid.Row="4" Grid.ColumnSpan="2" Tag="LaunchAdvanceRun" Grid.Column="1" HintText=""

+ 17 - 11
Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml

@@ -62,16 +62,18 @@
                             <RowDefinition Height="7" />
                             <RowDefinition Height="28" />
                             <RowDefinition Height="7" />
+                            <RowDefinition Height="28" />
+                            <RowDefinition Height="7" />
                             <RowDefinition Height="Auto" />
                         </Grid.RowDefinitions>
-                        <!--<TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="下载源" Margin="0,0,25,0" />
+                        <TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="来源" Margin="0,0,25,0" />
                         <local:MyComboBox x:Name="ComboDownloadMod" Grid.Row="0" Grid.ColumnSpan="2" Tag="ToolDownloadMod" Grid.Column="1">
-                            <local:MyComboBoxItem Content="尽量使用镜像源(暂时无效)" />
+                            <local:MyComboBoxItem Content="尽量使用镜像源(可能缺少刚刚更新的版本)" />
                             <local:MyComboBoxItem Content="仅在官方源加载缓慢时改用镜像源" />
                             <local:MyComboBoxItem Content="尽量使用官方源" IsSelected="True" />
-                        </local:MyComboBox>-->
-                        <TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="文件名格式" Margin="0,0,25,0" />
-                        <local:MyComboBox Grid.Row="0" x:Name="ComboDownloadTranslateV2" Grid.ColumnSpan="2" Tag="ToolDownloadTranslateV2" Grid.Column="1" 
+                        </local:MyComboBox>
+                        <TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="文件名格式" Margin="0,0,25,0" />
+                        <local:MyComboBox Grid.Row="2" x:Name="ComboDownloadTranslateV2" Grid.ColumnSpan="2" Tag="ToolDownloadTranslateV2" Grid.Column="1" 
                                           ToolTip="下载社区资源时,其默认文件名的格式">
                             <local:MyComboBoxItem Content="【机械动力】create-1.21.1-6.0.4" />
                             <local:MyComboBoxItem Content="[机械动力] create-1.21.1-6.0.4" IsSelected="True" />
@@ -79,13 +81,13 @@
                             <local:MyComboBoxItem Content="create-1.21.1-6.0.4-机械动力" />
                             <local:MyComboBoxItem Content="create-1.21.1-6.0.4" />
                         </local:MyComboBox>
-                        <TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="Mod 管理样式" Margin="0,0,25,0" />
-                        <local:MyComboBox Grid.Row="2" x:Name="ComboModLocalNameStyle" Grid.ColumnSpan="2" Tag="ToolModLocalNameStyle" Grid.Column="1" 
+                        <TextBlock Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Left" Text="Mod 管理样式" Margin="0,0,25,0" />
+                        <local:MyComboBox Grid.Row="4" x:Name="ComboModLocalNameStyle" Grid.ColumnSpan="2" Tag="ToolModLocalNameStyle" Grid.Column="1" 
                                           ToolTip="在 Mod 管理页面中,Mod 项的显示方式">
                             <local:MyComboBoxItem Content="标题显示译名,详情显示文件名" IsSelected="True" />
                             <local:MyComboBoxItem Content="标题显示文件名,详情显示译名" />
                         </local:MyComboBox>
-                        <local:MyCheckBox Margin="0,2,0,4" Text="在显示 Mod 加载器时忽略 Quilt" Grid.Row="4" Height="22" Grid.ColumnSpan="2"
+                        <local:MyCheckBox Margin="0,2,0,4" Text="在显示 Mod 加载器时忽略 Quilt" Grid.Row="6" Height="22" Grid.ColumnSpan="2"
                                           x:Name="CheckDownloadIgnoreQuilt" Tag="ToolDownloadIgnoreQuilt" />
                     </Grid>
                 </StackPanel>
@@ -109,7 +111,7 @@
                     <local:MyCheckBox Text="自动设置为中文" Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="5" x:Name="CheckHelpChinese" Tag="ToolHelpChinese" />
                 </Grid>
             </local:MyCard>
-            <local:MyCard Margin="0,0,0,15" Title="系统">
+            <local:MyCard Margin="0,0,0,15" Title="启动器">
                 <Grid Margin="25,40,25,20">
                     <Grid.ColumnDefinitions>
                         <ColumnDefinition Width="Auto" SharedSizeGroup="Name" />
@@ -124,6 +126,7 @@
                         <RowDefinition Height="5" />
                         <RowDefinition Height="Auto" />
                         <RowDefinition Height="Auto" />
+                        <RowDefinition Height="Auto" />
                     </Grid.RowDefinitions>
                     <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text="启动器更新" Margin="0,0,25,0" />
                     <local:MyComboBox x:Name="ComboSystemUpdate" Tag="SystemSystemUpdate" Grid.Column="1">
@@ -145,7 +148,10 @@
                             <local:ValidateFolderPath UseMinecraftCharCheck="False" />
                         </local:MyTextBox.ValidateRules>
                     </local:MyTextBox>
-                    <Grid Height="35" Grid.Row="6" Grid.ColumnSpan="5" Margin="0,12,0,0">
+                    <local:MyCheckBox Margin="0,5,0,4" Text="匿名数据收集" Grid.Row="6" Height="22" Grid.ColumnSpan="2"
+                        x:Name="CheckSystemTelemetry" Tag="SystemSystemTelemetry" 
+                        ToolTip="当下载失败、PCL 出错、游戏崩溃等事件时,PCL 会匿名上报情况,以通知龙猫 “哦吼,出错了”,让龙猫能更好地修 Bug……&#xa;你可以关闭上报,不过龙猫就不知道你遇到了什么 Bug 了……&#13;PCL 不会上传或收集任何个人信息,包括上报的东西里面也没有!" />
+                    <Grid Height="35" Grid.Row="7" Grid.ColumnSpan="5" Margin="0,12,0,0">
                         <Grid.ColumnDefinitions>
                             <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
                             <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
@@ -155,7 +161,7 @@
                         <local:MyButton Grid.Column="1" x:Name="BtnSystemSettingExp" MinWidth="140" Text="导出设置" Padding="13,0" Margin="0,0,20,0" />
                         <local:MyButton Grid.Column="2" x:Name="BtnSystemSettingImp" MinWidth="140" Text="导入设置" Padding="13,0" Margin="0,0,20,0" />
                     </Grid>
-                    <Grid Height="35" Grid.Row="7" Grid.ColumnSpan="5" Margin="0,12,0,0" x:Name="PanDonate">
+                    <Grid Height="35" Grid.Row="8" Grid.ColumnSpan="5" Margin="0,12,0,0" x:Name="PanDonate">
                         <Grid.ColumnDefinitions>
                             <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
                             <ColumnDefinition Width="Auto" SharedSizeGroup="Button" />

+ 5 - 3
Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb

@@ -35,7 +35,7 @@
 
         'Mod 与整合包
         ComboDownloadTranslateV2.SelectedIndex = Setup.Get("ToolDownloadTranslateV2")
-        'ComboDownloadMod.SelectedIndex = Setup.Get("ToolDownloadMod")
+        ComboDownloadMod.SelectedIndex = Setup.Get("ToolDownloadMod")
         ComboModLocalNameStyle.SelectedIndex = Setup.Get("ToolModLocalNameStyle")
         CheckDownloadIgnoreQuilt.Checked = Setup.Get("ToolDownloadIgnoreQuilt")
 
@@ -50,6 +50,7 @@
         ComboSystemUpdate.SelectedIndex = Setup.Get("SystemSystemUpdate")
         ComboSystemActivity.SelectedIndex = Setup.Get("SystemSystemActivity")
         TextSystemCache.Text = Setup.Get("SystemSystemCache")
+        CheckSystemTelemetry.Checked = Setup.Get("SystemSystemTelemetry")
 
         '调试选项
         CheckDebugMode.Checked = Setup.Get("SystemDebugMode")
@@ -81,6 +82,7 @@
             Setup.Reset("SystemSystemCache")
             Setup.Reset("SystemSystemUpdate")
             Setup.Reset("SystemSystemActivity")
+            Setup.Reset("SystemSystemTelemetry")
 
             Log("[Setup] 已初始化启动器页设置")
             Hint("已初始化启动器页设置!", HintType.Finish, False)
@@ -92,13 +94,13 @@
     End Sub
 
     '将控件改变路由到设置改变
-    Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckDebugMode.Change, CheckDebugDelay.Change, CheckDebugSkipCopy.Change, CheckUpdateRelease.Change, CheckUpdateSnapshot.Change, CheckHelpChinese.Change, CheckDownloadIgnoreQuilt.Change, CheckDownloadCert.Change
+    Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckDebugMode.Change, CheckDebugDelay.Change, CheckDebugSkipCopy.Change, CheckUpdateRelease.Change, CheckUpdateSnapshot.Change, CheckHelpChinese.Change, CheckDownloadIgnoreQuilt.Change, CheckDownloadCert.Change, CheckSystemTelemetry.Change
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked)
     End Sub
     Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderDebugAnim.Change, SliderDownloadThread.Change, SliderDownloadSpeed.Change
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value)
     End Sub
-    Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboDownloadVersion.SelectionChanged, ComboModLocalNameStyle.SelectionChanged, ComboDownloadTranslateV2.SelectionChanged, ComboSystemUpdate.SelectionChanged, ComboSystemActivity.SelectionChanged, ComboDownloadSource.SelectionChanged
+    Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboDownloadVersion.SelectionChanged, ComboModLocalNameStyle.SelectionChanged, ComboDownloadTranslateV2.SelectionChanged, ComboSystemUpdate.SelectionChanged, ComboSystemActivity.SelectionChanged, ComboDownloadSource.SelectionChanged, ComboDownloadMod.SelectionChanged
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
     End Sub
     Private Shared Sub TextBoxChange(sender As MyTextBox, e As Object) Handles TextSystemCache.ValidatedTextChanged

+ 2 - 2
Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml

@@ -211,7 +211,7 @@
                     <TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="Java 虚拟机参数" Margin="0,0,25,0" />
                     <local:MyTextBox x:Name="TextAdvanceJvm" Grid.Row="0" Grid.ColumnSpan="2" Tag="VersionAdvanceJvm" Grid.Column="1" MaxLength="4000" ToolTip="启动 Minecraft 时使用的额外 JVM 参数,在没有确定把握的情况下请不要尝试修改。&#xa;支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。&#xa;&#xa;若留空,则跟随全局设置的值。" HintText="跟随全局设置"
                                      Height="100" AcceptsReturn="True" TextWrapping="Wrap" VerticalContentAlignment="Top" Padding="0,5" VerticalScrollBarVisibility="Auto" />
-                    <TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="游戏参数尾部" Margin="0,0,25,0" />
+                    <TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="游戏参数" Margin="0,0,25,0" />
                     <local:MyTextBox x:Name="TextAdvanceGame" Grid.Row="2" Grid.ColumnSpan="2" Tag="VersionAdvanceGame" Grid.Column="1" ToolTip="文本框中的内容将会被直接拼合在启动参数的末尾。&#xa;例如,输入 --demo 则会以试玩模式启动游戏。&#xa;支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。&#xa;&#xa;若留空,则跟随全局设置的值。" HintText="跟随全局设置" />
                     <TextBlock Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Left" Text="启动前执行命令" Margin="0,0,25,3" />
                     <local:MyTextBox x:Name="TextAdvanceRun" Grid.Row="4" Grid.ColumnSpan="2" Tag="VersionAdvanceRun" Grid.Column="1" HintText="" Margin="0,0,0,3"
@@ -236,4 +236,4 @@
                 LogoScale="0.9" Logo="M73 584L920 584 608 896C579 925 579 972 608 1001 637 1030 683 1030 712 1001L1149 565C1164 550 1170 531 1170 511 1170 492 1164 472 1149 457L712 21C683-7 637-7 608 21 579 50 579 97 608 126L920 438 73 438C33 438 0 471 0 511 0 551 33 584 73 584Z" />
         </StackPanel>
     </local:MyScrollViewer>
-</local:MyPageRight>
+</local:MyPageRight>

+ 9 - 3
Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb

@@ -355,6 +355,15 @@ PreFin:
 
 #Region "服务器"
 
+    '自动替换标点
+    Private Sub TextServerEnter_Change() Handles TextServerEnter.TextChanged
+        Dim NewText = TextServerEnter.Text.Replace(":", ":").Replace("。", ".")
+        If NewText = TextServerEnter.Text Then Return
+        Dim CurrentPosition = TextServerEnter.SelectionStart '重设焦点
+        TextServerEnter.Text = NewText
+        TextServerEnter.SelectionStart = CurrentPosition
+    End Sub
+
     '全局
     Private ComboServerLoginLast As Integer
     Private Sub ComboServerLogin_Changed() Handles ComboServerLogin.SelectionChanged, TextServerNide.ValidatedTextChanged, TextServerAuthServer.ValidatedTextChanged, TextServerAuthRegister.ValidatedTextChanged
@@ -399,9 +408,6 @@ PreFin:
         TextServerAuthName.Text = "LittleSkin 登录"
     End Sub
 
-    Private Shared Sub TextServerEnter_Change(sender As MyTextBox, e As Object) Handles TextServerEnter.LostFocus
-        sender.Text = sender.Text.Replace(":", ":")
-    End Sub
 #End Region
 
 #Region "Java 选择"

+ 4 - 0
Plain Craft Launcher 2/Resources/Custom.xaml

@@ -138,6 +138,10 @@
                     Text="· 下载版本:切换到 EventData 对应的 Minecraft 下载页面"/>
 		<local:MyButton Margin="0,5,0,6" Width="250" Height="35"
                     Text="下载 Minecraft 1.12.2" EventType="下载版本" EventData="1.12.2"/>
+		<TextBlock Margin="0,4,0,4"
+                    Text="· 修改设置:将 PCL 的特定设置修改为特定值"/>
+		<local:MyButton Margin="0,5,0,6" Width="250" Height="35"
+                    Text="将窗口改为半透明" EventType="修改设置" EventData="UiLauncherTransparent|400"/>
     </StackPanel>
 </local:MyCard>
 

BIN
Plain Craft Launcher 2/Resources/Help.zip