龙腾猫跃 7 ماه پیش
والد
کامیت
be67c4ccc2
27فایلهای تغییر یافته به همراه1187 افزوده شده و 1309 حذف شده
  1. 2 1
      Plain Craft Launcher 2/FormMain.xaml
  2. 22 4
      Plain Craft Launcher 2/FormMain.xaml.vb
  3. 71 56
      Plain Craft Launcher 2/Modules/Base/ModBase.vb
  4. 96 152
      Plain Craft Launcher 2/Modules/Base/ModNet.vb
  5. 89 53
      Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
  6. 3 3
      Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
  7. 1 0
      Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb
  8. 68 34
      Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
  9. 1 1
      Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
  10. 8 5
      Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb
  11. 3 5
      Plain Craft Launcher 2/Modules/ModMusic.vb
  12. 2 2
      Plain Craft Launcher 2/My Project/AssemblyInfo.vb
  13. 32 2
      Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadCompDetail.xaml.vb
  14. 2 2
      Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
  15. 1 1
      Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml
  16. 1 3
      Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.vb
  17. 10 10
      Plain Craft Launcher 2/Pages/PageInstance/PageInstanceMod.xaml.vb
  18. 19 5
      Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml
  19. 3 2
      Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml.vb
  20. 1 1
      Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
  21. 559 780
      Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml
  22. 5 5
      Plain Craft Launcher 2/Pages/PageOther/PageOtherHelp.xaml.vb
  23. 39 52
      Plain Craft Launcher 2/Pages/PageSetup/ModSetup.vb
  24. 16 3
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
  25. 3 1
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.vb
  26. 8 4
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml
  27. 122 122
      Plain Craft Launcher 2/Resources/ModData.txt

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

@@ -95,7 +95,8 @@
                     <RowDefinition Height="Auto" />
                     <RowDefinition Height="Auto" />
                     <RowDefinition />
                     <RowDefinition />
                 </Grid.RowDefinitions>
                 </Grid.RowDefinitions>
-                <Canvas x:Name="ImgBack" IsHitTestVisible="False" Grid.Row="1" RenderOptions.BitmapScalingMode="LowQuality" />
+                <Canvas x:Name="ImgBack" IsHitTestVisible="False" Grid.Row="1" RenderOptions.BitmapScalingMode="LowQuality"
+                        HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
                 <Grid x:Name="PanTitle" Height="48">
                 <Grid x:Name="PanTitle" Height="48">
                     <Grid.Background>
                     <Grid.Background>
                         <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">
                         <LinearGradientBrush EndPoint="1,0" StartPoint="0,0">

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

@@ -11,6 +11,11 @@ Public Class FormMain
         Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
         Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
         '统计更新日志条目
         '统计更新日志条目
 #If BETA Then
 #If BETA Then
+        If LastVersion < 381 Then 'Release 2.12.2
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法搜索 CurseForge 上的社区资源"))
+            FeatureCount += 3
+            BugCount += 13
+        End If
         If LastVersion < 379 Then 'Release 2.12.1
         If LastVersion < 379 Then 'Release 2.12.1
             If LastVersion >= 376 Then
             If LastVersion >= 376 Then
                 FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "删除:暂时隐藏联机入口……不过只是暂时关闭,它还会回来的!"))
                 FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "删除:暂时隐藏联机入口……不过只是暂时关闭,它还会回来的!"))
@@ -128,8 +133,15 @@ Public Class FormMain
         '3:BUG+ IMP* FEAT-
         '3:BUG+ IMP* FEAT-
         '2:BUG* IMP-
         '2:BUG* IMP-
         '1:BUG-
         '1:BUG-
+        If LastVersion < 382 Then 'Snapshot 2.12.3
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:部分关键词搜不到资源,特别是中文 Mod 搜索经常没有结果"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:下载可能完全卡住,或是下载进度反复回退"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "新增:内存管理设置,可以选择 G1GC、ZGC 或分代 ZGC"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "优化:来自 Modrinth 的文件下载速度"))
+            FeatureCount += 15
+            BugCount += 16
+        End If
         If LastVersion < 380 Then 'Snapshot 2.12.2
         If LastVersion < 380 Then 'Snapshot 2.12.2
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法搜索 CurseForge 上的社区资源"))
             FeatureCount += 3
             FeatureCount += 3
             BugCount += 13
             BugCount += 13
         End If
         End If
@@ -606,6 +618,12 @@ Public Class FormMain
             Setup.Set("ToolDownloadTranslateV2", Setup.Get("ToolDownloadTranslate") + 1)
             Setup.Set("ToolDownloadTranslateV2", Setup.Get("ToolDownloadTranslate") + 1)
             Log("[Start] 已从老版本迁移 Mod 命名设置")
             Log("[Start] 已从老版本迁移 Mod 命名设置")
         End If
         End If
+        '重置 JVM 参数设置
+        If LastVersionCode <= 381 AndAlso Not Setup.IsUnset("LaunchAdvanceJvm") AndAlso
+           Setup.Get("LaunchAdvanceJvm").ToString.Replace("-XX:+UseG1GC ", "").Replace("-XX:-UseAdaptiveSizePolicy ", "").Trim = Setup.GetDefault("LaunchAdvanceJvm") Then
+            Setup.Reset("LaunchAdvanceJvm")
+            Log("[Start] 已重置 JVM 参数设置")
+        End If
         '输出更新日志
         '输出更新日志
         If LastVersionCode <= 0 Then Return
         If LastVersionCode <= 0 Then Return
         If LowerVersionCode >= VersionCode Then Return
         If LowerVersionCode >= VersionCode Then Return
@@ -819,12 +837,12 @@ Public Class FormMain
             Log(ex, "切回窗口时出错", LogLevel.Feedback)
             Log(ex, "切回窗口时出错", LogLevel.Feedback)
         End Try
         End Try
         '读取剪贴板,自动加入联机房间
         '读取剪贴板,自动加入联机房间
+        Return 'UNDONE: 联机复活赛
         If PageLinkMain.LinkState <> PageLinkMain.LinkStates.Waiting Then Return '已启动联机
         If PageLinkMain.LinkState <> PageLinkMain.LinkStates.Waiting Then Return '已启动联机
         If PageCurrent = PageType.Link Then Return '已在联机界面
         If PageCurrent = PageType.Link Then Return '已在联机界面
         Dim Code = ClipboardGetText() : If Code Is Nothing Then Return '剪贴板无文本
         Dim Code = ClipboardGetText() : If Code Is Nothing Then Return '剪贴板无文本
-        If Setup.Get("LinkLastAutoJoinInviteCode") = Code Then Return                                                                                                                                                                                                                                                                                                                                                                                                                  
-        ' If PageLinkMain.ValidateCodeFormat(Code) IsNot Nothing Then Return '不是邀请码
-        Return     '联机关闭 直接return                                                                                                                                                                                                                                                                                                                                                                                                                        
+        If Setup.Get("LinkLastAutoJoinInviteCode") = Code Then Return
+        If PageLinkMain.ValidateCodeFormat(Code) IsNot Nothing Then Return '不是邀请码
         Setup.Set("LinkLastAutoJoinInviteCode", Code)
         Setup.Set("LinkLastAutoJoinInviteCode", Code)
         RunInThread(
         RunInThread(
         Sub()
         Sub()

+ 71 - 56
Plain Craft Launcher 2/Modules/Base/ModBase.vb

@@ -14,13 +14,13 @@ Public Module ModBase
 #Region "声明"
 #Region "声明"
 
 
     '下列版本信息由更新器自动修改
     '下列版本信息由更新器自动修改
-    Public Const VersionBaseName As String = "2.12.2" '不含分支前缀的显示用版本名
-    Public Const VersionStandardCode As String = "2.12.2." & VersionBranchCode '标准格式的四段式版本号
+    Public Const VersionBaseName As String = "2.12.3" '不含分支前缀的显示用版本名
+    Public Const VersionStandardCode As String = "2.12.3." & VersionBranchCode '标准格式的四段式版本号
     Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换
     Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换
 #If BETA Then
 #If BETA Then
-    Public Const VersionCode As Integer = 379 'Release
+    Public Const VersionCode As Integer = 381 'Release
 #Else
 #Else
-    Public Const VersionCode As Integer = 380 'Snapshot
+    Public Const VersionCode As Integer = 382 'Snapshot
 #End If
 #End If
     '自动生成的版本信息
     '自动生成的版本信息
     Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
     Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -1071,10 +1071,9 @@ Public Module ModBase
     ''' 获取文件 MD5,若失败则返回空字符串。
     ''' 获取文件 MD5,若失败则返回空字符串。
     ''' </summary>
     ''' </summary>
     Public Function GetFileMD5(FilePath As String) As String
     Public Function GetFileMD5(FilePath As String) As String
-        Dim Retry As Boolean = False
+        Dim Retried As Boolean = False
 Re:
 Re:
         Try
         Try
-            '获取 MD5
             Using File As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
             Using File As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
                 Using h = MD5Cng.Create()
                 Using h = MD5Cng.Create()
                     Dim Retval As Byte() = h.ComputeHash(File)
                     Dim Retval As Byte() = h.ComputeHash(File)
@@ -1082,16 +1081,15 @@ Re:
                     For i = 0 To Retval.Length - 1
                     For i = 0 To Retval.Length - 1
                         Result.Append(Retval(i).ToString("x2"))
                         Result.Append(Retval(i).ToString("x2"))
                     Next
                     Next
-
                     Return Result.ToString
                     Return Result.ToString
                 End Using
                 End Using
             End Using
             End Using
         Catch ex As Exception
         Catch ex As Exception
-            If Retry OrElse TypeOf ex Is FileNotFoundException Then
+            If Retried OrElse TypeOf ex Is FileNotFoundException Then
                 Log(ex, "获取文件 MD5 失败:" & FilePath)
                 Log(ex, "获取文件 MD5 失败:" & FilePath)
                 Return ""
                 Return ""
             Else
             Else
-                Retry = True
+                Retried = True
                 Log(ex, "获取文件 MD5 可重试失败:" & FilePath, LogLevel.Normal)
                 Log(ex, "获取文件 MD5 可重试失败:" & FilePath, LogLevel.Normal)
                 Thread.Sleep(RandomInteger(200, 500))
                 Thread.Sleep(RandomInteger(200, 500))
                 GoTo Re
                 GoTo Re
@@ -1102,29 +1100,25 @@ Re:
     ''' 获取文件 SHA512,若失败则返回空字符串。
     ''' 获取文件 SHA512,若失败则返回空字符串。
     ''' </summary>
     ''' </summary>
     Public Function GetFileSHA512(FilePath As String) As String
     Public Function GetFileSHA512(FilePath As String) As String
-        Dim Retry As Boolean = False
+        Dim Retried As Boolean = False
 Re:
 Re:
         Try
         Try
-            ''检测该文件是否在下载中,若在下载则放弃检测
-            'If IgnoreOnDownloading AndAlso NetManage.Files.ContainsKey(FilePath) AndAlso NetManage.Files(FilePath).State <= NetState.Merge Then Return ""
-            '获取 SHA512
-            Using file As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
+            Using File As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
                 Using h = SHA512Cng.Create()
                 Using h = SHA512Cng.Create()
-                    Dim retval As Byte() = h.ComputeHash(file)
+                    Dim retval As Byte() = h.ComputeHash(File)
                     Dim Result As New StringBuilder(retval.Length * 2)
                     Dim Result As New StringBuilder(retval.Length * 2)
                     For i As Integer = 0 To retval.Length - 1
                     For i As Integer = 0 To retval.Length - 1
                         Result.Append(retval(i).ToString("x2"))
                         Result.Append(retval(i).ToString("x2"))
                     Next
                     Next
-
                     Return Result.ToString
                     Return Result.ToString
                 End Using
                 End Using
             End Using
             End Using
         Catch ex As Exception
         Catch ex As Exception
-            If Retry OrElse TypeOf ex Is FileNotFoundException Then
+            If Retried OrElse TypeOf ex Is FileNotFoundException Then
                 Log(ex, "获取文件 SHA512 失败:" & FilePath)
                 Log(ex, "获取文件 SHA512 失败:" & FilePath)
                 Return ""
                 Return ""
             Else
             Else
-                Retry = True
+                Retried = True
                 Log(ex, "获取文件 SHA512 可重试失败:" & FilePath, LogLevel.Normal)
                 Log(ex, "获取文件 SHA512 可重试失败:" & FilePath, LogLevel.Normal)
                 Thread.Sleep(RandomInteger(200, 500))
                 Thread.Sleep(RandomInteger(200, 500))
                 GoTo Re
                 GoTo Re
@@ -1138,17 +1132,13 @@ Re:
         Dim Retry As Boolean = False
         Dim Retry As Boolean = False
 Re:
 Re:
         Try
         Try
-            ''检测该文件是否在下载中,若在下载则放弃检测
-            'If IgnoreOnDownloading AndAlso NetManage.Files.ContainsKey(FilePath) AndAlso NetManage.Files(FilePath).State <= NetState.Merge Then Return ""
-            '获取 SHA256
-            Using file As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
+            Using File As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
                 Using h = SHA256Cng.Create()
                 Using h = SHA256Cng.Create()
-                    Dim retval As Byte() = h.ComputeHash(file)
+                    Dim retval As Byte() = h.ComputeHash(File)
                     Dim Result As New StringBuilder(retval.Length * 2)
                     Dim Result As New StringBuilder(retval.Length * 2)
                     For i As Integer = 0 To retval.Length - 1
                     For i As Integer = 0 To retval.Length - 1
                         Result.Append(retval(i).ToString("x2"))
                         Result.Append(retval(i).ToString("x2"))
                     Next
                     Next
-
                     Return Result.ToString()
                     Return Result.ToString()
                 End Using
                 End Using
             End Using
             End Using
@@ -1171,15 +1161,13 @@ Re:
         Dim Retry As Boolean = False
         Dim Retry As Boolean = False
 Re:
 Re:
         Try
         Try
-            '获取 SHA1
-            Using file As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
+            Using File As New FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
                 Using h = SHA1Cng.Create()
                 Using h = SHA1Cng.Create()
-                    Dim retval As Byte() = h.ComputeHash(file)
+                    Dim retval As Byte() = h.ComputeHash(File)
                     Dim Result As New StringBuilder(retval.Length * 2)
                     Dim Result As New StringBuilder(retval.Length * 2)
                     For i As Integer = 0 To retval.Length - 1
                     For i As Integer = 0 To retval.Length - 1
                         Result.Append(retval(i).ToString("x2"))
                         Result.Append(retval(i).ToString("x2"))
                     Next
                     Next
-
                     Return Result.ToString
                     Return Result.ToString
                 End Using
                 End Using
             End Using
             End Using
@@ -1327,7 +1315,7 @@ Re:
             End Using
             End Using
         End Sub
         End Sub
         Try
         Try
-            TryExtractZip(Encoding.UTF8)
+            TryExtractZip(New UTF8Encoding(False, True))
         Catch ex As Exception
         Catch ex As Exception
             Log(ex, $"首次解压尝试失败,将更换编码并重试({CompressFilePath} → {DestDirectory})")
             Log(ex, $"首次解压尝试失败,将更换编码并重试({CompressFilePath} → {DestDirectory})")
             Try
             Try
@@ -1896,50 +1884,53 @@ RetryDir:
     ''' <param name="Source">被搜索的长内容。</param>
     ''' <param name="Source">被搜索的长内容。</param>
     ''' <param name="Query">用户输入的搜索文本。</param>
     ''' <param name="Query">用户输入的搜索文本。</param>
     Private Function SearchSimilarity(Source As String, Query As String) As Double
     Private Function SearchSimilarity(Source As String, Query As String) As Double
+        If String.IsNullOrEmpty(Source) OrElse String.IsNullOrEmpty(Query) Then Return 0
         Dim qp As Integer = 0, lenSum As Double = 0
         Dim qp As Integer = 0, lenSum As Double = 0
-        Source = Source.ToLower.Replace(" ", "")
-        Query = Query.ToLower.Replace(" ", "")
-        Dim sourceLength As Integer = Source.Length, queryLength As Integer = Query.Length '用于计算最后因数的长度缓存
+        Dim str As New StringBuilder(Source.Length)
+        str.Append(Source.ToLower().Replace(" ", ""))
+        Query = Query.ToLower().Replace(" ", "")
+        Dim sourceLength As Integer = str.Length, queryLength As Integer = Query.Length '用于计算最后因数的长度缓存
+        If queryLength = 0 Then Return 0
         Do While qp < queryLength
         Do While qp < queryLength
             '对 qp 作为开始位置计算
             '对 qp 作为开始位置计算
             Dim sp As Integer = 0, lenMax As Integer = 0, spMax As Integer = 0
             Dim sp As Integer = 0, lenMax As Integer = 0, spMax As Integer = 0
-            '查找以 qp 为头的最大子串
-            Do While sp < Source.Length
-                '对每个 sp 作为开始位置计算最大子串
+            Dim currentSourceLength As Integer = str.Length
+            Do While sp < currentSourceLength
                 Dim len As Integer = 0
                 Dim len As Integer = 0
-                Do While (qp + len) < queryLength AndAlso (sp + len) < Source.Length AndAlso Source(sp + len) = Query(qp + len)
+                While (qp + len) < queryLength AndAlso (sp + len) < currentSourceLength AndAlso str(sp + len) = Query(qp + len)
                     len += 1
                     len += 1
-                Loop
+                End While
                 '存储 len
                 '存储 len
                 If len > lenMax Then
                 If len > lenMax Then
                     lenMax = len
                     lenMax = len
                     spMax = sp
                     spMax = sp
                 End If
                 End If
                 '根据结果增加 sp
                 '根据结果增加 sp
-                sp += Math.Max(1, len)
+                sp += If(len > 0, len, 1)
             Loop
             Loop
             If lenMax > 0 Then
             If lenMax > 0 Then
-                Source = Source.Substring(0, spMax) & If(Source.Count > spMax + lenMax, Source.Substring(spMax + lenMax), String.Empty) '将源中的对应字段替换空
+                str.Remove(spMax, lenMax) '将源中的对应字段移除
                 '存储 lenSum
                 '存储 lenSum
                 Dim IncWeight = (Math.Pow(1.4, 3 + lenMax) - 3.6) '根据长度加成
                 Dim IncWeight = (Math.Pow(1.4, 3 + lenMax) - 3.6) '根据长度加成
                 IncWeight *= 1 + 0.3 * Math.Max(0, 3 - Math.Abs(qp - spMax)) '根据位置加成
                 IncWeight *= 1 + 0.3 * Math.Max(0, 3 - Math.Abs(qp - spMax)) '根据位置加成
                 lenSum += IncWeight
                 lenSum += IncWeight
             End If
             End If
-            '根据结果增加 qp
-            qp += Math.Max(1, lenMax)
+            qp += If(lenMax > 0, lenMax, 1)
         Loop
         Loop
         '计算结果:重复字段量 × 源长度影响比例
         '计算结果:重复字段量 × 源长度影响比例
-        Return (lenSum / queryLength) * (3 / Math.Pow(sourceLength + 15, 0.5)) * If(queryLength <= 2, 3 - queryLength, 1)
+        Return (lenSum / queryLength) * (3 / Math.Sqrt(sourceLength + 15)) * If(queryLength <= 2, 3 - queryLength, 1)
     End Function
     End Function
     ''' <summary>
     ''' <summary>
     ''' 获取多段文本加权后的相似度。
     ''' 获取多段文本加权后的相似度。
     ''' </summary>
     ''' </summary>
-    Private Function SearchSimilarityWeighted(Source As List(Of KeyValuePair(Of String, Double)), Query As String) As Double
+    Private Function SearchSimilarityWeighted(Source As List(Of SearchSource), Query As String) As Double
         Dim TotalWeight As Double = 0
         Dim TotalWeight As Double = 0
         Dim Sum As Double = 0
         Dim Sum As Double = 0
         For Each Pair In Source
         For Each Pair In Source
-            Sum += SearchSimilarity(Pair.Key, Query) * Pair.Value
-            TotalWeight += Pair.Value
+            If Pair.Aliases.Any Then
+                Sum += Pair.Aliases.Max(Function(a) SearchSimilarity(a, Query)) * Pair.Weight
+            End If
+            TotalWeight += Pair.Weight
         Next
         Next
         Return Sum / TotalWeight
         Return Sum / TotalWeight
     End Function
     End Function
@@ -1952,9 +1943,10 @@ RetryDir:
         ''' </summary>
         ''' </summary>
         Public Item As T
         Public Item As T
         ''' <summary>
         ''' <summary>
-        ''' 该项目用于搜索的源。
+        ''' 该项目用于搜索的文本源。
+        ''' 在搜索时,会对每个文本源单独加权,但单个文本源内的多个别名只取最高的一个的相似度。
         ''' </summary>
         ''' </summary>
-        Public SearchSource As List(Of KeyValuePair(Of String, Double))
+        Public SearchSource As List(Of SearchSource)
         ''' <summary>
         ''' <summary>
         ''' 相似度。
         ''' 相似度。
         ''' </summary>
         ''' </summary>
@@ -1963,9 +1955,28 @@ RetryDir:
         ''' 是否完全匹配。
         ''' 是否完全匹配。
         ''' </summary>
         ''' </summary>
         Public AbsoluteRight As Boolean
         Public AbsoluteRight As Boolean
+        Public Overrides Function ToString() As String
+            Return Math.Round(Similarity, 3) & " - " & Item.ToString()
+        End Function
+    End Class
+    ''' <summary>
+    ''' 单个用于搜索的文本源。
+    ''' </summary>
+    Public Class SearchSource
+        Public Aliases As String()
+        Public Weight As Double
+        Public Sub New(Aliases As String(), Optional Weight As Double = 1)
+            Me.Aliases = Aliases
+            Me.Weight = Weight
+        End Sub
+        Public Sub New(Text As String, Optional Weight As Double = 1)
+            Me.Aliases = {Text}
+            Me.Weight = Weight
+        End Sub
     End Class
     End Class
     ''' <summary>
     ''' <summary>
     ''' 进行多段文本加权搜索,获取相似度较高的数项结果。
     ''' 进行多段文本加权搜索,获取相似度较高的数项结果。
+    ''' 在搜索时,会对每个文本源单独加权,但单个文本源内的多个别名只取最高的一个的相似度。
     ''' </summary>
     ''' </summary>
     ''' <param name="MaxBlurCount">返回的最大模糊结果数。</param>
     ''' <param name="MaxBlurCount">返回的最大模糊结果数。</param>
     ''' <param name="MinBlurSimilarity">返回结果要求的最低相似度。</param>
     ''' <param name="MinBlurSimilarity">返回结果要求的最低相似度。</param>
@@ -1974,15 +1985,19 @@ RetryDir:
         Dim ResultList As New List(Of SearchEntry(Of T))
         Dim ResultList As New List(Of SearchEntry(Of T))
         If Not Entries.Any() Then Return ResultList
         If Not Entries.Any() Then Return ResultList
         '进行搜索,获取相似信息
         '进行搜索,获取相似信息
+        Dim QueryParts = Query.Split({" "c}, StringSplitOptions.RemoveEmptyEntries)
+        Dim Candidates As New List(Of SearchEntry(Of T))
         For Each Entry In Entries
         For Each Entry In Entries
             Entry.Similarity = SearchSimilarityWeighted(Entry.SearchSource, Query)
             Entry.Similarity = SearchSimilarityWeighted(Entry.SearchSource, Query)
             Entry.AbsoluteRight =
             Entry.AbsoluteRight =
-                Query.Split(" ").All( '对于按空格分割的每一段
+                QueryParts.All( '对于按空格分割的每一段
                 Function(QueryPart) Entry.SearchSource.Any( '若与任意一个搜索源完全匹配,则标记为完全匹配项
                 Function(QueryPart) Entry.SearchSource.Any( '若与任意一个搜索源完全匹配,则标记为完全匹配项
-                Function(Source) Source.Key.Replace(" ", "").ContainsF(QueryPart, True)))
+                Function(Source) Source.Aliases.Any(
+                Function([Alias]) [Alias].Replace(" ", "").ContainsF(QueryPart, True))))
+            If Entry.AbsoluteRight OrElse Entry.Similarity >= MinBlurSimilarity Then Candidates.Add(Entry)
         Next
         Next
         '按照相似度进行排序
         '按照相似度进行排序
-        Entries = Entries.SortByComparison(
+        Candidates = Candidates.SortByComparison(
         Function(Left, Right) As Boolean
         Function(Left, Right) As Boolean
             If Left.AbsoluteRight Xor Right.AbsoluteRight Then
             If Left.AbsoluteRight Xor Right.AbsoluteRight Then
                 Return Left.AbsoluteRight
                 Return Left.AbsoluteRight
@@ -1992,11 +2007,11 @@ RetryDir:
         End Function)
         End Function)
         '返回结果
         '返回结果
         Dim BlurCount As Integer = 0
         Dim BlurCount As Integer = 0
-        For Each Entry In Entries
+        For Each Entry In Candidates
             If Entry.AbsoluteRight Then
             If Entry.AbsoluteRight Then
                 ResultList.Add(Entry) '完全匹配,直接加入
                 ResultList.Add(Entry) '完全匹配,直接加入
             Else
             Else
-                If Entry.Similarity < MinBlurSimilarity OrElse BlurCount = MaxBlurCount Then Exit For '模糊结果边界条件
+                If BlurCount = MaxBlurCount Then Exit For
                 ResultList.Add(Entry)
                 ResultList.Add(Entry)
                 BlurCount += 1 '模糊结果计数
                 BlurCount += 1 '模糊结果计数
             End If
             End If
@@ -2175,7 +2190,7 @@ RetryDir:
     ''' </summary>
     ''' </summary>
     <Extension> Public Function GetResultWithTimeout(Of T)(TargetTask As Task(Of T), TokenSource As CancellationTokenSource, TimeoutMs As Integer) As T
     <Extension> Public Function GetResultWithTimeout(Of T)(TargetTask As Task(Of T), TokenSource As CancellationTokenSource, TimeoutMs As Integer) As T
         Dim DelayTask = Task.Delay(TimeoutMs)
         Dim DelayTask = Task.Delay(TimeoutMs)
-        If Task.WhenAny(TargetTask, DelayTask).GetAwaiter().GetResult() Is DelayTask Then
+        If Task.WhenAny(TargetTask, DelayTask).ConfigureAwait(False).GetAwaiter().GetResult() Is DelayTask Then
             TokenSource.Cancel()
             TokenSource.Cancel()
             Throw New TimeoutException($"任务超时({TimeoutMs} ms)")
             Throw New TimeoutException($"任务超时({TimeoutMs} ms)")
         End If
         End If
@@ -2186,7 +2201,7 @@ RetryDir:
     ''' </summary>
     ''' </summary>
     <Extension> Public Sub GetResultWithTimeout(TargetTask As Task, TokenSource As CancellationTokenSource, TimeoutMs As Integer)
     <Extension> Public Sub GetResultWithTimeout(TargetTask As Task, TokenSource As CancellationTokenSource, TimeoutMs As Integer)
         Dim DelayTask = Task.Delay(TimeoutMs)
         Dim DelayTask = Task.Delay(TimeoutMs)
-        If Task.WhenAny(TargetTask, DelayTask).GetAwaiter().GetResult() Is DelayTask Then
+        If Task.WhenAny(TargetTask, DelayTask).ConfigureAwait(False).GetAwaiter().GetResult() Is DelayTask Then
             TokenSource.Cancel()
             TokenSource.Cancel()
             Throw New TimeoutException($"任务超时({TimeoutMs} ms)")
             Throw New TimeoutException($"任务超时({TimeoutMs} ms)")
         End If
         End If
@@ -2537,7 +2552,7 @@ NextElement:
     ''' 选择最大值对应的对象。
     ''' 选择最大值对应的对象。
     ''' 若没有元素则返回 Nothing。
     ''' 若没有元素则返回 Nothing。
     ''' </summary>
     ''' </summary>
-    <Extension> Public Function MaxOf(Of T, C As IComparable(Of C))(Source As IEnumerable(Of T), Selector As Func(Of T, C)) As T
+    <Extension> Public Function MaxBy(Of T, C As IComparable(Of C))(Source As IEnumerable(Of T), Selector As Func(Of T, C)) As T
         Using Enumerator = Source.GetEnumerator()
         Using Enumerator = Source.GetEnumerator()
             If Not Enumerator.MoveNext() Then Return Nothing
             If Not Enumerator.MoveNext() Then Return Nothing
             Dim MaxItem As T = Enumerator.Current
             Dim MaxItem As T = Enumerator.Current
@@ -2555,7 +2570,7 @@ NextElement:
     ''' 选择最小值对应的对象。
     ''' 选择最小值对应的对象。
     ''' 若没有元素则返回 Nothing。
     ''' 若没有元素则返回 Nothing。
     ''' </summary>
     ''' </summary>
-    <Extension> Public Function MinOf(Of T, C As IComparable(Of C))(List As IEnumerable(Of T), Selector As Func(Of T, C)) As T
+    <Extension> Public Function MinBy(Of T, C As IComparable(Of C))(List As IEnumerable(Of T), Selector As Func(Of T, C)) As T
         Using Enumerator = List.GetEnumerator()
         Using Enumerator = List.GetEnumerator()
             If Not Enumerator.MoveNext() Then Return Nothing
             If Not Enumerator.MoveNext() Then Return Nothing
             Dim MinItem As T = Enumerator.Current
             Dim MinItem As T = Enumerator.Current

+ 96 - 152
Plain Craft Launcher 2/Modules/Base/ModNet.vb

@@ -1,5 +1,4 @@
-Imports System.Net.Http.Headers
-Imports System.Net.Sockets
+Imports System.Net.Sockets
 Imports System.Runtime.CompilerServices
 Imports System.Runtime.CompilerServices
 Imports System.Threading.Tasks
 Imports System.Threading.Tasks
 
 
@@ -248,7 +247,7 @@ RequestFinished:
             SecretHeadersSign(Url, Request, SimulateBrowserHeaders)
             SecretHeadersSign(Url, Request, SimulateBrowserHeaders)
             'DNS 解析
             'DNS 解析
             CancelToken = New CancellationTokenSource(Timeout)
             CancelToken = New CancellationTokenSource(Timeout)
-            HostIp = DNSLookup(Request, CancelToken)
+            HostIp = DNSLookup(Request, CancelToken.Token)
             If HostIp IsNot Nothing AndAlso Not IPReliability.ContainsKey(HostIp) Then
             If HostIp IsNot Nothing AndAlso Not IPReliability.ContainsKey(HostIp) Then
                 IPReliability(HostIp) = -0.01 '预先降低一点,这样快速的重复请求会使用不同的 IP 以提高成功率
                 IPReliability(HostIp) = -0.01 '预先降低一点,这样快速的重复请求会使用不同的 IP 以提高成功率
             End If
             End If
@@ -263,11 +262,12 @@ RequestFinished:
                 End If
                 End If
             End SyncLock
             End SyncLock
             Response = RequestClient.SendAsync(Request, HttpCompletionOption.ResponseHeadersRead, CancelToken.Token).GetResultWithTimeout(CancelToken, Timeout)
             Response = RequestClient.SendAsync(Request, HttpCompletionOption.ResponseHeadersRead, CancelToken.Token).GetResultWithTimeout(CancelToken, Timeout)
-            Dim ResponseStream = Response.Content.ReadAsStreamAsync().GetAwaiter().GetResult()
             Dim ResponseBytes As Byte()
             Dim ResponseBytes As Byte()
-            Using Stream As New MemoryStream
-                ResponseStream.CopyToAsync(Stream, 81920, CancelToken.Token).GetResultWithTimeout(CancelToken, Timeout)
-                ResponseBytes = Stream.ToArray()
+            Using ResponseStream = Response.Content.ReadAsStreamAsync().GetResultWithTimeout(CancelToken, Timeout)
+                Using Stream As New MemoryStream
+                    ResponseStream.CopyToAsync(Stream, 81920, CancelToken.Token).GetResultWithTimeout(CancelToken, Timeout)
+                    ResponseBytes = Stream.ToArray()
+                End Using
             End Using
             End Using
             '输出
             '输出
             If Response.IsSuccessStatusCode Then
             If Response.IsSuccessStatusCode Then
@@ -304,10 +304,9 @@ RequestFinished:
 
 
     ''' <summary>
     ''' <summary>
     ''' 进行 DNS 解析。它仅在选择的 IP 与系统默认的不一致时才对 URL 中的 Host 进行替换。
     ''' 进行 DNS 解析。它仅在选择的 IP 与系统默认的不一致时才对 URL 中的 Host 进行替换。
-    ''' 返回请求时应使用的 IP;若为 IPv6,则加上了方括号。
-    ''' 若解析失败,则返回 Nothing。
+    ''' 返回请求时应使用的 IP。若解析失败,则返回 Nothing。
     ''' </summary>
     ''' </summary>
-    Private Function DNSLookup(Request As HttpRequestMessage, CancelToken As CancellationTokenSource) As String
+    Private Function DNSLookup(Request As HttpRequestMessage, CancelToken As CancellationToken) As String
         '若一分钟内已失败过,则不再重复尝试解析,以减少断网时的 Exception 数量
         '若一分钟内已失败过,则不再重复尝试解析,以减少断网时的 Exception 数量
         Dim Host = Request.RequestUri.Host
         Dim Host = Request.RequestUri.Host
         SyncLock DNSFailureRecord.SyncRoot
         SyncLock DNSFailureRecord.SyncRoot
@@ -320,43 +319,36 @@ RequestFinished:
             End If
             End If
         End SyncLock
         End SyncLock
         '初步 DNS 解析
         '初步 DNS 解析
-        Dim DnsTask As Task(Of IPAddress()) = Nothing
+        Dim Candidates As IPAddress()
         Try
         Try
-            DnsTask = Dns.GetHostAddressesAsync(Host)
-            DnsTask.Wait(CancelToken.Token)
+            Dim AsyncResult = Dns.BeginGetHostAddresses(Host, Nothing, Nothing)
+            If WaitHandle.WaitAny(New WaitHandle() {AsyncResult.AsyncWaitHandle, CancelToken.WaitHandle}) Then Throw New TimeoutException("DNS 解析超时")
+            Candidates = Dns.EndGetHostAddresses(AsyncResult).Distinct.ToArray
         Catch ex As Exception
         Catch ex As Exception
             Log(ex, $"DNS 解析失败({Host})")
             Log(ex, $"DNS 解析失败({Host})")
             DNSFailureRecord(Host) = Date.Now
             DNSFailureRecord(Host) = Date.Now
             Return Nothing
             Return Nothing
         End Try
         End Try
-        Dim Candidates As IPAddress() = DnsTask.Result.ToArray
         If Not Candidates.Any Then
         If Not Candidates.Any Then
             Log($"[Net] DNS 解析无结果({Host})")
             Log($"[Net] DNS 解析无结果({Host})")
             Return Nothing
             Return Nothing
         End If
         End If
         '若同时存在 IPv4 和 IPv6 地址,仅选择其中一类(因为 GFW 可能只屏蔽了 IPv4 或 IPv6)
         '若同时存在 IPv4 和 IPv6 地址,仅选择其中一类(因为 GFW 可能只屏蔽了 IPv4 或 IPv6)
-        Dim GetIPReliability = Function(Key) IPReliability.GetOrDefault(Key.ToString, 0)
+        Dim Reliabilities = Candidates.ToDictionary(Function(i) i, Function(i) IPReliability.GetOrDefault(i.ToString, 0))
         Dim IPv4Targets = Candidates.Where(Function(i) i.AddressFamily = AddressFamily.InterNetwork).ToArray
         Dim IPv4Targets = Candidates.Where(Function(i) i.AddressFamily = AddressFamily.InterNetwork).ToArray
         Dim IPv6Targets = Candidates.Where(Function(i) i.AddressFamily = AddressFamily.InterNetworkV6).ToArray
         Dim IPv6Targets = Candidates.Where(Function(i) i.AddressFamily = AddressFamily.InterNetworkV6).ToArray
         If IPv4Targets.Any AndAlso IPv6Targets.Any Then
         If IPv4Targets.Any AndAlso IPv6Targets.Any Then
-            Dim IPv4Reliability = IPv4Targets.Average(Function(i) GetIPReliability(i))
-            Dim IPv6Reliability = IPv6Targets.Average(Function(i) GetIPReliability(i))
+            Dim IPv4Reliability = IPv4Targets.Max(Function(i) Reliabilities(i))
+            Dim IPv6Reliability = IPv6Targets.Max(Function(i) Reliabilities(i))
             If Host = "api.modrinth.com" Then IPv6Reliability -= 0.1 '让 Modrinth 优先使用 IPv4 地址(#6887)
             If Host = "api.modrinth.com" Then IPv6Reliability -= 0.1 '让 Modrinth 优先使用 IPv4 地址(#6887)
+            If ModeDebug Then Log($"[Net] DNS IPv4/IPv6 选择({Host}),IPv4 {IPv4Reliability:0.000},IPv6 {IPv6Reliability:0.000}")
             Candidates = If(IPv4Reliability >= IPv6Reliability, IPv4Targets, IPv6Targets)
             Candidates = If(IPv4Reliability >= IPv6Reliability, IPv4Targets, IPv6Targets)
         End If
         End If
         '选择可靠度最高的 IP
         '选择可靠度最高的 IP
-        Dim MaxReliability As Double = Candidates.Max(Function(i) GetIPReliability(i))
-        Dim Target As IPAddress = Candidates.First(Function(i) GetIPReliability(i) = MaxReliability)
-        Dim TargetIp As String = If(Target.AddressFamily = AddressFamily.InterNetworkV6, $"[{Target}]", Target.ToString)
-        If Target IsNot Candidates.First Then
-            '优选结果与系统默认 IP 不一致,替换域名并设置 Host 头
-            If ModeDebug Then Log($"[Net] DNS 解析结果:{Host} → {Target},所有可能的 IP 与可靠度:{DnsTask.Result.Select(Function(i) $"{i} → {GetIPReliability(i):0.000}").Join(";")}")
-            Request.Headers.Host = Host
-            Dim Builder As New UriBuilder(Request.RequestUri)
-            Builder.Host = TargetIp
-            Request.RequestUri = Builder.Uri
-        End If
-        Return TargetIp
+        Dim Target As IPAddress = Candidates.MaxBy(Function(i) Reliabilities(i))
+        Request.Headers.Host = Request.RequestUri.Authority
+        Request.RequestUri = (New UriBuilder(Request.RequestUri) With {.Host = If(Target.AddressFamily = AddressFamily.InterNetworkV6, $"[{Target}]", Target.ToString)}).Uri
+        Return Target.ToString
     End Function
     End Function
     Private DNSFailureRecord As New SafeDictionary(Of String, Date)
     Private DNSFailureRecord As New SafeDictionary(Of String, Date)
     ''' <summary>
     ''' <summary>
@@ -369,8 +361,10 @@ RequestFinished:
     ''' </summary>
     ''' </summary>
     Private Sub RecordIPReliability(IP As String, Result As Double)
     Private Sub RecordIPReliability(IP As String, Result As Double)
         If IP Is Nothing Then Return
         If IP Is Nothing Then Return
-        If Not IPReliability.ContainsKey(IP) Then IPReliability(IP) = 0
-        IPReliability(IP) = (IPReliability(IP) + Result) / 2
+        SyncLock IPReliability.SyncRoot
+            If Not IPReliability.ContainsKey(IP) Then IPReliability(IP) = 0
+            IPReliability(IP) = (IPReliability(IP) + Result) / 2
+        End SyncLock
     End Sub
     End Sub
 
 
     ''' <summary>
     ''' <summary>
@@ -418,12 +412,10 @@ RequestFinished:
     ''' 基于限速,当前可以下载的剩余量。
     ''' 基于限速,当前可以下载的剩余量。
     ''' </summary>
     ''' </summary>
     Public NetTaskSpeedLimitLeft As Long = -1
     Public NetTaskSpeedLimitLeft As Long = -1
-    Private ReadOnly NetTaskSpeedLimitLeftLock As New Object
     ''' <summary>
     ''' <summary>
     ''' 正在运行中的线程数。
     ''' 正在运行中的线程数。
     ''' </summary>
     ''' </summary>
     Public NetTaskThreadCount As Integer = 0
     Public NetTaskThreadCount As Integer = 0
-    Private ReadOnly NetTaskThreadCountLock As New Object
 
 
     ''' <summary>
     ''' <summary>
     ''' 下载源。
     ''' 下载源。
@@ -760,7 +752,6 @@ RequestFinished:
         ''' 文件的已下载大小。
         ''' 文件的已下载大小。
         ''' </summary>
         ''' </summary>
         Public DownloadDone As Long = 0
         Public DownloadDone As Long = 0
-        Private ReadOnly LockDone As New Object
         ''' <summary>
         ''' <summary>
         ''' 文件的校验规则。
         ''' 文件的校验规则。
         ''' </summary>
         ''' </summary>
@@ -840,14 +831,12 @@ RequestFinished:
         ''' </summary>
         ''' </summary>
         Private ReadOnly Property ConnectAverage As Integer
         Private ReadOnly Property ConnectAverage As Integer
             Get
             Get
-                SyncLock LockCount
-                    Return If(ConnectCount = 0, -1, ConnectTime / ConnectCount)
-                End SyncLock
+                Dim CurrentConnectCount As Integer = ConnectCount '防止竞态条件
+                Return If(CurrentConnectCount = 0, -1, ConnectTime / CurrentConnectCount)
             End Get
             End Get
         End Property
         End Property
 
 
         Private Const FilePieceLimit As Long = 256 * 1024
         Private Const FilePieceLimit As Long = 256 * 1024
-        Public ReadOnly LockCount As New Object
         Public ReadOnly LockState As New Object
         Public ReadOnly LockState As New Object
         Public ReadOnly LockChain As New Object
         Public ReadOnly LockChain As New Object
         Public ReadOnly LockSource As New Object
         Public ReadOnly LockSource As New Object
@@ -929,7 +918,7 @@ StartSingleThreadDownload:
                     If Source Is Nothing Then Return Nothing
                     If Source Is Nothing Then Return Nothing
                     Dim TargetUrl As String = Source.Url
                     Dim TargetUrl As String = Source.Url
                     If TargetUrl.Contains("pcl2-server") OrElse TargetUrl.Contains("bmclapi") OrElse TargetUrl.Contains("github.com") OrElse
                     If TargetUrl.Contains("pcl2-server") OrElse TargetUrl.Contains("bmclapi") OrElse TargetUrl.Contains("github.com") OrElse
-                       TargetUrl.Contains("optifine.net") OrElse TargetUrl.Contains("modrinth") OrElse TargetUrl.Contains("momot.rs") Then Return Nothing
+                       TargetUrl.Contains("optifine.net") OrElse TargetUrl.Contains("momot.rs") Then Return Nothing
                     '寻找最大碎片
                     '寻找最大碎片
                     'FUTURE: 下载引擎重做,计算下载源平均链接时间和线程下载速度,按最高时间节省来开启多线程
                     'FUTURE: 下载引擎重做,计算下载源平均链接时间和线程下载速度,按最高时间节省来开启多线程
                     Dim FilePieceMax As NetThread = Threads
                     Dim FilePieceMax As NetThread = Threads
@@ -962,9 +951,7 @@ StartThread:
 
 
                 End SyncLock
                 End SyncLock
                 '开始线程
                 '开始线程
-                SyncLock NetTaskThreadCountLock
-                    NetTaskThreadCount += 1
-                End SyncLock
+                Interlocked.Increment(NetTaskThreadCount)
                 SyncLock LockSource
                 SyncLock LockSource
                     If Not HasAvailableSource(False) Then SourcesOnce.First.SingleThread = ThreadInfo
                     If Not HasAvailableSource(False) Then SourcesOnce.First.SingleThread = ThreadInfo
                 End SyncLock
                 End SyncLock
@@ -986,7 +973,7 @@ StartThread:
                 CancelToken As CancellationTokenSource = Nothing, HostIp As String = Nothing
                 CancelToken As CancellationTokenSource = Nothing, HostIp As String = Nothing
             '部分下载源真的特别慢,并且只需要一个请求,例如 Ping 为 20s,如果增长太慢,就会造成类似 2.5s 5s 7.5s 10s 12.5s... 的极大延迟
             '部分下载源真的特别慢,并且只需要一个请求,例如 Ping 为 20s,如果增长太慢,就会造成类似 2.5s 5s 7.5s 10s 12.5s... 的极大延迟
             '延迟过长会导致某些特别慢的链接迟迟不被掐死
             '延迟过长会导致某些特别慢的链接迟迟不被掐死
-            Dim Timeout As Integer = Math.Min(Math.Max(ConnectAverage, 10000) * (1 + Th.Source.FailCount), 30000)
+            Dim Timeout As Integer = Math.Min(Math.Max(ConnectAverage, 15000) * (1 + Th.Source.FailCount), 30000)
             Th.State = NetState.Connecting
             Th.State = NetState.Connecting
             Try
             Try
                 Dim HttpDataCount As Integer = 0
                 Dim HttpDataCount As Integer = 0
@@ -994,8 +981,8 @@ StartThread:
                 HttpRequest = New HttpRequestMessage(HttpMethod.Get, Th.Source.Url)
                 HttpRequest = New HttpRequestMessage(HttpMethod.Get, Th.Source.Url)
                 SecretHeadersSign(Th.Source.Url, HttpRequest, SimulateBrowserHeaders)
                 SecretHeadersSign(Th.Source.Url, HttpRequest, SimulateBrowserHeaders)
                 CancelToken = New CancellationTokenSource(Timeout)
                 CancelToken = New CancellationTokenSource(Timeout)
-                HostIp = DNSLookup(HttpRequest, CancelToken) 'DNS 预解析
-                If Not Th.IsFirstThread Then HttpRequest.Headers.Range = New RangeHeaderValue(Th.DownloadStart, Nothing)
+                HostIp = DNSLookup(HttpRequest, CancelToken.Token) 'DNS 预解析
+                If Not Th.IsFirstThread Then HttpRequest.Headers.Range = New Headers.RangeHeaderValue(Th.DownloadStart, Nothing)
                 Dim ContentLength As Long = 0
                 Dim ContentLength As Long = 0
                 Response = ThreadClient.SendAsync(HttpRequest, HttpCompletionOption.ResponseHeadersRead, CancelToken.Token).GetResultWithTimeout(CancelToken, Timeout)
                 Response = ThreadClient.SendAsync(HttpRequest, HttpCompletionOption.ResponseHeadersRead, CancelToken.Token).GetResultWithTimeout(CancelToken, Timeout)
                 If Not Response.IsSuccessStatusCode Then Throw New Exception($"错误码 {Response.StatusCode} ({CInt(Response.StatusCode)}),{Th.Source.Url}") '状态码检查
                 If Not Response.IsSuccessStatusCode Then Throw New Exception($"错误码 {Response.StatusCode} ({CInt(Response.StatusCode)}),{Th.Source.Url}") '状态码检查
@@ -1032,7 +1019,7 @@ StartThread:
                             Dim DriveName As String = Drive.Name.First.ToString
                             Dim DriveName As String = Drive.Name.First.ToString
                             Dim RequiredSpace = If(PathTemp.StartsWithF(DriveName), ContentLength * 1.1, 0) +
                             Dim RequiredSpace = If(PathTemp.StartsWithF(DriveName), ContentLength * 1.1, 0) +
                                                 If(LocalPath.StartsWithF(DriveName), ContentLength + 5 * 1024 * 1024, 0)
                                                 If(LocalPath.StartsWithF(DriveName), ContentLength + 5 * 1024 * 1024, 0)
-                            If Drive.TotalFreeSpace < RequiredSpace Then
+                            If RequiredSpace > 0 AndAlso Drive.TotalFreeSpace < RequiredSpace Then
                                 Throw New Exception(DriveName & " 盘空间不足,无法进行下载。" & vbCrLf & "需要至少 " & GetString(RequiredSpace) & " 空间,但当前仅剩余 " & GetString(Drive.TotalFreeSpace) & "。" &
                                 Throw New Exception(DriveName & " 盘空间不足,无法进行下载。" & vbCrLf & "需要至少 " & GetString(RequiredSpace) & " 空间,但当前仅剩余 " & GetString(Drive.TotalFreeSpace) & "。" &
                                                     If(PathTemp.StartsWithF(DriveName), vbCrLf & vbCrLf & "下载时需要与文件同等大小的空间存放缓存,你可以在设置中调整缓存文件夹的位置。", ""))
                                                     If(PathTemp.StartsWithF(DriveName), vbCrLf & vbCrLf & "下载时需要与文件同等大小的空间存放缓存,你可以在设置中调整缓存文件夹的位置。", ""))
                             End If
                             End If
@@ -1040,7 +1027,7 @@ StartThread:
                     End If
                     End If
                 ElseIf FileSize < 0 Then
                 ElseIf FileSize < 0 Then
                     Throw New Exception("非首线程运行时,尚未获取文件大小")
                     Throw New Exception("非首线程运行时,尚未获取文件大小")
-                ElseIf Th.DownloadStart > 0 AndAlso ContentLength = FileSize Then
+                ElseIf Th.DownloadStart > 0 AndAlso ContentLength >= FileSize Then
 NotSupportRange:
 NotSupportRange:
                     SyncLock LockSource
                     SyncLock LockSource
                         If SourcesOnce.Contains(Th.Source) Then GoTo SourceBreak
                         If SourcesOnce.Contains(Th.Source) Then GoTo SourceBreak
@@ -1076,11 +1063,9 @@ NotSupportRange:
                         Threading.Thread.Sleep(16)
                         Threading.Thread.Sleep(16)
                     End While
                     End While
                     Dim RealDataCount As Integer = If(IsUnknownSize, HttpDataCount, Math.Min(HttpDataCount, Th.DownloadUndone))
                     Dim RealDataCount As Integer = If(IsUnknownSize, HttpDataCount, Math.Min(HttpDataCount, Th.DownloadUndone))
-                    SyncLock NetTaskSpeedLimitLeftLock
-                        If NetTaskSpeedLimitHigh > 0 Then NetTaskSpeedLimitLeft -= RealDataCount
-                    End SyncLock
+                    If NetTaskSpeedLimitHigh > 0 Then Interlocked.Add(NetTaskSpeedLimitLeft, -RealDataCount)
                     Dim DeltaTime = GetTimeMs() - Th.LastReceiveTime
                     Dim DeltaTime = GetTimeMs() - Th.LastReceiveTime
-                    If DeltaTime > 1000000 Then DeltaTime = 1 '避免时间刻反转导致出现极大值
+                    If DeltaTime > 100000000 Then DeltaTime = 1 '避免时间刻反转导致出现极大值
                     If RealDataCount > 0 Then
                     If RealDataCount > 0 Then
                         '有数据
                         '有数据
                         If Th.DownloadDone = 0 Then
                         If Th.DownloadDone = 0 Then
@@ -1089,27 +1074,21 @@ NotSupportRange:
                             SyncLock LockState
                             SyncLock LockState
                                 If State < NetState.Downloading Then State = NetState.Downloading
                                 If State < NetState.Downloading Then State = NetState.Downloading
                             End SyncLock
                             End SyncLock
-                            SyncLock LockCount
-                                ConnectCount += 1
-                                ConnectTime += GetTimeMs() - Th.InitTime
-                            End SyncLock
+                            Interlocked.Increment(ConnectCount)
+                            Interlocked.Add(ConnectTime, GetTimeMs() - Th.InitTime)
                         End If
                         End If
-                        SyncLock LockCount
-                            Th.Source.FailCount = 0
-                            For Each Task In Tasks
-                                Task.FailCount = 0
-                            Next
-                        End SyncLock
-                        NetManager.DownloadDone += RealDataCount
-                        SyncLock LockDone
-                            DownloadDone += RealDataCount
-                        End SyncLock
+                        Th.Source.FailCount = 0
+                        For Each Task In Tasks
+                            Task.FailCount = 0
+                        Next
+                        Interlocked.Add(NetManager.DownloadDone, RealDataCount)
+                        Interlocked.Add(DownloadDone, RealDataCount)
                         Th.DownloadDone += RealDataCount
                         Th.DownloadDone += RealDataCount
                         ResultStream.Write(ResponseBytes, 0, RealDataCount)
                         ResultStream.Write(ResponseBytes, 0, RealDataCount)
                         '已完成
                         '已完成
                         If Th.DownloadUndone = 0 AndAlso Not IsUnknownSize Then Exit While
                         If Th.DownloadUndone = 0 AndAlso Not IsUnknownSize Then Exit While
                         '检查速度是否过慢
                         '检查速度是否过慢
-                        If DeltaTime > 5000 AndAlso DeltaTime > RealDataCount AndAlso '数据包间隔大于 5s,且速度小于 1K/s
+                        If Th.LastReceiveTime > 0 AndAlso DeltaTime > 5000 AndAlso DeltaTime > RealDataCount AndAlso '数据包间隔大于 5s,且速度小于 1K/s
                                     Th.Source.SingleThread Is Nothing Then '且并非单线程下载
                                     Th.Source.SingleThread Is Nothing Then '且并非单线程下载
                             Throw New TimeoutException("由于速度过慢断开链接,下载 " & RealDataCount & " B,消耗 " & DeltaTime & " ms。")
                             Throw New TimeoutException("由于速度过慢断开链接,下载 " & RealDataCount & " B,消耗 " & DeltaTime & " ms。")
                         End If
                         End If
@@ -1147,9 +1126,7 @@ SourceBreak:
                 CancelToken?.Dispose()
                 CancelToken?.Dispose()
                 If Not IsNoSplit Then ResultStream?.Dispose()
                 If Not IsNoSplit Then ResultStream?.Dispose()
                 '改变计数
                 '改变计数
-                SyncLock NetTaskThreadCountLock
-                    NetTaskThreadCount -= 1
-                End SyncLock
+                Interlocked.Decrement(NetTaskThreadCount)
                 '合并
                 '合并
                 If ((FileSize >= 0 AndAlso DownloadDone >= FileSize) OrElse (FileSize = -1 AndAlso DownloadDone > 0)) AndAlso
                 If ((FileSize >= 0 AndAlso DownloadDone >= FileSize) OrElse (FileSize = -1 AndAlso DownloadDone > 0)) AndAlso
                     State < NetState.Merging AndAlso Th.State <> NetState.Interrupted Then Merge(Th)
                     State < NetState.Merging AndAlso Th.State <> NetState.Interrupted Then Merge(Th)
@@ -1157,12 +1134,10 @@ SourceBreak:
         End Sub
         End Sub
         Private Sub SourceFail(Th As NetThread, ex As Exception, IsMergeFailure As Boolean)
         Private Sub SourceFail(Th As NetThread, ex As Exception, IsMergeFailure As Boolean)
             '状态变更
             '状态变更
-            SyncLock LockCount
-                Th.Source.FailCount += 1
-                For Each Task In Tasks
-                    Task.FailCount += 1
-                Next
-            End SyncLock
+            Interlocked.Increment(Th.Source.FailCount)
+            For Each Task In Tasks
+                Interlocked.Increment(Task.FailCount)
+            Next
             Th.State = NetState.Interrupted
             Th.State = NetState.Interrupted
             Th.Source.Ex = ex
             Th.Source.Ex = ex
             '根据情况判断,是否在多线程下禁用下载源(连续错误过多,或不支持断点续传)
             '根据情况判断,是否在多线程下禁用下载源(连续错误过多,或不支持断点续传)
@@ -1241,10 +1216,8 @@ SourceBreak:
             SyncLock LockChain
             SyncLock LockChain
                 Threads = Nothing
                 Threads = Nothing
             End SyncLock
             End SyncLock
-            NetManager.DownloadDone -= DownloadDone
-            SyncLock LockDone
-                DownloadDone = 0
-            End SyncLock
+            Interlocked.Add(NetManager.DownloadDone, -DownloadDone)
+            DownloadDone = 0
             SpeedLastDone = 0
             SpeedLastDone = 0
         End Sub
         End Sub
 
 
@@ -1271,7 +1244,7 @@ Retry:
                 SyncLock LockChain
                 SyncLock LockChain
                     '合并文件
                     '合并文件
                     If IsNoSplit Then
                     If IsNoSplit Then
-                        '仅有一个线程,从缓存中输出
+                        '仅有一个线程,从内存中输出
                         If ModeDebug Then Log($"[Download] {LocalName}:下载结束,从内存输出文件")
                         If ModeDebug Then Log($"[Download] {LocalName}:下载结束,从内存输出文件")
                         Cache.Position = 0
                         Cache.Position = 0
                         WriteFile(LocalPath, Cache)
                         WriteFile(LocalPath, Cache)
@@ -1321,6 +1294,7 @@ Retry:
                 End SyncLock
                 End SyncLock
             Catch ex As Exception
             Catch ex As Exception
                 RetryCount += 1
                 RetryCount += 1
+                If State > NetState.Merging Then Return '通常是因为在合并时被中断了
                 Log(ex, $"合并文件出错,第 {RetryCount} 次尝试({LocalName})")
                 Log(ex, $"合并文件出错,第 {RetryCount} 次尝试({LocalName})")
                 '重新尝试合并
                 '重新尝试合并
                 If RetryCount < 3 Then
                 If RetryCount < 3 Then
@@ -1372,9 +1346,7 @@ Retry:
         Private Sub AbortInternal()
         Private Sub AbortInternal()
             On Error Resume Next
             On Error Resume Next
             Reset()
             Reset()
-            SyncLock NetManager.LockRemain
-                NetManager.FileRemain -= 1
-            End SyncLock
+            Interlocked.Decrement(NetManager.FileRemain)
         End Sub
         End Sub
 
 
         '状态改变接口
         '状态改变接口
@@ -1386,9 +1358,7 @@ Retry:
                 If State >= NetState.Finished Then Return
                 If State >= NetState.Finished Then Return
                 State = NetState.Finished
                 State = NetState.Finished
             End SyncLock
             End SyncLock
-            SyncLock NetManager.LockRemain
-                NetManager.FileRemain -= 1
-            End SyncLock
+            Interlocked.Decrement(NetManager.FileRemain)
             If PrintLog Then Log($"[Download] {LocalName}:已完成")
             If PrintLog Then Log($"[Download] {LocalName}:已完成")
             For Each Task In Tasks
             For Each Task In Tasks
                 Task.OnFileFinish(Me)
                 Task.OnFileFinish(Me)
@@ -1522,8 +1492,8 @@ FinishExCatch:
                         If File.LocalPath.EndsWithF("\") Then Throw New ArgumentException("请输入含文件名的完整文件路径:" & File.LocalPath)
                         If File.LocalPath.EndsWithF("\") Then Throw New ArgumentException("请输入含文件名的完整文件路径:" & File.LocalPath)
                         Directory.CreateDirectory(GetPathFromFullPath(File.LocalPath)) '创建目标文件夹
                         Directory.CreateDirectory(GetPathFromFullPath(File.LocalPath)) '创建目标文件夹
                     Next
                     Next
-                    '接入下载管理器
-                    NetManager.Start(Me)
+                    '接入下载管理器,获取新开始下载的文件列表
+                    Dim NewFiles = NetManager.Start(Me)
 
 
                     '====================================
                     '====================================
                     ' 已存在文件查找
                     ' 已存在文件查找
@@ -1531,9 +1501,8 @@ FinishExCatch:
 
 
                     '整理允许进行查找的文件
                     '整理允许进行查找的文件
                     Dim FilesToCheck As New List(Of NetFile)
                     Dim FilesToCheck As New List(Of NetFile)
-                    Dim DisabledCopy As Boolean = Setup.Get("SystemDebugSkipCopy") '在设置中禁用了复制
-                    For Each File In Files
-                        If Not DisabledCopy AndAlso File.Check?.CanUseExistsFile Then
+                    For Each File In NewFiles
+                        If File.Check?.CanUseExistsFile Then
                             FilesToCheck.Add(File)
                             FilesToCheck.Add(File)
                         Else '不允许,直接开始下载
                         Else '不允许,直接开始下载
                             SyncLock LockState
                             SyncLock LockState
@@ -1570,7 +1539,7 @@ FinishExCatch:
         End Sub
         End Sub
         Private Sub CheckExistingFiles(Files As List(Of NetFile), FolderList As List(Of String))
         Private Sub CheckExistingFiles(Files As List(Of NetFile), FolderList As List(Of String))
             Try
             Try
-                If ModeDebug Then Log($"[Download] 文件检查线程已启动,分配的文件数:{Files.Count}")
+                If ModeDebug Then Log($"[Download] 文件检查开始,本线程负责的文件数:{Files.Count}")
                 '列出 MC 文件夹中的各个版本文件夹
                 '列出 MC 文件夹中的各个版本文件夹
                 Dim VersionFolders As New List(Of String)
                 Dim VersionFolders As New List(Of String)
                 For Each McFolder In FolderList
                 For Each McFolder In FolderList
@@ -1584,7 +1553,7 @@ FinishExCatch:
                 '处理每个文件
                 '处理每个文件
                 For Each File As NetFile In Files
                 For Each File As NetFile In Files
                     Dim Target As String = CheckExistingFile(FolderList, VersionFolders, File)
                     Dim Target As String = CheckExistingFile(FolderList, VersionFolders, File)
-                    If File.State >= NetState.WaitingToDownload Then Return '中断
+                    If File.State >= NetState.WaitingToDownload Then Continue For '中断
                     '已找到相同文件
                     '已找到相同文件
                     If Target IsNot Nothing Then
                     If Target IsNot Nothing Then
                         File.IsCopy = True
                         File.IsCopy = True
@@ -1594,6 +1563,8 @@ Retry:
                             If Target <> File.LocalPath Then
                             If Target <> File.LocalPath Then
                                 Log($"[Download] 复制已存在的文件:{Target} → {File.LocalPath}")
                                 Log($"[Download] 复制已存在的文件:{Target} → {File.LocalPath}")
                                 CopyFile(Target, File.LocalPath)
                                 CopyFile(Target, File.LocalPath)
+                            Else
+                                If ModeDebug Then Log($"[Download] 需要下载的文件已存在,并通过校验:{Target}")
                             End If
                             End If
                             File.Finish(False)
                             File.Finish(False)
                             Continue For
                             Continue For
@@ -1619,6 +1590,8 @@ Retry:
         Private Function CheckExistingFile(FolderList As List(Of String), VersionFolders As List(Of String), File As NetFile) As String
         Private Function CheckExistingFile(FolderList As List(Of String), VersionFolders As List(Of String), File As NetFile) As String
             '目标文件已存在
             '目标文件已存在
             If File.Check.Check(File.LocalPath) Is Nothing Then Return File.LocalPath
             If File.Check.Check(File.LocalPath) Is Nothing Then Return File.LocalPath
+            '在设置中禁用了复制
+            If Setup.Get("SystemDebugSkipCopy") Then Return Nothing
             '没有可用的检查规则,只能开始下载
             '没有可用的检查规则,只能开始下载
             If File.Check.Hash Is Nothing AndAlso File.Check.ActualSize < 0 Then Return Nothing
             If File.Check.Hash Is Nothing AndAlso File.Check.ActualSize < 0 Then Return Nothing
             '大致判断文件类别
             '大致判断文件类别
@@ -1633,7 +1606,7 @@ Retry:
                     Return Nothing
                     Return Nothing
                 End If
                 End If
             End If
             End If
-            Dim Type = TypeIndexes.MaxOf(Function(kv) kv.Item2).FolderName.TrimStart("\"c)
+            Dim Type = TypeIndexes.MaxBy(Function(kv) kv.Item2).FolderName.TrimStart("\"c)
             '根据类别进行查找
             '根据类别进行查找
             Static Sizes As New SafeDictionary(Of String, Long)
             Static Sizes As New SafeDictionary(Of String, Long)
             Select Case Type
             Select Case Type
@@ -1757,8 +1730,7 @@ Retry:
         ''' <summary>
         ''' <summary>
         ''' 需要下载的文件。为“本地地址 - 文件对象”键值对。
         ''' 需要下载的文件。为“本地地址 - 文件对象”键值对。
         ''' </summary>
         ''' </summary>
-        Public Files As New Dictionary(Of String, NetFile)
-        Public ReadOnly LockFiles As New Object
+        Public AllFiles As New SafeDictionary(Of String, NetFile)
 
 
         ''' <summary>
         ''' <summary>
         ''' 当前的所有下载任务。
         ''' 当前的所有下载任务。
@@ -1768,25 +1740,12 @@ Retry:
         ''' <summary>
         ''' <summary>
         ''' 已下载完成的大小。
         ''' 已下载完成的大小。
         ''' </summary>
         ''' </summary>
-        Public Property DownloadDone As Long
-            Get
-                Return _DownloadDone
-            End Get
-            Set(value As Long)
-                SyncLock LockDone
-                    _DownloadDone = value
-                End SyncLock
-            End Set
-        End Property
-        Private _DownloadDone As Long = 0
-        Private ReadOnly LockDone As New Object
-
+        Public DownloadDone As Long = 0
 
 
         ''' <summary>
         ''' <summary>
         ''' 尚未完成下载的文件数。
         ''' 尚未完成下载的文件数。
         ''' </summary>
         ''' </summary>
         Public FileRemain As Integer = 0
         Public FileRemain As Integer = 0
-        Public ReadOnly LockRemain As New Object
 
 
         '这些属性由 RefreshStat 刷新
         '这些属性由 RefreshStat 刷新
         ''' <summary>
         ''' <summary>
@@ -1855,9 +1814,9 @@ Retry:
                         Thread.Sleep(20)
                         Thread.Sleep(20)
                         '获取文件列表
                         '获取文件列表
                         Dim AllFiles As List(Of NetFile)
                         Dim AllFiles As List(Of NetFile)
-                        SyncLock LockFiles
-                            If Id = 0 AndAlso FileRemain = 0 AndAlso Files.Any() Then Files.Clear() '若已完成,则清空
-                            AllFiles = Files.Values.ToList()
+                        SyncLock Me.AllFiles.SyncRoot
+                            If Id = 0 AndAlso FileRemain = 0 AndAlso Me.AllFiles.Any() Then Me.AllFiles.Clear() '若已完成,则清空
+                            AllFiles = Me.AllFiles.Values.ToList()
                         End SyncLock
                         End SyncLock
                         Dim WaitingFiles As New List(Of NetFile)
                         Dim WaitingFiles As New List(Of NetFile)
                         Dim OngoingFiles As New List(Of NetFile)
                         Dim OngoingFiles As New List(Of NetFile)
@@ -1865,7 +1824,7 @@ Retry:
                             If File.Uuid Mod 2 = Id Then Continue For
                             If File.Uuid Mod 2 = Id Then Continue For
                             If File.State = NetState.WaitingToDownload Then
                             If File.State = NetState.WaitingToDownload Then
                                 WaitingFiles.Add(File)
                                 WaitingFiles.Add(File)
-                            ElseIf File.State < NetState.Merging Then
+                            ElseIf File.State < NetState.Merging AndAlso File.State >= NetState.WaitingToDownload Then
                                 OngoingFiles.Add(File)
                                 OngoingFiles.Add(File)
                             End If
                             End If
                         Next
                         Next
@@ -1908,7 +1867,7 @@ Retry:
                     Dim NextTick As Long = GetTimeMs()
                     Dim NextTick As Long = GetTimeMs()
                     While True
                     While True
                         '增加限速余量
                         '增加限速余量
-                        If NetTaskSpeedLimitHigh > 0 Then NetTaskSpeedLimitLeft = NetTaskSpeedLimitHigh / 10
+                        If NetTaskSpeedLimitHigh > 0 Then Interlocked.Add(NetTaskSpeedLimitLeft, CLng(NetTaskSpeedLimitHigh / 10))
                         '刷新公开属性
                         '刷新公开属性
                         RefreshStat()
                         RefreshStat()
                         '等待 100 ms
                         '等待 100 ms
@@ -1931,7 +1890,7 @@ Retry:
         ''' <summary>
         ''' <summary>
         ''' 开始一个下载任务。
         ''' 开始一个下载任务。
         ''' </summary>
         ''' </summary>
-        Public Sub Start(Task As LoaderDownload)
+        Public Function Start(Task As LoaderDownload) As List(Of NetFile)
             StartManager()
             StartManager()
             '清理缓存
             '清理缓存
             SyncLock DownloadCacheLock '防止同时开启多个下载任务时重复清理
             SyncLock DownloadCacheLock '防止同时开启多个下载任务时重复清理
@@ -1943,45 +1902,30 @@ Retry:
                     Catch ex As Exception
                     Catch ex As Exception
                         Log(ex, "清理下载缓存失败")
                         Log(ex, "清理下载缓存失败")
                     End Try
                     End Try
+                    IsDownloadCacheCleared = True
                 End If
                 End If
-                IsDownloadCacheCleared = True
-            End SyncLock
-            '文件处理
-            SyncLock LockFiles
-                '添加每个文件
-                For i = 0 To Task.Files.Count - 1
-                    Dim File = Task.Files(i)
-                    If Files.ContainsKey(File.LocalPath) Then
-                        '已有该文件
-                        If Files(File.LocalPath).State >= NetState.Finished Then
-                            '该文件已经下载过一次,且下载完成
-                            '将已下载的文件替换成当前文件,重新下载
-                            File.Tasks.Add(Task)
-                            Files(File.LocalPath) = File
-                            SyncLock LockRemain
-                                FileRemain += 1
-                            End SyncLock
-                            If ModeDebug Then Log($"[Download] {File.LocalName}:重新加入下载列表,目标 {File.LocalPath}")
-                        Else
-                            '该文件正在下载中
-                            '将当前文件替换成下载中的文件,即两个任务指向同一个文件
-                            File = Files(File.LocalPath)
-                            File.Tasks.Add(Task)
-                        End If
-                    Else
-                        '没有该文件
-                        File.Tasks.Add(Task)
-                        Files.Add(File.LocalPath, File)
-                        SyncLock LockRemain
-                            FileRemain += 1
-                        End SyncLock
-                        If ModeDebug Then Log($"[Download] {File.LocalName}:已加入下载列表,目标 {File.LocalPath}")
-                    End If
-                    Task.Files(i) = File '回设
-                Next
             End SyncLock
             End SyncLock
+            '添加每个文件
+            Dim NewFiles As New List(Of NetFile)
+            For i = 0 To Task.Files.Count - 1
+                Dim File As NetFile = Task.Files(i)
+                If AllFiles.ContainsKey(File.LocalPath) AndAlso AllFiles(File.LocalPath).State < NetState.Finished Then
+                    '该文件正在被另一个任务下载
+                    If ModeDebug Then Log($"[Download] {File.LocalName}:无需开始,该文件已在下载中,目标 {File.LocalPath}")
+                    File = AllFiles(File.LocalPath) '将列表中的文件替换成下载中的文件,即两个任务指向同一个文件;抛弃现在的 File 对象
+                    Task.Files(i) = File
+                Else
+                    '常规情况(该文件可能已在其他任务中下载完成,但这并不影响)
+                    If ModeDebug Then Log($"[Download] {File.LocalName}:开始,目标 {File.LocalPath}")
+                    AllFiles(File.LocalPath) = File
+                    NewFiles.Add(File)
+                    Interlocked.Increment(FileRemain)
+                End If
+                File.Tasks.Add(Task)
+            Next
             Tasks.Add(Task)
             Tasks.Add(Task)
-        End Sub
+            Return NewFiles
+        End Function
 
 
     End Class
     End Class
 
 

+ 89 - 53
Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb

@@ -846,6 +846,11 @@ NoSubtitle:
         ''' </summary>
         ''' </summary>
         Public SearchText As String = Nothing
         Public SearchText As String = Nothing
         ''' <summary>
         ''' <summary>
+        ''' 在进行中文搜索时,CurseForge 的替代搜索文本。
+        ''' 由于 CurseForge API 在有任意关键词未匹配的时候就不显示结果,所以不能使用与 Modrinth 相同的算法。
+        ''' </summary>
+        Public CurseForgeAltSearchText As String = Nothing
+        ''' <summary>
         ''' 允许的来源。
         ''' 允许的来源。
         ''' </summary>
         ''' </summary>
         Public Source As CompSourceType = CompSourceType.Any
         Public Source As CompSourceType = CompSourceType.Any
@@ -884,7 +889,7 @@ NoSubtitle:
             If Tag <> "" Then Address += "&categoryId=" & Tag.BeforeFirst("/")
             If Tag <> "" Then Address += "&categoryId=" & Tag.BeforeFirst("/")
             If ModLoader <> CompModLoaderType.Any Then Address += "&modLoaderType=" & CType(ModLoader, Integer)
             If ModLoader <> CompModLoaderType.Any Then Address += "&modLoaderType=" & CType(ModLoader, Integer)
             If Not String.IsNullOrEmpty(GameVersion) Then Address += "&gameVersion=" & GameVersion
             If Not String.IsNullOrEmpty(GameVersion) Then Address += "&gameVersion=" & GameVersion
-            If Not String.IsNullOrEmpty(SearchText) Then Address += "&searchFilter=" & Net.WebUtility.UrlEncode(SearchText)
+            If Not String.IsNullOrEmpty(If(CurseForgeAltSearchText, SearchText)) Then Address += "&searchFilter=" & Net.WebUtility.UrlEncode(If(CurseForgeAltSearchText, SearchText))
             If Storage.CurseForgeOffset > 0 Then Address += "&index=" & Storage.CurseForgeOffset
             If Storage.CurseForgeOffset > 0 Then Address += "&index=" & Storage.CurseForgeOffset
             Return Address
             Return Address
         End Function
         End Function
@@ -995,62 +1000,86 @@ NoSubtitle:
             '构造搜索请求
             '构造搜索请求
             Dim SearchEntries As New List(Of SearchEntry(Of CompDatabaseEntry))
             Dim SearchEntries As New List(Of SearchEntry(Of CompDatabaseEntry))
             For Each Entry In CompDatabase
             For Each Entry In CompDatabase
-                If Entry.ChineseName.Contains("动态的树") Then Continue For '这玩意儿附属太多了
                 SearchEntries.Add(New SearchEntry(Of CompDatabaseEntry) With {
                 SearchEntries.Add(New SearchEntry(Of CompDatabaseEntry) With {
                     .Item = Entry,
                     .Item = Entry,
-                    .SearchSource = New List(Of KeyValuePair(Of String, Double)) From {
-                        New KeyValuePair(Of String, Double)(Entry.ChineseName & If(Entry.CurseForgeSlug, "") & If(Entry.ModrinthSlug, ""), 1)
+                    .SearchSource = New List(Of SearchSource) From {
+                        New SearchSource(Entry.ChineseName.BeforeFirst(" (").Split({"/"c}, StringSplitOptions.RemoveEmptyEntries), 1), '部分 Mod 有别名
+                        New SearchSource(Entry.ChineseName.AfterFirst(" (") & If(Entry.CurseForgeSlug, "") & If(Entry.ModrinthSlug, ""), 0.5)
                     }
                     }
                 })
                 })
             Next
             Next
-            '获取搜索结果
-            Dim SearchResults = Search(SearchEntries, Request.SearchText, 3)
+            Dim SearchResults = Search(SearchEntries, Request.SearchText, 40, 0.2)
             If Not SearchResults.Any() Then Throw New Exception("无搜索结果,请尝试搜索英文名称")
             If Not SearchResults.Any() Then Throw New Exception("无搜索结果,请尝试搜索英文名称")
-            Dim SearchResult As String = ""
-            For i = 0 To Math.Min(4, SearchResults.Count - 1) '就算全是准确的,也最多只要 5 个
-                If Not SearchResults(i).AbsoluteRight AndAlso i >= Math.Min(2, SearchResults.Count - 1) Then Exit For '把 3 个结果拼合以提高准确度
-                If SearchResults(i).Item.CurseForgeSlug IsNot Nothing Then SearchResult += SearchResults(i).Item.CurseForgeSlug.Replace("-", " ").Replace("/", " ") & " "
-                If SearchResults(i).Item.ModrinthSlug IsNot Nothing Then SearchResult += SearchResults(i).Item.ModrinthSlug.Replace("-", " ").Replace("/", " ") & " "
-                SearchResult += SearchResults(i).Item.ChineseName.AfterLast(" (").TrimEnd(") ").BeforeFirst(" - ").
-                    Replace(":", "").Replace("(", "").Replace(")", "").ToLower.Replace("/", " ") & " "
-            Next
-            Log("[Comp] 中文搜索原始关键词:" & SearchResult, LogLevel.Developer)
-            '去除常见连接词
-            Dim RealFilter As String = ""
-            For Each Word In SearchResult.Split(" ")
-                If {"the", "of", "a", "mod", "and"}.Contains(Word.ToLowerInvariant) OrElse Val(Word) > 0 Then Continue For
-                If SearchResult.Split(" ").Count > 3 AndAlso {"ftb"}.Contains(Word.ToLower) Then Continue For
-                RealFilter += Word.TrimStart("{[(").TrimEnd("}])") & " "
+            '提取可能的英文名
+            Dim ExtractWords =
+            Function(Result As SearchEntry(Of CompDatabaseEntry)) As String()
+                Dim Word As String = ""
+                If Result.Item.CurseForgeSlug IsNot Nothing Then Word += Result.Item.CurseForgeSlug.Replace("-", " ").Replace("/", " ") & " "
+                If Result.Item.ModrinthSlug IsNot Nothing Then Word += Result.Item.ModrinthSlug.Replace("-", " ").Replace("/", " ") & " "
+                Word += Result.Item.ChineseName.AfterLast(" (").TrimEnd(") ").BeforeFirst(" - ").
+                                    Replace(":", "").Replace("(", "").Replace(")", "").ToLower.Replace("/", " ").Replace("-", " ")
+                Dim Words = Word.ToLower.Split(" ")
+                Words = Words.Select(Function(w) w.TrimStart("{[(").TrimEnd("}])")).Where(
+                Function(w)
+                    If w.Length <= 1 Then Return False '单字词
+                    If {"the", "of", "mod", "and"}.Contains(w) Then Return False '常见词
+                    If Val(w) > 0 Then Return False '数字
+                    If w.Split(" ").Count > 3 AndAlso w.Contains("ftb") Then Return False '神秘 FTB
+                    Return True
+                End Function).Distinct.ToArray
+                Return Words
+            End Function
+            Dim WordWeights As New Dictionary(Of String, Double) '各个单词及其出现的权重
+            For Each Result In SearchResults
+                For Each Word In ExtractWords(Result)
+                    Dim Similarity = If(Result.SearchSource.Any(Function(s) s.Aliases.Contains(Request.SearchText)), 100000, Result.Similarity) '完全匹配为 100000
+                    If Not WordWeights.ContainsKey(Word) Then WordWeights.Add(Word, 0)
+                    WordWeights(Word) += Similarity
+                Next
             Next
             Next
-            Request.SearchText = RealFilter
-            Log("[Comp] 中文搜索最终关键词:" & RealFilter, LogLevel.Developer)
+            If Not WordWeights.Any() Then Throw New Exception("无搜索结果,请尝试搜索英文名称")
+            '根据权重选取英文单词
+            Dim SortedWords = WordWeights.OrderByDescending(Function(w) w.Value).ToList
+            If SortedWords.First.Value >= 100000 Then '如果有完全匹配的,就只选完全匹配的
+                Request.SearchText = SortedWords.Where(Function(w) w.Value >= 100000).Select(Function(w) w.Key).Join(" ")
+            Else '否则,CurseForge 选第一个结果,Modrinth 选前 5 个单词
+                Request.SearchText = SortedWords.Take(5).Select(Function(w) w.Key).Join(" ")
+                Request.CurseForgeAltSearchText = ExtractWords(SearchResults.First).Join(" ")
+                Log("[Comp] 中文搜索基础关键词(CurseForge):" & Request.CurseForgeAltSearchText, LogLevel.Developer)
+            End If
+            Log("[Comp] 中文搜索基础关键词:" & Request.SearchText, LogLevel.Developer)
         End If
         End If
 
 
-        '驼峰英文请求关键字处理
-        Dim SpacedKeywords = Request.SearchText.RegexReplace("([A-Z]+|[a-z]+?)(?=[A-Z]+[a-z]+[a-z ]*)", "$& ")
-        Dim ConnectedKeywords = Request.SearchText.Replace(" ", "")
-        Dim AllPossibleKeywords = (SpacedKeywords & " " & If(IsChineseSearch, Request.SearchText, ConnectedKeywords & " " & RawFilter)).ToLower
-
         '最终处理关键字:分割、去重
         '最终处理关键字:分割、去重
-        Dim RightKeywords As New List(Of String)
-        For Each Keyword In AllPossibleKeywords.Split(" ")
-            Keyword = Keyword.Trim("["c, "]"c)
-            If Keyword = "" Then Continue For
-            If {"forge", "fabric", "for", "mod", "quilt"}.Contains(Keyword) Then '#208
-                Log("[Comp] 已跳过搜索关键词:" & Keyword, LogLevel.Developer)
-                Continue For
+        Dim ProcessKeywords =
+        Sub(ByRef Text As String)
+            If Text Is Nothing Then Return
+            Text = Text.ToLowerInvariant
+            Dim Words As New List(Of String)
+            For Each Keyword In Text.Split(" ")
+                Keyword = Keyword.Trim("["c, "]"c)
+                If Keyword = "" Then Continue For
+                If {"forge", "fabric", "for", "mod", "quilt"}.Contains(Keyword) Then '#208
+                    Log("[Comp] 已跳过搜索关键词:" & Keyword, LogLevel.Developer)
+                    Continue For
+                End If
+                Words.Add(Keyword)
+            Next
+            If RawFilter.Length > 0 AndAlso Not Words.Any() Then
+                Text = RawFilter '全都被过滤掉了
+            Else
+                Text = Join(Words.Distinct.ToList, " ")
             End If
             End If
-            RightKeywords.Add(Keyword)
-        Next
-        If RawFilter.Length > 0 AndAlso Not RightKeywords.Any() Then
-            Request.SearchText = RawFilter '全都被过滤掉了
-        Else
-            Request.SearchText = Join(RightKeywords.Distinct.ToList, " ").ToLower
-        End If
+            '例外项:OptiForge、OptiFabric(拆词后因为包含 Forge/Fabric 导致无法搜到实际的 Mod)
+            If RawFilter.Replace(" ", "").ContainsF("optiforge", True) Then Text = "optiforge"
+            If RawFilter.Replace(" ", "").ContainsF("optifabric", True) Then Text = "optifabric"
+        End Sub
 
 
-        '例外项:OptiForge、OptiFabric(拆词后因为包含 Forge/Fabric 导致无法搜到实际的 Mod)
-        If RawFilter.Replace(" ", "").ContainsF("optiforge", True) Then Request.SearchText = "optiforge"
-        If RawFilter.Replace(" ", "").ContainsF("optifabric", True) Then Request.SearchText = "optifabric"
+        If Request.CurseForgeAltSearchText IsNot Nothing Then
+            ProcessKeywords(Request.CurseForgeAltSearchText)
+            Log("[Comp] 工程列表搜索最终文本(CurseForge):" & Request.CurseForgeAltSearchText, LogLevel.Debug)
+        End If
+        ProcessKeywords(Request.SearchText)
         Log("[Comp] 工程列表搜索最终文本:" & Request.SearchText, LogLevel.Debug)
         Log("[Comp] 工程列表搜索最终文本:" & Request.SearchText, LogLevel.Debug)
         Task.Progress = 0.1
         Task.Progress = 0.1
 
 
@@ -1195,7 +1224,7 @@ Retry:
                                                   Not Storage.Results.Any(Function(b) r.IsLike(b))).ToList
                                                   Not Storage.Results.Any(Function(b) r.IsLike(b))).ToList
         '加入列表
         '加入列表
         RealResults.AddRange(RawResults)
         RealResults.AddRange(RawResults)
-        Log($"[Comp] 去重、筛选后累计新增结果 {RealResults.Count} 个")
+        Log($"[Comp] 去重、筛选后累计新增结果 {RealResults.Count} 个(目前已有结果 {Storage.Results.Count} 个)")
 
 
 #End Region
 #End Region
 
 
@@ -1241,16 +1270,19 @@ Retry:
             For Each Result As CompProject In RealResults
             For Each Result As CompProject In RealResults
                 Scores.Add(Result, If(Result.WikiId > 0, 0.2, 0) +
                 Scores.Add(Result, If(Result.WikiId > 0, 0.2, 0) +
                            Math.Log10(Math.Max(Result.DownloadCount, 1) * GetDownloadCountMult(Result)) / 9)
                            Math.Log10(Math.Max(Result.DownloadCount, 1) * GetDownloadCountMult(Result)) / 9)
-                Entry.Add(New SearchEntry(Of CompProject) With {.Item = Result, .SearchSource = New List(Of KeyValuePair(Of String, Double)) From {
-                          New KeyValuePair(Of String, Double)(If(IsChineseSearch, Result.TranslatedName, Result.RawName), 1),
-                          New KeyValuePair(Of String, Double)(Result.Description, 0.05)}})
+                Entry.Add(New SearchEntry(Of CompProject) With {.Item = Result, .SearchSource = New List(Of SearchSource) From {
+                    New SearchSource(If(IsChineseSearch, Result.TranslatedName, Result.RawName).Split({"/"c}, StringSplitOptions.RemoveEmptyEntries), 1),
+                    New SearchSource(Result.Description, 0.05)}})
             Next
             Next
             Dim SearchResult = Search(Entry, RawFilter, 101, -1)
             Dim SearchResult = Search(Entry, RawFilter, 101, -1)
             For Each OneResult In SearchResult
             For Each OneResult In SearchResult
-                Scores(OneResult.Item) += OneResult.Similarity / SearchResult(0).Similarity '最高 1 分的相似度分
+                Scores(OneResult.Item) +=
+                    If(OneResult.AbsoluteRight, 10, OneResult.Similarity) /
+                    If(SearchResult.First.AbsoluteRight, 10, SearchResult.First.Similarity) '最高 1 分的相似度分
             Next
             Next
         End If
         End If
         '根据排序分得出结果并添加
         '根据排序分得出结果并添加
+        If Task.IsAborted Then Throw New ThreadInterruptedException '#8246
         Storage.Results.AddRange(
         Storage.Results.AddRange(
             Scores.OrderByDescending(Function(s) s.Value).Select(Function(r) r.Key))
             Scores.OrderByDescending(Function(s) s.Value).Select(Function(r) r.Key))
 
 
@@ -1430,7 +1462,10 @@ Retry:
                     End If
                     End If
                     'GameVersions
                     'GameVersions
                     Dim RawVersions As List(Of String) = Data("gameVersions").Select(Function(t) t.ToString.Trim.ToLower).ToList
                     Dim RawVersions As List(Of String) = Data("gameVersions").Select(Function(t) t.ToString.Trim.ToLower).ToList
-                    GameVersions = RawVersions.Where(Function(v) McVersion.IsFormatFit(v)).Select(Function(v) v.Replace("-snapshot", " 预览版")).ToList
+                    GameVersions = RawVersions.
+                        Where(Function(v) McVersion.IsFormatFit(v)).
+                        Select(Function(v) v.Replace("-snapshot", " 预览版")).
+                        Distinct.ToList
                     If GameVersions.Count > 1 Then
                     If GameVersions.Count > 1 Then
                         GameVersions = GameVersions.SortByComparison(AddressOf CompareVersionGE).ToList
                         GameVersions = GameVersions.SortByComparison(AddressOf CompareVersionGE).ToList
                         If Type = CompType.ModPack Then GameVersions = New List(Of String) From {GameVersions(0)} '整合包理应只 “支持” 一个版本
                         If Type = CompType.ModPack Then GameVersions = New List(Of String) From {GameVersions(0)} '整合包理应只 “支持” 一个版本
@@ -1492,7 +1527,8 @@ Retry:
                     'GameVersions
                     'GameVersions
                     Dim RawVersions As List(Of String) = Data("game_versions").Select(Function(t) t.ToString.Trim.ToLower).ToList
                     Dim RawVersions As List(Of String) = Data("game_versions").Select(Function(t) t.ToString.Trim.ToLower).ToList
                     GameVersions = RawVersions.Where(Function(v) v.Contains(".")).
                     GameVersions = RawVersions.Where(Function(v) v.Contains(".")).
-                                               Select(Function(v) If(v.Contains("-"), v.BeforeFirst("-") & " 预览版", If(v.StartsWithF("b1."), "远古版本", v))).ToList
+                                               Select(Function(v) If(v.Contains("-"), v.BeforeFirst("-") & " 预览版", If(v.StartsWithF("b1."), "远古版本", v))).
+                                               Distinct.ToList
                     If GameVersions.Count > 1 Then
                     If GameVersions.Count > 1 Then
                         GameVersions = GameVersions.SortByComparison(AddressOf CompareVersionGE).ToList
                         GameVersions = GameVersions.SortByComparison(AddressOf CompareVersionGE).ToList
                         If Type = CompType.ModPack Then GameVersions = New List(Of String) From {GameVersions(0)} '整合包理应只 “支持” 一个版本
                         If Type = CompType.ModPack Then GameVersions = New List(Of String) From {GameVersions(0)} '整合包理应只 “支持” 一个版本
@@ -1648,7 +1684,7 @@ Retry:
                 Next
                 Next
             Else
             Else
                 'Modrinth
                 'Modrinth
-                ResultJsonArray = DlModRequest($"https://api.modrinth.com/v2/project/{ProjectId}/version")
+                ResultJsonArray = DlModRequest($"https://api.modrinth.com/v2/project/{ProjectId}/version?include_changelog=false")
             End If
             End If
             CompFilesCache(ProjectId) = ResultJsonArray.Select(Function(a) New CompFile(a, TargetProject.Type)).
             CompFilesCache(ProjectId) = ResultJsonArray.Select(Function(a) New CompFile(a, TargetProject.Type)).
                 Where(Function(a) a.Available).ToList.
                 Where(Function(a) a.Available).ToList.

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

@@ -1176,17 +1176,17 @@
                     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))
                     Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
                 Case 1
                 Case 1
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 10)) '至少 10s,要不然有时候远端服务器来不及完成
+                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, If(Url.Contains("modrinth"), 20, 10))) '至少 20s,要不然 Modrinth 返回不过来
                     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))
                     Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
                     Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
                     Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
                 Case Else
                 Case Else
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 10))
+                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, If(Url.Contains("modrinth"), 20, 10)))
                     Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
                     Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
                     Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
                     Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
             End Select
             End Select
         Else
         Else
-            Urls.Add(New KeyValuePair(Of String, Integer)(Url, 10))
+            Urls.Add(New KeyValuePair(Of String, Integer)(Url, If(Url.Contains("modrinth"), 20, 10)))
             Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
             Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
         End If
         End If
         Dim Exs As String = ""
         Dim Exs As String = ""

+ 1 - 0
Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb

@@ -95,6 +95,7 @@
             Try
             Try
                 '确定文件存在
                 '确定文件存在
                 If Not File.Exists(PathJava) Then Throw New FileNotFoundException("未找到 java.exe 文件", PathJava)
                 If Not File.Exists(PathJava) Then Throw New FileNotFoundException("未找到 java.exe 文件", PathJava)
+                If PathJava.ContainsF("finalshell", True) Then Throw New Exception("不兼容 FinalShell 的 Java") '#8080
                 If File.Exists(PathFolder & "pdf-bookmark") Then Throw New Exception("不兼容 PDF Bookmark 的 Java") '#5326
                 If File.Exists(PathFolder & "pdf-bookmark") Then Throw New Exception("不兼容 PDF Bookmark 的 Java") '#5326
                 IsJre = Not File.Exists(PathFolder & "javac.exe")
                 IsJre = Not File.Exists(PathFolder & "javac.exe")
                 '运行 -version
                 '运行 -version

+ 68 - 34
Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb

@@ -1314,40 +1314,6 @@ Retry:
 
 
     Private McLaunchArgument As String
     Private McLaunchArgument As String
 
 
-    ''' <summary>
-    ''' 释放 Java Wrapper 并返回完整文件路径。
-    ''' </summary>
-    Public Function ExtractJavaWrapper() As String
-        Dim WrapperPath As String = PathPure & "JavaWrapper.jar"
-        Log("[Java] 选定的 Java Wrapper 路径:" & WrapperPath)
-        SyncLock ExtractJavaWrapperLock '避免 OptiFine 和 Forge 安装时同时释放 Java Wrapper 导致冲突
-            Try
-                WriteFile(WrapperPath, GetResources("JavaWrapper"))
-            Catch ex As Exception
-                If File.Exists(WrapperPath) Then
-                    '因为未知原因 Java Wrapper 可能变为只读文件(#4243)
-                    Log(ex, "Java Wrapper 文件释放失败,但文件已存在,将在删除后尝试重新生成", LogLevel.Developer)
-                    Try
-                        File.Delete(WrapperPath)
-                        WriteFile(WrapperPath, GetResources("JavaWrapper"))
-                    Catch ex2 As Exception
-                        Log(ex2, "Java Wrapper 文件重新释放失败,将尝试更换文件名重新生成", LogLevel.Developer)
-                        WrapperPath = PathPure & "JavaWrapper2.jar"
-                        Try
-                            WriteFile(WrapperPath, GetResources("JavaWrapper"))
-                        Catch ex3 As Exception
-                            Throw New FileNotFoundException("释放 Java Wrapper 最终尝试失败", ex3)
-                        End Try
-                    End Try
-                Else
-                    Throw New FileNotFoundException("释放 Java Wrapper 失败", ex)
-                End If
-            End Try
-        End SyncLock
-        Return WrapperPath
-    End Function
-    Private ExtractJavaWrapperLock As New Object
-
     '主方法,合并 Jvm、Game、Replace 三部分的参数数据
     '主方法,合并 Jvm、Game、Replace 三部分的参数数据
     Private Sub McLaunchArgumentMain(Loader As LoaderTask(Of String, List(Of McLibToken)))
     Private Sub McLaunchArgumentMain(Loader As LoaderTask(Of String, List(Of McLibToken)))
         McLaunchLog("开始获取 Minecraft 启动参数")
         McLaunchLog("开始获取 Minecraft 启动参数")
@@ -1393,6 +1359,8 @@ Retry:
         '自定义
         '自定义
         Dim ArgumentGame As String = Setup.Get("VersionAdvanceGame", Instance:=McInstanceSelected)
         Dim ArgumentGame As String = Setup.Get("VersionAdvanceGame", Instance:=McInstanceSelected)
         Arguments += " " & ArgumentReplace(If(ArgumentGame = "", Setup.Get("LaunchAdvanceGame"), ArgumentGame))
         Arguments += " " & ArgumentReplace(If(ArgumentGame = "", Setup.Get("LaunchAdvanceGame"), ArgumentGame))
+        'GC
+        Arguments = ProcessGCArguments(Arguments, McLaunchJavaSelected, McInstanceSelected)
         '进行参数替换
         '进行参数替换
         Dim ReplaceArguments = McLaunchArgumentsReplace(McInstanceSelected, Loader)
         Dim ReplaceArguments = McLaunchArgumentsReplace(McInstanceSelected, Loader)
         If String.IsNullOrWhiteSpace(ReplaceArguments("${version_type}")) Then
         If String.IsNullOrWhiteSpace(ReplaceArguments("${version_type}")) Then
@@ -1754,6 +1722,72 @@ NextInstance:
         Return GameArguments
         Return GameArguments
     End Function
     End Function
 
 
+    '工具方法
+
+    ''' <summary>
+    ''' 释放 Java Wrapper 并返回完整文件路径。
+    ''' </summary>
+    Public Function ExtractJavaWrapper() As String
+        Dim WrapperPath As String = PathPure & "JavaWrapper.jar"
+        Log("[Java] 选定的 Java Wrapper 路径:" & WrapperPath)
+        Static Lock As New Object
+        SyncLock Lock '避免 OptiFine 和 Forge 安装时同时释放 Java Wrapper 导致冲突
+            Try
+                WriteFile(WrapperPath, GetResources("JavaWrapper"))
+            Catch ex As Exception
+                If File.Exists(WrapperPath) Then
+                    '因为未知原因 Java Wrapper 可能变为只读文件(#4243)
+                    Log(ex, "Java Wrapper 文件释放失败,但文件已存在,将在删除后尝试重新生成", LogLevel.Developer)
+                    Try
+                        File.Delete(WrapperPath)
+                        WriteFile(WrapperPath, GetResources("JavaWrapper"))
+                    Catch ex2 As Exception
+                        Log(ex2, "Java Wrapper 文件重新释放失败,将尝试更换文件名重新生成", LogLevel.Developer)
+                        WrapperPath = PathPure & "JavaWrapper2.jar"
+                        Try
+                            WriteFile(WrapperPath, GetResources("JavaWrapper"))
+                        Catch ex3 As Exception
+                            Throw New FileNotFoundException("释放 Java Wrapper 最终尝试失败", ex3)
+                        End Try
+                    End Try
+                Else
+                    Throw New FileNotFoundException("释放 Java Wrapper 失败", ex)
+                End If
+            End Try
+        End SyncLock
+        Return WrapperPath
+    End Function
+    ''' <summary>
+    ''' 根据设置的 GC 方式返回对应的 JVM 参数。
+    ''' </summary>
+    Private Function ProcessGCArguments(Arguments As String, SelectedJava As JavaEntry, Optional TargetInstance As McInstance = Nothing) As String
+        '0:在 Java 21+ 使用分代 ZGC,20~15 使用非分代的 ZGC,14- 使用 G1GC
+        '1:在 Java 21+ 使用分代 ZGC,20- 使用 G1GC
+        '2:仅 G1GC
+        '3:不指定
+        Dim SetupType As Integer = Setup.Get("LaunchAdvanceGC")
+        If TargetInstance IsNot Nothing AndAlso Setup.Get("VersionAdvanceGC", TargetInstance) > 0 Then SetupType = Setup.Get("VersionAdvanceGC", TargetInstance) - 1 '去掉默认
+        If SetupType = 3 Then Return Arguments.Trim '不指定时直接返回
+        Dim UseG1GC As Boolean =
+             (SetupType = 0 AndAlso SelectedJava.MajorVersion < 15) OrElse
+             (SetupType = 1 AndAlso SelectedJava.MajorVersion < 21) OrElse
+             SetupType = 2
+        McLaunchLog($"GC 设置:{SetupType},选取 {If(UseG1GC, "G1GC", "ZGC")},Java 版本:{SelectedJava.MajorVersion}")
+        '移除
+        Arguments = RegexReplace(Arguments,
+            "( )*-XX:[+-]?(Use\w+GC|ZGenerational|UseCompactObjectHeaders|G1\w+Percent|G1\w+Size|MaxGCPauseMillis)(=[^\s]+)?", "").Trim
+        '添加
+        If UseG1GC Then
+            Arguments = Arguments.Replace("-XX:+UnlockExperimentalVMOptions", "")
+            Arguments = "-XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M " + Arguments
+        Else
+            Arguments = "-XX:+UseZGC " + Arguments
+            If SelectedJava.MajorVersion = 21 OrElse SelectedJava.MajorVersion = 22 Then Arguments = "-XX:+ZGenerational " + Arguments 'Java 23 起默认启用分代 ZGC,不需要再添加参数
+            If SelectedJava.MajorVersion >= 25 Then Arguments = "-XX:+UseCompactObjectHeaders " + Arguments
+        End If
+        Return Arguments.Trim
+    End Function
+
 #End Region
 #End Region
 
 
 #Region "解压 Natives"
 #Region "解压 Natives"

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

@@ -1426,7 +1426,7 @@ OnLoaded:
             '确认最新版本,若为快照则加入常用列表
             '确认最新版本,若为快照则加入常用列表
             Dim LargestInstance As McInstance = InstanceList.
             Dim LargestInstance As McInstance = InstanceList.
                 Where(Function(v) v.State = McInstanceState.Original OrElse v.State = McInstanceState.Snapshot).
                 Where(Function(v) v.State = McInstanceState.Original OrElse v.State = McInstanceState.Snapshot).
-                MaxOf(Function(v) v.ReleaseTime)
+                MaxBy(Function(v) v.ReleaseTime)
             If LargestInstance IsNot Nothing AndAlso LargestInstance.State = McInstanceState.Snapshot Then
             If LargestInstance IsNot Nothing AndAlso LargestInstance.State = McInstanceState.Snapshot Then
                 InstanceUseful.Add(LargestInstance)
                 InstanceUseful.Add(LargestInstance)
                 InstanceList.Remove(LargestInstance)
                 InstanceList.Remove(LargestInstance)

+ 8 - 5
Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb

@@ -636,9 +636,8 @@ Retry:
         Dim Request As New McInstallRequest With {.NewInstanceName = InstanceName, .VersionFolder = $"{McFolderSelected}versions\{InstanceName}\"}
         Dim Request As New McInstallRequest With {.NewInstanceName = InstanceName, .VersionFolder = $"{McFolderSelected}versions\{InstanceName}\"}
         For Each Component As JObject In PackJson("components")
         For Each Component As JObject In PackJson("components")
             If Not Component.ContainsKey("uid") Then Continue For
             If Not Component.ContainsKey("uid") Then Continue For
-            Select Case Component("uid").ToString
-                Case "org.lwjgl"
-                    Log("[ModPack] 已跳过 LWJGL 项")
+            Dim UID As String = Component("uid").ToString
+            Select Case UID
                 Case "net.minecraft"
                 Case "net.minecraft"
                     Request.MinecraftName = Component("version")
                     Request.MinecraftName = Component("version")
                 Case "net.minecraftforge"
                 Case "net.minecraftforge"
@@ -647,9 +646,13 @@ Retry:
                     Request.NeoForgeVersion = Component("version")
                     Request.NeoForgeVersion = Component("version")
                 Case "net.fabricmc.fabric-loader"
                 Case "net.fabricmc.fabric-loader"
                     Request.FabricVersion = Component("version")
                     Request.FabricVersion = Component("version")
-                Case Else
                     'Case "org.quiltmc.quilt-loader" 'eg. 1.0.0
                     'Case "org.quiltmc.quilt-loader" 'eg. 1.0.0
-                    NotifyIncompatibleLoader(Component("uid"))
+                Case Else
+                    If UID.StartsWithF("org.lwjgl") Then '#8210
+                        Log("[ModPack] 已跳过 LWJGL 项:" & UID)
+                    Else
+                        NotifyIncompatibleLoader(UID)
+                    End If
             End Select
             End Select
         Next
         Next
         '构造加载器
         '构造加载器

+ 3 - 5
Plain Craft Launcher 2/Modules/ModMusic.vb

@@ -283,9 +283,9 @@
             Try
             Try
                 Reader = New NAudio.Wave.AudioFileReader(MusicCurrent)
                 Reader = New NAudio.Wave.AudioFileReader(MusicCurrent)
             Catch ex As Exception
             Catch ex As Exception
-                Log(ex,"[Music] 使用 AudioFileReader 加载音频文件失败,将换用 Media Foundation 加载音频文件。")
+                Log(ex, "使用 AudioFileReader 加载音频文件失败,换用 MediaFoundationReader 重试", LogLevel.Developer)
+                Reader = New NAudio.Wave.MediaFoundationReader(MusicCurrent)
             End Try
             End Try
-            Reader = New NAudio.Wave.MediaFoundationReader(MusicCurrent)
             CurrentWave.Init(Reader)
             CurrentWave.Init(Reader)
             CurrentWave.Play()
             CurrentWave.Play()
             '第一次打开的暂停
             '第一次打开的暂停
@@ -316,9 +316,7 @@
                 Hint("由于音频设备变更,音乐播放功能在重启 PCL 后才能恢复!", HintType.Red)
                 Hint("由于音频设备变更,音乐播放功能在重启 PCL 后才能恢复!", HintType.Red)
                 Thread.Sleep(1000000000)
                 Thread.Sleep(1000000000)
             End If
             End If
-            If ex.Message.Contains("Got a frame at sample rate") OrElse ex.Message.Contains("does not support changes to") Then
-                Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 不支持播放音频属性在中途发生变化的音乐", HintType.Red)
-            ElseIf Not (MusicCurrent.EndsWithF(".wav", True) OrElse MusicCurrent.EndsWithF(".mp3", True) OrElse MusicCurrent.EndsWithF(".flac", True)) OrElse
+            If Not (MusicCurrent.EndsWithF(".wav", True) OrElse MusicCurrent.EndsWithF(".mp3", True) OrElse MusicCurrent.EndsWithF(".flac", True)) OrElse
                 ex.Message.Contains("0xC00D36C4") Then '#5096:不支持给定的 URL 的字节流类型。 (异常来自 HRESULT:0xC00D36C4)
                 ex.Message.Contains("0xC00D36C4") Then '#5096:不支持给定的 URL 的字节流类型。 (异常来自 HRESULT:0xC00D36C4)
                 Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 可能不支持此音乐格式,请将格式转换为 .wav、.mp3 或 .flac 后再试", HintType.Red)
                 Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 可能不支持此音乐格式,请将格式转换为 .wav、.mp3 或 .flac 后再试", HintType.Red)
             Else
             Else

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

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

+ 32 - 2
Plain Craft Launcher 2/Pages/PageDownload/Comp/PageDownloadCompDetail.xaml.vb

@@ -359,8 +359,38 @@ GroupDone:
                         If Not Instance.IsLoaded Then Instance.Load()
                         If Not Instance.IsLoaded Then Instance.Load()
                         '只对 Mod 和数据包进行版本检测
                         '只对 Mod 和数据包进行版本检测
                         If File.Type = CompType.Mod OrElse File.Type = CompType.DataPack Then
                         If File.Type = CompType.Mod OrElse File.Type = CompType.DataPack Then
-                            If File.GameVersions.Any(Function(v) v.Contains(".")) AndAlso
-                               Not File.GameVersions.Any(Function(v) v.Contains(".") AndAlso v = Instance.Version.VanillaName) Then Return False
+                            If Not File.GameVersions.Any( '判断是否有任何一个版本匹配
+                            Function(FileVersion)
+                                Dim FileIsSnapshot As Boolean = FileVersion.Contains("预览版") OrElse Not FileVersion.Contains(".")
+                                Dim InstanceIsSnapshot As Boolean = Instance.Version.VanillaName.Contains("snapshot") OrElse Not Instance.Version.VanillaName.Contains(".")
+                                If FileIsSnapshot <> InstanceIsSnapshot Then
+                                    '只有一种是预览版
+                                    Return False
+                                ElseIf Not FileIsSnapshot AndAlso Not InstanceIsSnapshot Then
+                                    '都不是预览版
+                                    Return FileVersion = Instance.Version.VanillaName
+                                Else
+                                    '都是预览版
+                                    Dim FileIsNewFormat As Boolean = FileVersion.Contains(".") AndAlso Val(FileVersion.BeforeFirst(".")) > 1
+                                    Dim InstanceIsNewFormat As Boolean = Instance.Version.Drop > 250
+                                    If FileIsNewFormat <> InstanceIsNewFormat Then
+                                        '只有一种是新格式快照
+                                        Return False
+                                    ElseIf FileIsNewFormat AndAlso InstanceIsNewFormat Then
+                                        '都是新格式快照
+                                        Return FileVersion.BeforeFirst(" ") = Instance.Version.VanillaName.BeforeFirst("-")
+                                    Else
+                                        '都是旧格式快照
+                                        If FileVersion.Contains("w") AndAlso Instance.Version.VanillaName.Contains("w") Then
+                                            '都是 w 快照
+                                            Return FileVersion = Instance.Version.VanillaName
+                                        Else
+                                            '不全是 w 快照
+                                            Return True '只能假定相同,无法判断
+                                        End If
+                                    End If
+                                End If
+                            End Function) Then Return False
                         End If
                         End If
                         '加载器
                         '加载器
                         If Not AllowedLoaders.Any() Then Return True '无要求
                         If Not AllowedLoaders.Any() Then Return True '无要求

+ 2 - 2
Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb

@@ -254,7 +254,7 @@ echo 你可以在 PCL 的 [设置 → 启动选项] 中查看已安装的 java
 echo ------------------------------
 echo ------------------------------
 echo 如果提示 ""You need to agree to the EULA in order to run the server"",请打开 eula.txt,按说明阅读并同意 Minecraft EULA 后,将该文件最后一行中的 eula=false 改为 eula=true。
 echo 如果提示 ""You need to agree to the EULA in order to run the server"",请打开 eula.txt,按说明阅读并同意 Minecraft EULA 后,将该文件最后一行中的 eula=false 改为 eula=true。
 echo ------------------------------
 echo ------------------------------
-""java"" -server -XX:+UseG1GC -Xmx4096M -Xms1024M -XX:+UseCompressedOops -jar {Id}-server.jar nogui
+""java"" -server -XX:+UseG1GC -Xmx6144M -Xms1024M -jar {Id}-server.jar nogui
 echo ----------------------
 echo ----------------------
 echo 服务端已停止。
 echo 服务端已停止。
 pause"
 pause"
@@ -2102,7 +2102,7 @@ Retry:
         Dim OptiFineAsMod As Boolean = Request.OptiFineEntry IsNot Nothing AndAlso Modable '选择了 OptiFine 与任意 Mod 加载器
         Dim OptiFineAsMod As Boolean = Request.OptiFineEntry IsNot Nothing AndAlso Modable '选择了 OptiFine 与任意 Mod 加载器
         If OptiFineAsMod Then
         If OptiFineAsMod Then
             Log("[Download] OptiFine 将作为 Mod 进行下载")
             Log("[Download] OptiFine 将作为 Mod 进行下载")
-            If Request.LiteLoaderEntry IsNot Nothing
+            If Request.LiteLoaderEntry IsNot Nothing Then
                 OptiFineFolder = ModsTempFolder & Request.MinecraftName & "\" '#8147
                 OptiFineFolder = ModsTempFolder & Request.MinecraftName & "\" '#8147
             Else
             Else
                 OptiFineFolder = ModsTempFolder
                 OptiFineFolder = ModsTempFolder

+ 1 - 1
Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml

@@ -94,7 +94,7 @@
                                     <local:ExportOption 
                                     <local:ExportOption 
                                 Title="整合包重要数据"
                                 Title="整合包重要数据"
                                 Description="脚本文件、内置资源包、数据包等"
                                 Description="脚本文件、内置资源包、数据包等"
-                                Rules="addons/|multiblocked/|modpack-update-checker/|global_packs/|global_resource_packs/|global_data_packs/|optional_data_packs/|moonlight-global-datapacks/|maps/|icon.png|mods-resourcepacks/|matmos/|resource_assorts/|resource_assorts.json|patchouli_books/|datapacks/|kubejs*/|!kubejs*/probe/|!kubejs*/exported/|!kubejs*/jsconfig.json|!kubejs*/README.txt|openloader/|worldshape/|resources/|scripts/|structures/|fontfiles/|oresources/|packmenu/|craftpresence/|pointblanks/|template*/|!template*/playerdata/|!template*/stats/"
+                                Rules="hotai/|bansoukou/|addons/|multiblocked/|modpack-update-checker/|global_packs/|global_resource_packs/|global_data_packs/|optional_data_packs/|moonlight-global-datapacks/|maps/|icon.png|mods-resourcepacks/|matmos/|resource_assorts/|resource_assorts.json|patchouli_books/|datapacks/|kubejs*/|!kubejs*/probe/|!kubejs*/exported/|!kubejs*/jsconfig.json|!kubejs*/README.txt|openloader/|worldshape/|resources/|scripts/|structures/|fontfiles/|oresources/|packmenu/|craftpresence/|pointblanks/|template*/|!template*/playerdata/|!template*/stats/"
                                 DefaultChecked="True" />
                                 DefaultChecked="True" />
                                 </local:MyCheckBox.Tag>
                                 </local:MyCheckBox.Tag>
                             </local:MyCheckBox>
                             </local:MyCheckBox>

+ 1 - 3
Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.vb

@@ -368,9 +368,7 @@ Public Class PageInstanceExport
             CheckOptionsPcl.Checked = Ini.GetOrDefault("IncludeLauncher", True)
             CheckOptionsPcl.Checked = Ini.GetOrDefault("IncludeLauncher", True)
             CheckOptionsPclCustom.Checked = Ini.GetOrDefault("IncludeLauncherCustom", True)
             CheckOptionsPclCustom.Checked = Ini.GetOrDefault("IncludeLauncherCustom", True)
             CheckAdvancedInclude.Checked = Ini.GetOrDefault("DontCheckHostedAssets", False)
             CheckAdvancedInclude.Checked = Ini.GetOrDefault("DontCheckHostedAssets", False)
-            If Not CheckAdvancedInclude.Checked Then '#7979,加个特判
-                CheckAdvancedModrinth.Checked = Ini.GetOrDefault("ModrinthUploadMode", False)
-            End If
+            If Not CheckAdvancedInclude.Checked Then CheckAdvancedModrinth.Checked = Ini.GetOrDefault("ModrinthUploadMode", False) '#7979,加个特判
             ConfigPackPath = Ini.GetOrDefault("PackPath", Nothing)
             ConfigPackPath = Ini.GetOrDefault("PackPath", Nothing)
             '导出内容段
             '导出内容段
             RulesOverrides = Segments(1).Replace(vbCr, vbLf).Replace(vbLf & vbLf, vbLf).Split(vbLf).ToList
             RulesOverrides = Segments(1).Replace(vbCr, vbLf).Replace(vbLf & vbLf, vbLf).Split(vbLf).ToList

+ 10 - 10
Plain Craft Launcher 2/Pages/PageInstance/PageInstanceMod.xaml.vb

@@ -850,22 +850,22 @@ Install:
             '构造请求
             '构造请求
             Dim QueryList As New List(Of SearchEntry(Of McMod))
             Dim QueryList As New List(Of SearchEntry(Of McMod))
             For Each Entry As McMod In McModLoader.Output
             For Each Entry As McMod In McModLoader.Output
-                Dim SearchSource As New List(Of KeyValuePair(Of String, Double))
-                SearchSource.Add(New KeyValuePair(Of String, Double)(Entry.DisplayName, 1))
-                SearchSource.Add(New KeyValuePair(Of String, Double)(Entry.FileName, 1))
+                Dim SearchSources As New List(Of SearchSource)
+                SearchSources.Add(New SearchSource(Entry.DisplayName, 1))
+                SearchSources.Add(New SearchSource(Entry.FileName, 1))
                 If Entry.Version IsNot Nothing Then
                 If Entry.Version IsNot Nothing Then
-                    SearchSource.Add(New KeyValuePair(Of String, Double)(Entry.Version, 0.2))
+                    SearchSources.Add(New SearchSource(Entry.Version, 0.2))
                 End If
                 End If
                 If Entry.Description IsNot Nothing AndAlso Entry.Description <> "" Then
                 If Entry.Description IsNot Nothing AndAlso Entry.Description <> "" Then
-                    SearchSource.Add(New KeyValuePair(Of String, Double)(Entry.Description, 0.4))
+                    SearchSources.Add(New SearchSource(Entry.Description, 0.4))
                 End If
                 End If
                 If Entry.Comp IsNot Nothing Then
                 If Entry.Comp IsNot Nothing Then
-                    If Entry.Comp.RawName <> Entry.DisplayName Then SearchSource.Add(New KeyValuePair(Of String, Double)(Entry.Comp.RawName, 1))
-                    If Entry.Comp.TranslatedName <> Entry.Comp.RawName Then SearchSource.Add(New KeyValuePair(Of String, Double)(Entry.Comp.TranslatedName, 1))
-                    If Entry.Comp.Description <> Entry.Description Then SearchSource.Add(New KeyValuePair(Of String, Double)(Entry.Comp.Description, 0.4))
-                    SearchSource.Add(New KeyValuePair(Of String, Double)(String.Join("", Entry.Comp.Tags), 0.2))
+                    If Entry.Comp.RawName <> Entry.DisplayName Then SearchSources.Add(New SearchSource(Entry.Comp.RawName, 1))
+                    If Entry.Comp.TranslatedName <> Entry.Comp.RawName Then SearchSources.Add(New SearchSource(Entry.Comp.TranslatedName, 1))
+                    If Entry.Comp.Description <> Entry.Description Then SearchSources.Add(New SearchSource(Entry.Comp.Description, 0.4))
+                    SearchSources.Add(New SearchSource(String.Join("", Entry.Comp.Tags), 0.2))
                 End If
                 End If
-                QueryList.Add(New SearchEntry(Of McMod) With {.Item = Entry, .SearchSource = SearchSource})
+                QueryList.Add(New SearchEntry(Of McMod) With {.Item = Entry, .SearchSource = SearchSources})
             Next
             Next
             '进行搜索
             '进行搜索
             SearchResult = Search(QueryList, SearchBox.Text, MaxBlurCount:=6, MinBlurSimilarity:=0.35).Select(Function(r) r.Item).ToList
             SearchResult = Search(QueryList, SearchBox.Text, MaxBlurCount:=6, MinBlurSimilarity:=0.35).Select(Function(r) r.Item).ToList

+ 19 - 5
Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml

@@ -56,7 +56,7 @@
                     </Grid>
                     </Grid>
                 </StackPanel>
                 </StackPanel>
             </local:MyCard>
             </local:MyCard>
-            <local:MyCard Margin="0,0,0,15" Title="游戏内存">
+            <local:MyCard Margin="0,0,0,15" Title="内存分配">
                 <StackPanel Margin="25,40,25,15">
                 <StackPanel Margin="25,40,25,15">
                     <local:MyHint x:Name="LabRamWarn" Text="32 位 Java 只能分配最多 1 GB 的内存。强烈建议换用 64 位的 Java!" Theme="Yellow" Margin="0,0,0,12" />
                     <local:MyHint x:Name="LabRamWarn" Text="32 位 Java 只能分配最多 1 GB 的内存。强烈建议换用 64 位的 Java!" Theme="Yellow" Margin="0,0,0,12" />
                     <Grid Margin="0,0,0,3">
                     <Grid Margin="0,0,0,3">
@@ -204,6 +204,8 @@
                         <RowDefinition Height="9" />
                         <RowDefinition Height="9" />
                         <RowDefinition Height="28" />
                         <RowDefinition Height="28" />
                         <RowDefinition Height="9" />
                         <RowDefinition Height="9" />
+                        <RowDefinition Height="28" />
+                        <RowDefinition Height="9" />
                         <RowDefinition Height="31" />
                         <RowDefinition Height="31" />
                         <RowDefinition Height="Auto" />
                         <RowDefinition Height="Auto" />
                         <RowDefinition Height="Auto" />
                         <RowDefinition Height="Auto" />
@@ -213,12 +215,24 @@
                                      Height="100" AcceptsReturn="True" TextWrapping="Wrap" VerticalContentAlignment="Top" Padding="0,5" VerticalScrollBarVisibility="Auto" />
                                      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;&#xa;支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。&#xa;也支持使用 PCL 的替换标记,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。&#xa;&#xa;若留空,则跟随全局设置的值。" HintText="跟随全局设置" />
                     <local:MyTextBox x:Name="TextAdvanceGame" Grid.Row="2" Grid.ColumnSpan="2" Tag="VersionAdvanceGame" Grid.Column="1" ToolTip="文本框中的内容将会被直接拼合在启动参数的末尾。&#xa;例如,输入 --demo 则会以试玩模式启动游戏。&#xa;&#xa;支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。&#xa;也支持使用 PCL 的替换标记,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。&#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"
+                    <TextBlock VerticalAlignment="Center" Grid.Row="4" HorizontalAlignment="Left" Text="内存管理" Margin="0,0,25,0" />
+                    <local:MyComboBox x:Name="ComboAdvanceGC" Grid.Row="4" Grid.ColumnSpan="2" Tag="VersionAdvanceGC" Grid.Column="1">
+                        <local:MyComboBoxItem Content="跟随全局设置" IsSelected="True" />
+                        <local:MyComboBoxItem Content="尽量使用 ZGC(激进)"
+                                              ToolTipService.BetweenShowDelay="0" ToolTip="在 Java 21+ 使用分代 ZGC,20~15 使用非分代的 ZGC,14- 使用 G1GC。&#xa;在 Java 25+ 额外添加 -XX:+UseCompactObjectHeaders。&#xa;&#xa;覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
+                        <local:MyComboBoxItem Content="尽量使用分代 ZGC(平衡)"
+                                              ToolTipService.BetweenShowDelay="0" ToolTip="在 Java 21+ 使用分代 ZGC,20- 使用 G1GC。&#xa;在 Java 25+ 额外添加 -XX:+UseCompactObjectHeaders。&#xa;&#xa;覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
+                        <local:MyComboBoxItem Content="仅 G1GC"
+                                              ToolTipService.BetweenShowDelay="0" ToolTip="固定使用以下参数:&#xa;-XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M&#xa;&#xa;覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
+                        <local:MyComboBoxItem Content="不指定(可自定义)"
+                                              ToolTipService.BetweenShowDelay="0" ToolTip="不自动添加 GC 参数。&#xa;&#xa;仅当选择此项时,你可以在 “Java 虚拟机参数” 设置中手动添加 GC 参数。" />
+                    </local:MyComboBox>
+                    <TextBlock Grid.Row="6" VerticalAlignment="Center" HorizontalAlignment="Left" Text="启动前执行命令" Margin="0,0,25,3" />
+                    <local:MyTextBox x:Name="TextAdvanceRun" Grid.Row="6" Grid.ColumnSpan="2" Tag="VersionAdvanceRun" Grid.Column="1" HintText="" Margin="0,0,0,3"
                                      ToolTip="该项不会覆盖全局设置:启动时会先执行全局设置的命令,再执行版本设置的命令。&#xa;&#xa;在 MC 启动前执行特定命令或程序,语法与 Windows 的命令提示符一致。&#xa;&#xa;你可以用替换标记来动态改变其内容或实现相对路径,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。例如:&#xa; · &quot;{verpath}test.exe&quot; :运行版本文件夹下的 test.exe 程序&#xa; · &quot;{java}java.exe&quot; -jar &quot;{verpath}test.jar&quot; :用 Java 运行版本文件夹下的 test.jar&#xa; · notepad &quot;{verindie}options.txt&quot; :使用记事本打开该版本的设置文件&#xa;&#xa;涉及路径的操作最好都打上双引号,以避免路径中的空格导致运行失败。&#xa;执行命令时,命令行所在的目录是当前的 .minecraft 文件夹。" />
                                      ToolTip="该项不会覆盖全局设置:启动时会先执行全局设置的命令,再执行版本设置的命令。&#xa;&#xa;在 MC 启动前执行特定命令或程序,语法与 Windows 的命令提示符一致。&#xa;&#xa;你可以用替换标记来动态改变其内容或实现相对路径,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。例如:&#xa; · &quot;{verpath}test.exe&quot; :运行版本文件夹下的 test.exe 程序&#xa; · &quot;{java}java.exe&quot; -jar &quot;{verpath}test.jar&quot; :用 Java 运行版本文件夹下的 test.jar&#xa; · notepad &quot;{verindie}options.txt&quot; :使用记事本打开该版本的设置文件&#xa;&#xa;涉及路径的操作最好都打上双引号,以避免路径中的空格导致运行失败。&#xa;执行命令时,命令行所在的目录是当前的 .minecraft 文件夹。" />
-                    <local:MyCheckBox Grid.Row="5" Grid.Column="1" x:Name="CheckAdvanceRunWait" Tag="VersionAdvanceRunWait" Visibility="Collapsed"
+                    <local:MyCheckBox Grid.Row="7" Grid.Column="1" x:Name="CheckAdvanceRunWait" Tag="VersionAdvanceRunWait" Visibility="Collapsed"
                                       Text="等待命令执行完成后再继续启动" Margin="0,5,0,0" />
                                       Text="等待命令执行完成后再继续启动" Margin="0,5,0,0" />
-                    <StackPanel Margin="0,12,0,4" Grid.Row="6" Grid.ColumnSpan="2" HorizontalAlignment="Left">
+                    <StackPanel Margin="0,12,0,4" Grid.Row="8" Grid.ColumnSpan="2" HorizontalAlignment="Left">
                         <local:MyCheckBox Height="28" Text="禁止更新 Mod" x:Name="CheckAdvanceDisableModUpdate" Tag="VersionAdvanceDisableModUpdate"
                         <local:MyCheckBox Height="28" Text="禁止更新 Mod" x:Name="CheckAdvanceDisableModUpdate" Tag="VersionAdvanceDisableModUpdate"
                                           ToolTip="禁止为此版本更新 Mod,以防止整合包玩家误操作"
                                           ToolTip="禁止为此版本更新 Mod,以防止整合包玩家误操作"
                                           ToolTipService.Placement="Right" />
                                           ToolTipService.Placement="Right" />

+ 3 - 2
Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml.vb

@@ -51,6 +51,7 @@
             '高级设置
             '高级设置
             TextAdvanceJvm.Text = Setup.Get("VersionAdvanceJvm", Instance:=PageInstanceLeft.Instance)
             TextAdvanceJvm.Text = Setup.Get("VersionAdvanceJvm", Instance:=PageInstanceLeft.Instance)
             TextAdvanceGame.Text = Setup.Get("VersionAdvanceGame", Instance:=PageInstanceLeft.Instance)
             TextAdvanceGame.Text = Setup.Get("VersionAdvanceGame", Instance:=PageInstanceLeft.Instance)
+            ComboAdvanceGC.SelectedIndex = Setup.Get("VersionAdvanceGC", Instance:=PageInstanceLeft.Instance)
             TextAdvanceRun.Text = Setup.Get("VersionAdvanceRun", Instance:=PageInstanceLeft.Instance)
             TextAdvanceRun.Text = Setup.Get("VersionAdvanceRun", Instance:=PageInstanceLeft.Instance)
             CheckAdvanceRunWait.Checked = Setup.Get("VersionAdvanceRunWait", Instance:=PageInstanceLeft.Instance)
             CheckAdvanceRunWait.Checked = Setup.Get("VersionAdvanceRunWait", Instance:=PageInstanceLeft.Instance)
             If Setup.Get("VersionAdvanceAssets", Instance:=PageInstanceLeft.Instance) = 2 Then
             If Setup.Get("VersionAdvanceAssets", Instance:=PageInstanceLeft.Instance) = 2 Then
@@ -86,6 +87,7 @@
             Setup.Reset("VersionRamOptimize", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionRamOptimize", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceJvm", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceJvm", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceGame", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceGame", Instance:=PageInstanceLeft.Instance)
+            Setup.Reset("VersionAdvanceGC", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceAssets", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceAssets", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceAssetsV2", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceAssetsV2", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceJava", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceJava", Instance:=PageInstanceLeft.Instance)
@@ -93,7 +95,6 @@
             Setup.Reset("VersionAdvanceRunWait", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceRunWait", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceDisableJLW", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceDisableJLW", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceDisableModUpdate", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionAdvanceDisableModUpdate", Instance:=PageInstanceLeft.Instance)
-
             Setup.Reset("VersionArgumentJavaSelect", Instance:=PageInstanceLeft.Instance)
             Setup.Reset("VersionArgumentJavaSelect", Instance:=PageInstanceLeft.Instance)
             JavaSearchLoader.Start(IsForceRestart:=True)
             JavaSearchLoader.Start(IsForceRestart:=True)
 
 
@@ -121,7 +122,7 @@
     Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderRamCustom.Change
     Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderRamCustom.Change
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value, Instance:=PageInstanceLeft.Instance)
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value, Instance:=PageInstanceLeft.Instance)
     End Sub
     End Sub
-    Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboRamOptimize.SelectionChanged
+    Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboRamOptimize.SelectionChanged, ComboAdvanceGC.SelectionChanged
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex, Instance:=PageInstanceLeft.Instance)
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex, Instance:=PageInstanceLeft.Instance)
     End Sub
     End Sub
     Private Shared Sub CheckBoxLikeComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndieV2.SelectionChanged
     Private Shared Sub CheckBoxLikeComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndieV2.SelectionChanged

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

@@ -88,7 +88,7 @@ Public Class PageLaunchRight
                         Url = "https://pcl-bmcl.milu.ink/"
                         Url = "https://pcl-bmcl.milu.ink/"
                     Case 7
                     Case 7
                         Log("[Page] 主页预设:主页市场")
                         Log("[Page] 主页预设:主页市场")
-                        Url = "https://pclhomeplazaoss.lingyunawa.top:26994/d/Homepages/JingHai-Lingyun/Custom.xaml"
+                        Url = "https://pclhomeplazaoss.lingyunawa.top:26994/p/Homepages/Homepage.Market/Custom.xaml"
                     Case 8
                     Case 8
                         Log("[Page] 主页预设:更新日志")
                         Log("[Page] 主页预设:更新日志")
                         Url = "https://pclhomeplazaoss.lingyunawa.top:26994/d/Homepages/Joker2184/UpdateHomepage.xaml"
                         Url = "https://pclhomeplazaoss.lingyunawa.top:26994/d/Homepages/Joker2184/UpdateHomepage.xaml"

+ 559 - 780
Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml

@@ -116,793 +116,572 @@
             <local:MyCard Margin="0,0,0,15" Title="赞助者">
             <local:MyCard Margin="0,0,0,15" Title="赞助者">
                 <StackPanel Margin="25,40,19,20">
                 <StackPanel Margin="25,40,19,20">
                     <TextBlock HorizontalAlignment="Left" Text="以下是近期的高级赞助者们!感谢大家对 PCL 的支持!!!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
                     <TextBlock HorizontalAlignment="Left" Text="以下是近期的高级赞助者们!感谢大家对 PCL 的支持!!!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
-                    <WrapPanel Margin="0,0,0,10">
                        <TextBlock Margin="0,1.5,6,0" Text="." />
-                        <TextBlock Margin="0,1.5,6,0" Text="." />
-                        <TextBlock Margin="0,1.5,6,0" Text="༷" />
-                        <TextBlock Margin="0,1.5,6,0" Text="้" />
-                        <TextBlock Margin="0,1.5,6,0" Text="V" />
-                        <TextBlock Margin="0,1.5,6,0" Text="V" />
-                        <TextBlock Margin="0,1.5,6,0" Text="A" />
-                        <TextBlock Margin="0,1.5,6,0" Text="T." />
-                        <TextBlock Margin="0,1.5,6,0" Text="Li" />
-                        <TextBlock Margin="0,1.5,6,0" Text="LI" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ai" />
-                        <TextBlock Margin="0,1.5,6,0" Text="qi" />
-                        <TextBlock Margin="0,1.5,6,0" Text="张" />
-                        <TextBlock Margin="0,1.5,6,0" Text="辞" />
+                    <WrapPanel Margin="0,0,0,10">
                        <TextBlock Margin="0,1.5,6,0" Text="F" />
+                        <TextBlock Margin="0,1.5,6,0" Text="z" />
+                        <TextBlock Margin="0,1.5,6,0" Text="y" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Y" />
+                        <TextBlock Margin="0,1.5,6,0" Text="2" />
+                        <TextBlock Margin="0,1.5,6,0" Text="X" />
+                        <TextBlock Margin="0,1.5,6,0" Text="L." />
+                        <TextBlock Margin="0,1.5,6,0" Text="yi" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Q" />
+                        <TextBlock Margin="0,1.5,6,0" Text="寄" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ㅤ" />
                         <TextBlock Margin="0,1.5,6,0" Text="vv" />
                         <TextBlock Margin="0,1.5,6,0" Text="vv" />
-                        <TextBlock Margin="0,1.5,6,0" Text="逢" />
-                        <TextBlock Margin="0,1.5,6,0" Text="墨" />
-                        <TextBlock Margin="0,1.5,6,0" Text="溈" />
-                        <TextBlock Margin="0,1.5,6,0" Text="祖" />
-                        <TextBlock Margin="0,1.5,6,0" Text="里" />
-                        <TextBlock Margin="0,1.5,6,0" Text="瓷" />
-                        <TextBlock Margin="0,1.5,6,0" Text="风" />
+                        <TextBlock Margin="0,1.5,6,0" Text="雨" />
+                        <TextBlock Margin="0,1.5,6,0" Text="念" />
+                        <TextBlock Margin="0,1.5,6,0" Text="覹" />
+                        <TextBlock Margin="0,1.5,6,0" Text="咕" />
+                        <TextBlock Margin="0,1.5,6,0" Text="狼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="甘" />
                         <TextBlock Margin="0,1.5,6,0" Text="。" />
                         <TextBlock Margin="0,1.5,6,0" Text="。" />
-                        <TextBlock Margin="0,1.5,6,0" Text="怀" />
-                        <TextBlock Margin="0,1.5,6,0" Text="吧" />
-                        <TextBlock Margin="0,1.5,6,0" Text="木" />
-                        <TextBlock Margin="0,1.5,6,0" Text="彬" />
-                        <TextBlock Margin="0,1.5,6,0" Text="江" />
-                        <TextBlock Margin="0,1.5,6,0" Text="?" />
-                        <TextBlock Margin="0,1.5,6,0" Text="殇" />
-                        <TextBlock Margin="0,1.5,6,0" Text="烛" />
-                        <TextBlock Margin="0,1.5,6,0" Text="我" />
-                        <TextBlock Margin="0,1.5,6,0" Text="晚" />
-                        <TextBlock Margin="0,1.5,6,0" Text="李" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鱼" />
-                        <TextBlock Margin="0,1.5,6,0" Text="云" />
-                        <TextBlock Margin="0,1.5,6,0" Text="桐" />
-                        <TextBlock Margin="0,1.5,6,0" Text="啥" />
-                        <TextBlock Margin="0,1.5,6,0" Text="猪" />
-                        <TextBlock Margin="0,1.5,6,0" Text="五" />
-                        <TextBlock Margin="0,1.5,6,0" Text="星" />
-                        <TextBlock Margin="0,1.5,6,0" Text="虑" />
-                        <TextBlock Margin="0,1.5,6,0" Text="畿" />
-                        <TextBlock Margin="0,1.5,6,0" Text="齊" />
-                        <TextBlock Margin="0,1.5,6,0" Text="宫" />
+                        <TextBlock Margin="0,1.5,6,0" Text="cx" />
+                        <TextBlock Margin="0,1.5,6,0" Text="璃" />
+                        <TextBlock Margin="0,1.5,6,0" Text="几" />
+                        <TextBlock Margin="0,1.5,6,0" Text="宏" />
+                        <TextBlock Margin="0,1.5,6,0" Text="凯" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ht" />
+                        <TextBlock Margin="0,1.5,6,0" Text="枫" />
+                        <TextBlock Margin="0,1.5,6,0" Text="龙" />
+                        <TextBlock Margin="0,1.5,6,0" Text=":" />
+                        <TextBlock Margin="0,1.5,6,0" Text="夕" />
                         <TextBlock Margin="0,1.5,6,0" Text="徐" />
                         <TextBlock Margin="0,1.5,6,0" Text="徐" />
-                        <TextBlock Margin="0,1.5,6,0" Text="咕" />
-                        <TextBlock Margin="0,1.5,6,0" Text="安" />
-                        <TextBlock Margin="0,1.5,6,0" Text="霖" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Yy" />
-                        <TextBlock Margin="0,1.5,6,0" Text="33" />
-                        <TextBlock Margin="0,1.5,6,0" Text="尘." />
-                        <TextBlock Margin="0,1.5,6,0" Text="橘." />
-                        <TextBlock Margin="0,1.5,6,0" Text="3C" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ljh" />
-                        <TextBlock Margin="0,1.5,6,0" Text=" 忆" />
-                        <TextBlock Margin="0,1.5,6,0" Text="op" />
-                        <TextBlock Margin="0,1.5,6,0" Text="sjk" />
-                        <TextBlock Margin="0,1.5,6,0" Text="👾" />
-                        <TextBlock Margin="0,1.5,6,0" Text="AZ" />
-                        <TextBlock Margin="0,1.5,6,0" Text="😑" />
-                        <TextBlock Margin="0,1.5,6,0" Text="cfy" />
-                        <TextBlock Margin="0,1.5,6,0" Text="wg" />
-                        <TextBlock Margin="0,1.5,6,0" Text="jqk" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ccy" />
-                        <TextBlock Margin="0,1.5,6,0" Text="htz" />
-                        <TextBlock Margin="0,1.5,6,0" Text="yyy" />
-                        <TextBlock Margin="0,1.5,6,0" Text="tail" />
-                        <TextBlock Margin="0,1.5,6,0" Text="fall" />
-                        <TextBlock Margin="0,1.5,6,0" Text="mo" />
-                        <TextBlock Margin="0,1.5,6,0" Text="4策" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WY" />
-                        <TextBlock Margin="0,1.5,6,0" Text="yyb" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小P" />
-                        <TextBlock Margin="0,1.5,6,0" Text="yhx" />
-                        <TextBlock Margin="0,1.5,6,0" Text="fdd" />
+                        <TextBlock Margin="0,1.5,6,0" Text="谶" />
+                        <TextBlock Margin="0,1.5,6,0" Text="靕" />
+                        <TextBlock Margin="0,1.5,6,0" Text="稳" />
+                        <TextBlock Margin="0,1.5,6,0" Text="文" />
+                        <TextBlock Margin="0,1.5,6,0" Text="无" />
+                        <TextBlock Margin="0,1.5,6,0" Text="莫" />
+                        <TextBlock Margin="0,1.5,6,0" Text="尊" />
+                        <TextBlock Margin="0,1.5,6,0" Text="埃" />
+                        <TextBlock Margin="0,1.5,6,0" Text="jw" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ftt" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ZZ" />
+                        <TextBlock Margin="0,1.5,6,0" Text="zjx" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Lie" />
+                        <TextBlock Margin="0,1.5,6,0" Text="sjg" />
+                        <TextBlock Margin="0,1.5,6,0" Text="hly" />
+                        <TextBlock Margin="0,1.5,6,0" Text="l y y" />
+                        <TextBlock Margin="0,1.5,6,0" Text="陈jj" />
+                        <TextBlock Margin="0,1.5,6,0" Text="xixi" />
+                        <TextBlock Margin="0,1.5,6,0" Text="bre" />
+                        <TextBlock Margin="0,1.5,6,0" Text="eye" />
+                        <TextBlock Margin="0,1.5,6,0" Text="O.o" />
                         <TextBlock Margin="0,1.5,6,0" Text="ZYL" />
                         <TextBlock Margin="0,1.5,6,0" Text="ZYL" />
-                        <TextBlock Margin="0,1.5,6,0" Text="lIlIlI" />
-                        <TextBlock Margin="0,1.5,6,0" Text="666" />
-                        <TextBlock Margin="0,1.5,6,0" Text="JXP" />
-                        <TextBlock Margin="0,1.5,6,0" Text="123" />
-                        <TextBlock Margin="0,1.5,6,0" Text="fjvg" />
-                        <TextBlock Margin="0,1.5,6,0" Text="LZX" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Liks" />
-                        <TextBlock Margin="0,1.5,6,0" Text="gyn" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WH" />
-                        <TextBlock Margin="0,1.5,6,0" Text="saie" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Van" />
-                        <TextBlock Margin="0,1.5,6,0" Text="rem" />
-                        <TextBlock Margin="0,1.5,6,0" Text="FEN" />
-                        <TextBlock Margin="0,1.5,6,0" Text="mio" />
-                        <TextBlock Margin="0,1.5,6,0" Text="797." />
-                        <TextBlock Margin="0,1.5,6,0" Text="hhh" />
-                        <TextBlock Margin="0,1.5,6,0" Text="xwp" />
-                        <TextBlock Margin="0,1.5,6,0" Text="浮生" />
-                        <TextBlock Margin="0,1.5,6,0" Text="虎鲸" />
-                        <TextBlock Margin="0,1.5,6,0" Text="無名" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小郭" />
-                        <TextBlock Margin="0,1.5,6,0" Text="丘夕" />
-                        <TextBlock Margin="0,1.5,6,0" Text="泡崽" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小马" />
-                        <TextBlock Margin="0,1.5,6,0" Text="柯柯" />
-                        <TextBlock Margin="0,1.5,6,0" Text="星空" />
-                        <TextBlock Margin="0,1.5,6,0" Text="梦见" />
-                        <TextBlock Margin="0,1.5,6,0" Text="九一" />
-                        <TextBlock Margin="0,1.5,6,0" Text="冬司" />
-                        <TextBlock Margin="0,1.5,6,0" Text="君知" />
+                        <TextBlock Margin="0,1.5,6,0" Text="qixi" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Rou" />
+                        <TextBlock Margin="0,1.5,6,0" Text="wyb" />
+                        <TextBlock Margin="0,1.5,6,0" Text="qqq" />
+                        <TextBlock Margin="0,1.5,6,0" Text="zikil" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Kiro" />
+                        <TextBlock Margin="0,1.5,6,0" Text="流明" />
+                        <TextBlock Margin="0,1.5,6,0" Text="姜耸" />
+                        <TextBlock Margin="0,1.5,6,0" Text="柏枫" />
+                        <TextBlock Margin="0,1.5,6,0" Text="柒绪" />
+                        <TextBlock Margin="0,1.5,6,0" Text="xsqs" />
+                        <TextBlock Margin="0,1.5,6,0" Text="啊?" />
+                        <TextBlock Margin="0,1.5,6,0" Text="无风" />
+                        <TextBlock Margin="0,1.5,6,0" Text="听雨" />
+                        <TextBlock Margin="0,1.5,6,0" Text="方格" />
                         <TextBlock Margin="0,1.5,6,0" Text="旋叶" />
                         <TextBlock Margin="0,1.5,6,0" Text="旋叶" />
-                        <TextBlock Margin="0,1.5,6,0" Text="浮客" />
-                        <TextBlock Margin="0,1.5,6,0" Text="白狼" />
-                        <TextBlock Margin="0,1.5,6,0" Text="雨缘" />
-                        <TextBlock Margin="0,1.5,6,0" Text="花花" />
-                        <TextBlock Margin="0,1.5,6,0" Text="随岷" />
-                        <TextBlock Margin="0,1.5,6,0" Text="白景" />
-                        <TextBlock Margin="0,1.5,6,0" Text="晴空" />
-                        <TextBlock Margin="0,1.5,6,0" Text="轩冕" />
-                        <TextBlock Margin="0,1.5,6,0" Text="仓鼠" />
-                        <TextBlock Margin="0,1.5,6,0" Text="天斗" />
-                        <TextBlock Margin="0,1.5,6,0" Text="纸凉" />
-                        <TextBlock Margin="0,1.5,6,0" Text="逆是" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小羊" />
-                        <TextBlock Margin="0,1.5,6,0" Text="星云" />
-                        <TextBlock Margin="0,1.5,6,0" Text="呼吸" />
-                        <TextBlock Margin="0,1.5,6,0" Text="城关" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小罗" />
-                        <TextBlock Margin="0,1.5,6,0" Text="创世" />
-                        <TextBlock Margin="0,1.5,6,0" Text="午领" />
-                        <TextBlock Margin="0,1.5,6,0" Text="竹窝" />
-                        <TextBlock Margin="0,1.5,6,0" Text="龍炏" />
-                        <TextBlock Margin="0,1.5,6,0" Text="震震" />
-                        <TextBlock Margin="0,1.5,6,0" Text="笔头" />
-                        <TextBlock Margin="0,1.5,6,0" Text="木易" />
-                        <TextBlock Margin="0,1.5,6,0" Text="璃鸢" />
-                        <TextBlock Margin="0,1.5,6,0" Text="绿洲" />
-                        <TextBlock Margin="0,1.5,6,0" Text="驭浪" />
-                        <TextBlock Margin="0,1.5,6,0" Text="顾璟" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小仙" />
-                        <TextBlock Margin="0,1.5,6,0" Text="你猜" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小久" />
-                        <TextBlock Margin="0,1.5,6,0" Text="御华" />
-                        <TextBlock Margin="0,1.5,6,0" Text="龑曦" />
-                        <TextBlock Margin="0,1.5,6,0" Text="誓言" />
-                        <TextBlock Margin="0,1.5,6,0" Text="知勤" />
-                        <TextBlock Margin="0,1.5,6,0" Text="枫芫" />
-                        <TextBlock Margin="0,1.5,6,0" Text="过客" />
-                        <TextBlock Margin="0,1.5,6,0" Text="清辉" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鹿泽" />
-                        <TextBlock Margin="0,1.5,6,0" Text="浴风" />
-                        <TextBlock Margin="0,1.5,6,0" Text="如年" />
-                        <TextBlock Margin="0,1.5,6,0" Text="四季" />
-                        <TextBlock Margin="0,1.5,6,0" Text="陌客" />
-                        <TextBlock Margin="0,1.5,6,0" Text="团团" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小智" />
-                        <TextBlock Margin="0,1.5,6,0" Text="袄橘" />
-                        <TextBlock Margin="0,1.5,6,0" Text="野夫" />
-                        <TextBlock Margin="0,1.5,6,0" Text="容易" />
-                        <TextBlock Margin="0,1.5,6,0" Text="请问" />
-                        <TextBlock Margin="0,1.5,6,0" Text="丂枧" />
-                        <TextBlock Margin="0,1.5,6,0" Text="十一" />
-                        <TextBlock Margin="0,1.5,6,0" Text="雪儿" />
-                        <TextBlock Margin="0,1.5,6,0" Text="星澜" />
-                        <TextBlock Margin="0,1.5,6,0" Text="入机" />
-                        <TextBlock Margin="0,1.5,6,0" Text="影逸" />
-                        <TextBlock Margin="0,1.5,6,0" Text="德丹" />
-                        <TextBlock Margin="0,1.5,6,0" Text="榭煜" />
-                        <TextBlock Margin="0,1.5,6,0" Text="江南" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不弃" />
-                        <TextBlock Margin="0,1.5,6,0" Text="秋水" />
-                        <TextBlock Margin="0,1.5,6,0" Text="辰溪" />
-                        <TextBlock Margin="0,1.5,6,0" Text="淺縹" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鱼板" />
-                        <TextBlock Margin="0,1.5,6,0" Text="三高" />
-                        <TextBlock Margin="0,1.5,6,0" Text="羽歌" />
-                        <TextBlock Margin="0,1.5,6,0" Text="素良" />
-                        <TextBlock Margin="0,1.5,6,0" Text="枷勒" />
-                        <TextBlock Margin="0,1.5,6,0" Text="茗茗" />
-                        <TextBlock Margin="0,1.5,6,0" Text="炢曜" />
-                        <TextBlock Margin="0,1.5,6,0" Text="昕瑀" />
-                        <TextBlock Margin="0,1.5,6,0" Text="靈籠" />
-                        <TextBlock Margin="0,1.5,6,0" Text="黑焰" />
-                        <TextBlock Margin="0,1.5,6,0" Text="落辰" />
-                        <TextBlock Margin="0,1.5,6,0" Text="圭璋" />
-                        <TextBlock Margin="0,1.5,6,0" Text="陌行" />
-                        <TextBlock Margin="0,1.5,6,0" Text="须地" />
-                        <TextBlock Margin="0,1.5,6,0" Text="筱雨" />
-                        <TextBlock Margin="0,1.5,6,0" Text="旧缘" />
-                        <TextBlock Margin="0,1.5,6,0" Text="九月" />
-                        <TextBlock Margin="0,1.5,6,0" Text="悠悠" />
-                        <TextBlock Margin="0,1.5,6,0" Text="染尘" />
-                        <TextBlock Margin="0,1.5,6,0" Text="白帝" />
-                        <TextBlock Margin="0,1.5,6,0" Text="幻恪" />
-                        <TextBlock Margin="0,1.5,6,0" Text="桓依" />
-                        <TextBlock Margin="0,1.5,6,0" Text="蓝枫" />
-                        <TextBlock Margin="0,1.5,6,0" Text="三青" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鸽所" />
-                        <TextBlock Margin="0,1.5,6,0" Text="言语" />
-                        <TextBlock Margin="0,1.5,6,0" Text="哈鲁" />
-                        <TextBlock Margin="0,1.5,6,0" Text="落白" />
-                        <TextBlock Margin="0,1.5,6,0" Text="明武" />
-                        <TextBlock Margin="0,1.5,6,0" Text="无限" />
-                        <TextBlock Margin="0,1.5,6,0" Text="叁誓" />
-                        <TextBlock Margin="0,1.5,6,0" Text="薄凉" />
-                        <TextBlock Margin="0,1.5,6,0" Text="枫萨" />
-                        <TextBlock Margin="0,1.5,6,0" Text="椰子" />
-                        <TextBlock Margin="0,1.5,6,0" Text="硕子" />
-                        <TextBlock Margin="0,1.5,6,0" Text="清甹" />
-                        <TextBlock Margin="0,1.5,6,0" Text="舍予" />
-                        <TextBlock Margin="0,1.5,6,0" Text="袭人" />
-                        <TextBlock Margin="0,1.5,6,0" Text="蜔亓" />
-                        <TextBlock Margin="0,1.5,6,0" Text="湘裳" />
-                        <TextBlock Margin="0,1.5,6,0" Text="堇梵" />
-                        <TextBlock Margin="0,1.5,6,0" Text="莫识" />
-                        <TextBlock Margin="0,1.5,6,0" Text="烨槿" />
-                        <TextBlock Margin="0,1.5,6,0" Text="枫月" />
-                        <TextBlock Margin="0,1.5,6,0" Text="柴愿" />
-                        <TextBlock Margin="0,1.5,6,0" Text="閮零" />
-                        <TextBlock Margin="0,1.5,6,0" Text="娑罗" />
-                        <TextBlock Margin="0,1.5,6,0" Text="百盏" />
-                        <TextBlock Margin="0,1.5,6,0" Text="云雀" />
-                        <TextBlock Margin="0,1.5,6,0" Text="付璠" />
-                        <TextBlock Margin="0,1.5,6,0" Text="夜空" />
-                        <TextBlock Margin="0,1.5,6,0" Text="戏子" />
-                        <TextBlock Margin="0,1.5,6,0" Text="玖颜" />
-                        <TextBlock Margin="0,1.5,6,0" Text="粽页" />
-                        <TextBlock Margin="0,1.5,6,0" Text="狐狐" />
-                        <TextBlock Margin="0,1.5,6,0" Text="和风" />
-                        <TextBlock Margin="0,1.5,6,0" Text="林嗳" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Dwy" />
-                        <TextBlock Margin="0,1.5,6,0" Text="baili" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WIFI" />
-                        <TextBlock Margin="0,1.5,6,0" Text="SHN" />
-                        <TextBlock Margin="0,1.5,6,0" Text="LTFY" />
-                        <TextBlock Margin="0,1.5,6,0" Text="RAN" />
-                        <TextBlock Margin="0,1.5,6,0" Text="kibo" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WZY" />
-                        <TextBlock Margin="0,1.5,6,0" Text="风势." />
-                        <TextBlock Margin="0,1.5,6,0" Text="RTW" />
-                        <TextBlock Margin="0,1.5,6,0" Text="FA洛" />
-                        <TextBlock Margin="0,1.5,6,0" Text="服从." />
-                        <TextBlock Margin="0,1.5,6,0" Text="xmlc" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ZZM" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Ezen" />
-                        <TextBlock Margin="0,1.5,6,0" Text="1122" />
-                        <TextBlock Margin="0,1.5,6,0" Text="aster" />
-                        <TextBlock Margin="0,1.5,6,0" Text="shan" />
-                        <TextBlock Margin="0,1.5,6,0" Text="yuan" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Youz" />
-                        <TextBlock Margin="0,1.5,6,0" Text="a bit." />
-                        <TextBlock Margin="0,1.5,6,0" Text="link7" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Z919" />
-                        <TextBlock Margin="0,1.5,6,0" Text="JBFly" />
-                        <TextBlock Margin="0,1.5,6,0" Text="旧人°" />
-                        <TextBlock Margin="0,1.5,6,0" Text="papk" />
-                        <TextBlock Margin="0,1.5,6,0" Text="JTDR" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Linxa" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Chen" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WxW" />
-                        <TextBlock Margin="0,1.5,6,0" Text="RooS" />
-                        <TextBlock Margin="0,1.5,6,0" Text="sanlll" />
-                        <TextBlock Margin="0,1.5,6,0" Text="kwiss" />
-                        <TextBlock Margin="0,1.5,6,0" Text="T总监" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Zwny" />
-                        <TextBlock Margin="0,1.5,6,0" Text="丹春β" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ᗜ - ᗜ" />
-                        <TextBlock Margin="0,1.5,6,0" Text="L1NG" />
-                        <TextBlock Margin="0,1.5,6,0" Text="gguh" />
-                        <TextBlock Margin="0,1.5,6,0" Text="oweo" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WBW" />
-                        <TextBlock Margin="0,1.5,6,0" Text="tiebai" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ZANE" />
-                        <TextBlock Margin="0,1.5,6,0" Text="wocly" />
-                        <TextBlock Margin="0,1.5,6,0" Text="tEnny" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Mr.99" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Caleb" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Sober" />
-                        <TextBlock Margin="0,1.5,6,0" Text="arcsin" />
-                        <TextBlock Margin="0,1.5,6,0" Text="烤D瓜" />
-                        <TextBlock Margin="0,1.5,6,0" Text="xianla" />
-                        <TextBlock Margin="0,1.5,6,0" Text="面羊!!!" />
-                        <TextBlock Margin="0,1.5,6,0" Text="QUQT" />
-                        <TextBlock Margin="0,1.5,6,0" Text="egg*3" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Nya秋" />
-                        <TextBlock Margin="0,1.5,6,0" Text="XUAN" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WThu" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Really" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Pierce" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Carrot" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Ryuyo" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ccwhy" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Elaina" />
-                        <TextBlock Margin="0,1.5,6,0" Text="yuege" />
-                        <TextBlock Margin="0,1.5,6,0" Text="髅十一" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鹿一秋" />
-                        <TextBlock Margin="0,1.5,6,0" Text="余朝波" />
-                        <TextBlock Margin="0,1.5,6,0" Text="易难离" />
-                        <TextBlock Margin="0,1.5,6,0" Text="爱发狐" />
-                        <TextBlock Margin="0,1.5,6,0" Text="MARK" />
+                        <TextBlock Margin="0,1.5,6,0" Text="苑煜" />
+                        <TextBlock Margin="0,1.5,6,0" Text="蓝臻" />
+                        <TextBlock Margin="0,1.5,6,0" Text="恺乐" />
+                        <TextBlock Margin="0,1.5,6,0" Text="还好" />
+                        <TextBlock Margin="0,1.5,6,0" Text="暗生" />
+                        <TextBlock Margin="0,1.5,6,0" Text="久辰" />
+                        <TextBlock Margin="0,1.5,6,0" Text="陌苼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="慕野" />
+                        <TextBlock Margin="0,1.5,6,0" Text="沐落" />
+                        <TextBlock Margin="0,1.5,6,0" Text="澍雨" />
+                        <TextBlock Margin="0,1.5,6,0" Text="叶子" />
+                        <TextBlock Margin="0,1.5,6,0" Text="谦适" />
+                        <TextBlock Margin="0,1.5,6,0" Text="天蚕" />
+                        <TextBlock Margin="0,1.5,6,0" Text="盛煌" />
+                        <TextBlock Margin="0,1.5,6,0" Text="疯瞳" />
+                        <TextBlock Margin="0,1.5,6,0" Text="梦寻" />
+                        <TextBlock Margin="0,1.5,6,0" Text="袁虐" />
+                        <TextBlock Margin="0,1.5,6,0" Text="李研" />
+                        <TextBlock Margin="0,1.5,6,0" Text="羁鸟" />
+                        <TextBlock Margin="0,1.5,6,0" Text="白哉" />
+                        <TextBlock Margin="0,1.5,6,0" Text="輕生" />
+                        <TextBlock Margin="0,1.5,6,0" Text="雾雨" />
+                        <TextBlock Margin="0,1.5,6,0" Text="芊梦" />
+                        <TextBlock Margin="0,1.5,6,0" Text="命免" />
+                        <TextBlock Margin="0,1.5,6,0" Text="序言" />
+                        <TextBlock Margin="0,1.5,6,0" Text="水木" />
+                        <TextBlock Margin="0,1.5,6,0" Text="旧颜" />
+                        <TextBlock Margin="0,1.5,6,0" Text="老六" />
+                        <TextBlock Margin="0,1.5,6,0" Text="阿笙" />
+                        <TextBlock Margin="0,1.5,6,0" Text="玎默" />
+                        <TextBlock Margin="0,1.5,6,0" Text="星霰" />
+                        <TextBlock Margin="0,1.5,6,0" Text="凡多" />
+                        <TextBlock Margin="0,1.5,6,0" Text="和尘" />
+                        <TextBlock Margin="0,1.5,6,0" Text="桓落" />
+                        <TextBlock Margin="0,1.5,6,0" Text="卢茨" />
+                        <TextBlock Margin="0,1.5,6,0" Text="叶依" />
+                        <TextBlock Margin="0,1.5,6,0" Text="月月" />
+                        <TextBlock Margin="0,1.5,6,0" Text="大陈" />
+                        <TextBlock Margin="0,1.5,6,0" Text="桉桉" />
+                        <TextBlock Margin="0,1.5,6,0" Text="kkia" />
+                        <TextBlock Margin="0,1.5,6,0" Text="深邃" />
+                        <TextBlock Margin="0,1.5,6,0" Text="夜晨" />
+                        <TextBlock Margin="0,1.5,6,0" Text="米龙" />
+                        <TextBlock Margin="0,1.5,6,0" Text="悠茵" />
+                        <TextBlock Margin="0,1.5,6,0" Text="星辰" />
+                        <TextBlock Margin="0,1.5,6,0" Text="槲西" />
+                        <TextBlock Margin="0,1.5,6,0" Text="呱呱" />
+                        <TextBlock Margin="0,1.5,6,0" Text="眼睛" />
+                        <TextBlock Margin="0,1.5,6,0" Text="沐木" />
+                        <TextBlock Margin="0,1.5,6,0" Text="瞄咂" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小冉" />
+                        <TextBlock Margin="0,1.5,6,0" Text="西奥" />
+                        <TextBlock Margin="0,1.5,6,0" Text="黑色" />
+                        <TextBlock Margin="0,1.5,6,0" Text="七七" />
+                        <TextBlock Margin="0,1.5,6,0" Text="白給" />
+                        <TextBlock Margin="0,1.5,6,0" Text="猫鱼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="玖外" />
+                        <TextBlock Margin="0,1.5,6,0" Text="猫菇" />
+                        <TextBlock Margin="0,1.5,6,0" Text="圣女" />
+                        <TextBlock Margin="0,1.5,6,0" Text="星光" />
+                        <TextBlock Margin="0,1.5,6,0" Text="LLLL" />
+                        <TextBlock Margin="0,1.5,6,0" Text="劳劳" />
+                        <TextBlock Margin="0,1.5,6,0" Text="顾浅" />
+                        <TextBlock Margin="0,1.5,6,0" Text="啸血" />
+                        <TextBlock Margin="0,1.5,6,0" Text="里奥" />
+                        <TextBlock Margin="0,1.5,6,0" Text="大陌" />
+                        <TextBlock Margin="0,1.5,6,0" Text="板刷" />
+                        <TextBlock Margin="0,1.5,6,0" Text="佬浏" />
+                        <TextBlock Margin="0,1.5,6,0" Text="令狐" />
+                        <TextBlock Margin="0,1.5,6,0" Text="宁笑" />
+                        <TextBlock Margin="0,1.5,6,0" Text="落夏" />
+                        <TextBlock Margin="0,1.5,6,0" Text="云螭" />
+                        <TextBlock Margin="0,1.5,6,0" Text="乌云" />
+                        <TextBlock Margin="0,1.5,6,0" Text="之祠" />
+                        <TextBlock Margin="0,1.5,6,0" Text="冯睿" />
+                        <TextBlock Margin="0,1.5,6,0" Text="夜昼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="鎔謙" />
+                        <TextBlock Margin="0,1.5,6,0" Text="三木" />
+                        <TextBlock Margin="0,1.5,6,0" Text="太二" />
+                        <TextBlock Margin="0,1.5,6,0" Text="墨染" />
+                        <TextBlock Margin="0,1.5,6,0" Text="晚点" />
+                        <TextBlock Margin="0,1.5,6,0" Text="景文" />
+                        <TextBlock Margin="0,1.5,6,0" Text="天火" />
+                        <TextBlock Margin="0,1.5,6,0" Text="冬莫" />
+                        <TextBlock Margin="0,1.5,6,0" Text="羽嵩" />
+                        <TextBlock Margin="0,1.5,6,0" Text="湙泽" />
+                        <TextBlock Margin="0,1.5,6,0" Text="梦幻" />
+                        <TextBlock Margin="0,1.5,6,0" Text="嘿嘿" />
+                        <TextBlock Margin="0,1.5,6,0" Text="枫叶" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Alex" />
+                        <TextBlock Margin="0,1.5,6,0" Text="JIUZ" />
+                        <TextBlock Margin="0,1.5,6,0" Text="hina" />
+                        <TextBlock Margin="0,1.5,6,0" Text="king" />
+                        <TextBlock Margin="0,1.5,6,0" Text="END" />
+                        <TextBlock Margin="0,1.5,6,0" Text="AAA" />
+                        <TextBlock Margin="0,1.5,6,0" Text="flzxc" />
+                        <TextBlock Margin="0,1.5,6,0" Text="time" />
+                        <TextBlock Margin="0,1.5,6,0" Text="sadv" />
+                        <TextBlock Margin="0,1.5,6,0" Text="king" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Ezzo" />
+                        <TextBlock Margin="0,1.5,6,0" Text="vilkil" />
+                        <TextBlock Margin="0,1.5,6,0" Text="1nVt" />
+                        <TextBlock Margin="0,1.5,6,0" Text="V無V" />
+                        <TextBlock Margin="0,1.5,6,0" Text="hhvv " />
+                        <TextBlock Margin="0,1.5,6,0" Text="TTT4" />
+                        <TextBlock Margin="0,1.5,6,0" Text="kuze" />
+                        <TextBlock Margin="0,1.5,6,0" Text="HJYz" />
+                        <TextBlock Margin="0,1.5,6,0" Text="0216" />
+                        <TextBlock Margin="0,1.5,6,0" Text="DOA" />
+                        <TextBlock Margin="0,1.5,6,0" Text="1001" />
+                        <TextBlock Margin="0,1.5,6,0" Text="tynry" />
+                        <TextBlock Margin="0,1.5,6,0" Text="qdy8" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Long" />
+                        <TextBlock Margin="0,1.5,6,0" Text="4Ghz" />
+                        <TextBlock Margin="0,1.5,6,0" Text="miao" />
+                        <TextBlock Margin="0,1.5,6,0" Text="aifad" />
+                        <TextBlock Margin="0,1.5,6,0" Text="xxxte" />
+                        <TextBlock Margin="0,1.5,6,0" Text="dddy" />
+                        <TextBlock Margin="0,1.5,6,0" Text="cong" />
+                        <TextBlock Margin="0,1.5,6,0" Text="叶子L" />
+                        <TextBlock Margin="0,1.5,6,0" Text="lelezi" />
+                        <TextBlock Margin="0,1.5,6,0" Text="bbbb" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Ango" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Elysia" />
+                        <TextBlock Margin="0,1.5,6,0" Text="徐铭h" />
+                        <TextBlock Margin="0,1.5,6,0" Text="HKV1" />
+                        <TextBlock Margin="0,1.5,6,0" Text="zjunE" />
+                        <TextBlock Margin="0,1.5,6,0" Text="少年A" />
+                        <TextBlock Margin="0,1.5,6,0" Text="mouy" />
+                        <TextBlock Margin="0,1.5,6,0" Text="KSfall" />
+                        <TextBlock Margin="0,1.5,6,0" Text="司马Q" />
+                        <TextBlock Margin="0,1.5,6,0" Text="FedEx" />
+                        <TextBlock Margin="0,1.5,6,0" Text="0NaCl" />
+                        <TextBlock Margin="0,1.5,6,0" Text="pisces" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Mikey" />
+                        <TextBlock Margin="0,1.5,6,0" Text="kjshsk" />
+                        <TextBlock Margin="0,1.5,6,0" Text="JaMaf" />
+                        <TextBlock Margin="0,1.5,6,0" Text="孙嘉言" />
+                        <TextBlock Margin="0,1.5,6,0" Text="张卿予" />
+                        <TextBlock Margin="0,1.5,6,0" Text="樟涛竹" />
+                        <TextBlock Margin="0,1.5,6,0" Text="布布曼" />
                         <TextBlock Margin="0,1.5,6,0" Text="Enrico" />
                         <TextBlock Margin="0,1.5,6,0" Text="Enrico" />
-                        <TextBlock Margin="0,1.5,6,0" Text="艾露喵" />
-                        <TextBlock Margin="0,1.5,6,0" Text="五六七" />
-                        <TextBlock Margin="0,1.5,6,0" Text="林凯墨" />
-                        <TextBlock Margin="0,1.5,6,0" Text="咪咪咪" />
-                        <TextBlock Margin="0,1.5,6,0" Text="安徒生" />
-                        <TextBlock Margin="0,1.5,6,0" Text="玉衡猫" />
-                        <TextBlock Margin="0,1.5,6,0" Text="泰利呀" />
-                        <TextBlock Margin="0,1.5,6,0" Text="大金霸" />
-                        <TextBlock Margin="0,1.5,6,0" Text="伊瑟龙" />
-                        <TextBlock Margin="0,1.5,6,0" Text="猪猪侠" />
-                        <TextBlock Margin="0,1.5,6,0" Text="月见泠" />
-                        <TextBlock Margin="0,1.5,6,0" Text="装痛苦" />
-                        <TextBlock Margin="0,1.5,6,0" Text="闲人乄" />
+                        <TextBlock Margin="0,1.5,6,0" Text="柳文江" />
+                        <TextBlock Margin="0,1.5,6,0" Text="伊蕾娜" />
+                        <TextBlock Margin="0,1.5,6,0" Text="竹节虫" />
+                        <TextBlock Margin="0,1.5,6,0" Text="狼崽子" />
+                        <TextBlock Margin="0,1.5,6,0" Text="刘杰世" />
+                        <TextBlock Margin="0,1.5,6,0" Text="汐阶屿" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ーーー" />
+                        <TextBlock Margin="0,1.5,6,0" Text="墨斗鱼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="沈沙雕" />
+                        <TextBlock Margin="0,1.5,6,0" Text="萧子衿" />
+                        <TextBlock Margin="0,1.5,6,0" Text="好好好" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小鳄鱼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="何凝云" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Chaka" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ximou" />
                         <TextBlock Margin="0,1.5,6,0" Text="小萌新" />
                         <TextBlock Margin="0,1.5,6,0" Text="小萌新" />
-                        <TextBlock Margin="0,1.5,6,0" Text="猪猪侠" />
-                        <TextBlock Margin="0,1.5,6,0" Text="李济雨" />
-                        <TextBlock Margin="0,1.5,6,0" Text="墨无衡" />
-                        <TextBlock Margin="0,1.5,6,0" Text="高东海" />
-                        <TextBlock Margin="0,1.5,6,0" Text="夏安升" />
-                        <TextBlock Margin="0,1.5,6,0" Text="观月瞳" />
-                        <TextBlock Margin="0,1.5,6,0" Text="南方田" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鹤望兰" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鹤澈澈" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Doom" />
-                        <TextBlock Margin="0,1.5,6,0" Text="冬续逢" />
-                        <TextBlock Margin="0,1.5,6,0" Text="路痴鱼" />
-                        <TextBlock Margin="0,1.5,6,0" Text="娄梧楼" />
-                        <TextBlock Margin="0,1.5,6,0" Text="夏饮子" />
-                        <TextBlock Margin="0,1.5,6,0" Text="糯米糕" />
-                        <TextBlock Margin="0,1.5,6,0" Text="木瓜瓜" />
-                        <TextBlock Margin="0,1.5,6,0" Text="你愁啥" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ryoryo" />
-                        <TextBlock Margin="0,1.5,6,0" Text="M墨墨" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ACzhx" />
-                        <TextBlock Margin="0,1.5,6,0" Text="等舟积" />
-                        <TextBlock Margin="0,1.5,6,0" Text="妄生徒" />
-                        <TextBlock Margin="0,1.5,6,0" Text="奇怪秋" />
-                        <TextBlock Margin="0,1.5,6,0" Text="醉繁尘" />
-                        <TextBlock Margin="0,1.5,6,0" Text="澄非橙" />
-                        <TextBlock Margin="0,1.5,6,0" Text="燕回鸿" />
-                        <TextBlock Margin="0,1.5,6,0" Text="祝瑜浩" />
-                        <TextBlock Margin="0,1.5,6,0" Text="狐某某" />
-                        <TextBlock Margin="0,1.5,6,0" Text="在人间" />
-                        <TextBlock Margin="0,1.5,6,0" Text="君莫笑" />
-                        <TextBlock Margin="0,1.5,6,0" Text="李金哲" />
-                        <TextBlock Margin="0,1.5,6,0" Text="付啸宇" />
-                        <TextBlock Margin="0,1.5,6,0" Text="晚冬辞" />
-                        <TextBlock Margin="0,1.5,6,0" Text="缪佳泽" />
-                        <TextBlock Margin="0,1.5,6,0" Text="那个人" />
-                        <TextBlock Margin="0,1.5,6,0" Text="等雾语" />
-                        <TextBlock Margin="0,1.5,6,0" Text="幽萝影" />
-                        <TextBlock Margin="0,1.5,6,0" Text="加菲猫" />
-                        <TextBlock Margin="0,1.5,6,0" Text="郭游畅" />
-                        <TextBlock Margin="0,1.5,6,0" Text="木隆呢" />
-                        <TextBlock Margin="0,1.5,6,0" Text="废卢卢" />
-                        <TextBlock Margin="0,1.5,6,0" Text="糊鱼鱼" />
-                        <TextBlock Margin="0,1.5,6,0" Text="暮祈夕" />
-                        <TextBlock Margin="0,1.5,6,0" Text="风梦华" />
-                        <TextBlock Margin="0,1.5,6,0" Text="伊比藏" />
-                        <TextBlock Margin="0,1.5,6,0" Text="白沐玄" />
-                        <TextBlock Margin="0,1.5,6,0" Text="茶学森" />
-                        <TextBlock Margin="0,1.5,6,0" Text="陈胤祥" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鱼板人" />
-                        <TextBlock Margin="0,1.5,6,0" Text="睡不醒" />
-                        <TextBlock Margin="0,1.5,6,0" Text="幻迷离" />
-                        <TextBlock Margin="0,1.5,6,0" Text="随风行" />
-                        <TextBlock Margin="0,1.5,6,0" Text="难非难" />
-                        <TextBlock Margin="0,1.5,6,0" Text="雷电影" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鲤睿宗" />
-                        <TextBlock Margin="0,1.5,6,0" Text="空卫衣" />
-                        <TextBlock Margin="0,1.5,6,0" Text="简单爱" />
-                        <TextBlock Margin="0,1.5,6,0" Text="冰の夕" />
-                        <TextBlock Margin="0,1.5,6,0" Text="楚梓墨" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Aorise" />
-                        <TextBlock Margin="0,1.5,6,0" Text="罗生门" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Hz777" />
-                        <TextBlock Margin="0,1.5,6,0" Text="本杰明" />
-                        <TextBlock Margin="0,1.5,6,0" Text="影卡卡" />
-                        <TextBlock Margin="0,1.5,6,0" Text="。。。" />
-                        <TextBlock Margin="0,1.5,6,0" Text="白小影" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不行了" />
-                        <TextBlock Margin="0,1.5,6,0" Text="潘伟博" />
-                        <TextBlock Margin="0,1.5,6,0" Text="王子坤" />
-                        <TextBlock Margin="0,1.5,6,0" Text="藏瘾笑" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小白式" />
-                        <TextBlock Margin="0,1.5,6,0" Text="flyryxc" />
-                        <TextBlock Margin="0,1.5,6,0" Text="iehuxs" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Ermite" />
-                        <TextBlock Margin="0,1.5,6,0" Text="wqy08" />
-                        <TextBlock Margin="0,1.5,6,0" Text="MOYU" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Vector" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Slivevr" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Beater" />
-                        <TextBlock Margin="0,1.5,6,0" Text="leiyuxi" />
-                        <TextBlock Margin="0,1.5,6,0" Text="mc.jlkj" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Darius" />
-                        <TextBlock Margin="0,1.5,6,0" Text="oPluss" />
-                        <TextBlock Margin="0,1.5,6,0" Text="aloner" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Alkaid" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ren ge" />
-                        <TextBlock Margin="0,1.5,6,0" Text="榛子Zz" />
-                        <TextBlock Margin="0,1.5,6,0" Text="StarXC" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Roko.s" />
-                        <TextBlock Margin="0,1.5,6,0" Text="``Geek." />
-                        <TextBlock Margin="0,1.5,6,0" Text="ckyasb" />
-                        <TextBlock Margin="0,1.5,6,0" Text="K2CO3" />
-                        <TextBlock Margin="0,1.5,6,0" Text="二柑心." />
-                        <TextBlock Margin="0,1.5,6,0" Text="chouzi" />
-                        <TextBlock Margin="0,1.5,6,0" Text="DTFOE" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不高兴." />
-                        <TextBlock Margin="0,1.5,6,0" Text="Alayna" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Ba77er" />
-                        <TextBlock Margin="0,1.5,6,0" Text="菜鸟vH" />
-                        <TextBlock Margin="0,1.5,6,0" Text="萧1314" />
-                        <TextBlock Margin="0,1.5,6,0" Text="MNAH" />
-                        <TextBlock Margin="0,1.5,6,0" Text="听雨***" />
-                        <TextBlock Margin="0,1.5,6,0" Text="maohx" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Aurora" />
-                        <TextBlock Margin="0,1.5,6,0" Text="zheran" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Atsuko" />
-                        <TextBlock Margin="0,1.5,6,0" Text="seeyou" />
-                        <TextBlock Margin="0,1.5,6,0" Text="星空res" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Skyline" />
-                        <TextBlock Margin="0,1.5,6,0" Text="AHong" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ops626" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Madao" />
-                        <TextBlock Margin="0,1.5,6,0" Text="665352" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Sakana" />
-                        <TextBlock Margin="0,1.5,6,0" Text="BHXUU" />
-                        <TextBlock Margin="0,1.5,6,0" Text="apostle" />
-                        <TextBlock Margin="0,1.5,6,0" Text="TagGift" />
-                        <TextBlock Margin="0,1.5,6,0" Text="LAOLIU" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Sousan" />
-                        <TextBlock Margin="0,1.5,6,0" Text="9拾爱柒" />
-                        <TextBlock Margin="0,1.5,6,0" Text="poposjj" />
-                        <TextBlock Margin="0,1.5,6,0" Text="LiCaner" />
-                        <TextBlock Margin="0,1.5,6,0" Text="vdggtw" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Gophin" />
-                        <TextBlock Margin="0,1.5,6,0" Text="王某4某" />
-                        <TextBlock Margin="0,1.5,6,0" Text="SprataS" />
-                        <TextBlock Margin="0,1.5,6,0" Text="smzdby" />
-                        <TextBlock Margin="0,1.5,6,0" Text="fxy1950" />
-                        <TextBlock Margin="0,1.5,6,0" Text="周xiaxia" />
-                        <TextBlock Margin="0,1.5,6,0" Text="阿江233" />
-                        <TextBlock Margin="0,1.5,6,0" Text="origami" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Zone0o" />
-                        <TextBlock Margin="0,1.5,6,0" Text="cyrainia" />
-                        <TextBlock Margin="0,1.5,6,0" Text="fhz2000" />
-                        <TextBlock Margin="0,1.5,6,0" Text="lengruo" />
-                        <TextBlock Margin="0,1.5,6,0" Text="TheEyer" />
-                        <TextBlock Margin="0,1.5,6,0" Text="QU8964" />
-                        <TextBlock Margin="0,1.5,6,0" Text="PBJqwq" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Promise" />
-                        <TextBlock Margin="0,1.5,6,0" Text="GOTWH" />
-                        <TextBlock Margin="0,1.5,6,0" Text="morpho" />
-                        <TextBlock Margin="0,1.5,6,0" Text="刘口水ᶻᶻᶻ" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Oracron" />
-                        <TextBlock Margin="0,1.5,6,0" Text="HD2507" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Qinbum" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Dq-yyds" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WK3535" />
-                        <TextBlock Margin="0,1.5,6,0" Text="一只awa" />
-                        <TextBlock Margin="0,1.5,6,0" Text="d3eidait" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WYCSSE" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不可思议" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不愿逆流" />
-                        <TextBlock Margin="0,1.5,6,0" Text="咖啡麦片" />
-                        <TextBlock Margin="0,1.5,6,0" Text="希望之星" />
-                        <TextBlock Margin="0,1.5,6,0" Text="碧海湛蓝" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鸣蜩有柒" />
-                        <TextBlock Margin="0,1.5,6,0" Text="奈洛妖星" />
-                        <TextBlock Margin="0,1.5,6,0" Text="白衣沾酒" />
-                        <TextBlock Margin="0,1.5,6,0" Text="长乐未央" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鲨鱼辣椒" />
-                        <TextBlock Margin="0,1.5,6,0" Text="快乐芜湖" />
-                        <TextBlock Margin="0,1.5,6,0" Text="隋彧而安" />
-                        <TextBlock Margin="0,1.5,6,0" Text="游子忘也" />
-                        <TextBlock Margin="0,1.5,6,0" Text="凌之殇血" />
-                        <TextBlock Margin="0,1.5,6,0" Text="红六兔子" />
-                        <TextBlock Margin="0,1.5,6,0" Text="风花三月" />
-                        <TextBlock Margin="0,1.5,6,0" Text="秋水长天" />
-                        <TextBlock Margin="0,1.5,6,0" Text="摩卡茉莉" />
-                        <TextBlock Margin="0,1.5,6,0" Text="君子随心" />
-                        <TextBlock Margin="0,1.5,6,0" Text="淇汐明月" />
-                        <TextBlock Margin="0,1.5,6,0" Text="金鑫苑名" />
-                        <TextBlock Margin="0,1.5,6,0" Text="再次伟大" />
-                        <TextBlock Margin="0,1.5,6,0" Text="东缺海鸥" />
-                        <TextBlock Margin="0,1.5,6,0" Text="道陆玄烬" />
-                        <TextBlock Margin="0,1.5,6,0" Text="死幻安生" />
-                        <TextBlock Margin="0,1.5,6,0" Text="曼波曼波" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Madoka" />
-                        <TextBlock Margin="0,1.5,6,0" Text="流逝的心" />
-                        <TextBlock Margin="0,1.5,6,0" Text="欧阳缺德" />
-                        <TextBlock Margin="0,1.5,6,0" Text="白云苍狗" />
-                        <TextBlock Margin="0,1.5,6,0" Text="三颗飞星" />
-                        <TextBlock Margin="0,1.5,6,0" Text="花之潮汐" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Time Up" />
-                        <TextBlock Margin="0,1.5,6,0" Text="金木文雄" />
-                        <TextBlock Margin="0,1.5,6,0" Text="失物招领" />
-                        <TextBlock Margin="0,1.5,6,0" Text="真仙杨小" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不想取名" />
-                        <TextBlock Margin="0,1.5,6,0" Text="彼岸多闻" />
-                        <TextBlock Margin="0,1.5,6,0" Text="泡泡茶壶" />
-                        <TextBlock Margin="0,1.5,6,0" Text="菠萝盖饭" />
-                        <TextBlock Margin="0,1.5,6,0" Text="山水鹤梦" />
-                        <TextBlock Margin="0,1.5,6,0" Text="枯叶火心" />
-                        <TextBlock Margin="0,1.5,6,0" Text="茶子千鹤" />
-                        <TextBlock Margin="0,1.5,6,0" Text="起源之间" />
-                        <TextBlock Margin="0,1.5,6,0" Text="凌元君君" />
-                        <TextBlock Margin="0,1.5,6,0" Text="涂山寒梦" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小小夏野" />
-                        <TextBlock Margin="0,1.5,6,0" Text="流水化月" />
-                        <TextBlock Margin="0,1.5,6,0" Text="墨绿之韵" />
-                        <TextBlock Margin="0,1.5,6,0" Text="落笔知秋" />
-                        <TextBlock Margin="0,1.5,6,0" Text="柠月如風" />
-                        <TextBlock Margin="0,1.5,6,0" Text="托比崽子" />
-                        <TextBlock Margin="0,1.5,6,0" Text="杰克俊曼" />
-                        <TextBlock Margin="0,1.5,6,0" Text="MaBaKa" />
-                        <TextBlock Margin="0,1.5,6,0" Text="山栀川柏" />
-                        <TextBlock Margin="0,1.5,6,0" Text="哆啦库梦" />
-                        <TextBlock Margin="0,1.5,6,0" Text="True1on" />
-                        <TextBlock Margin="0,1.5,6,0" Text="笔墨山河" />
-                        <TextBlock Margin="0,1.5,6,0" Text="初闻林北" />
-                        <TextBlock Margin="0,1.5,6,0" Text="晏李白泽" />
-                        <TextBlock Margin="0,1.5,6,0" Text="春末雨夏" />
-                        <TextBlock Margin="0,1.5,6,0" Text="墨书年华" />
-                        <TextBlock Margin="0,1.5,6,0" Text="百战不跆" />
-                        <TextBlock Margin="0,1.5,6,0" Text="辛不是新" />
-                        <TextBlock Margin="0,1.5,6,0" Text="非常新意" />
-                        <TextBlock Margin="0,1.5,6,0" Text="一只企鹅" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不留余念" />
-                        <TextBlock Margin="0,1.5,6,0" Text="陈皮鸡蛋" />
-                        <TextBlock Margin="0,1.5,6,0" Text="悠游岁月" />
-                        <TextBlock Margin="0,1.5,6,0" Text="欣想事成" />
-                        <TextBlock Margin="0,1.5,6,0" Text="颖枫秋辞" />
-                        <TextBlock Margin="0,1.5,6,0" Text="自由是否" />
-                        <TextBlock Margin="0,1.5,6,0" Text="添只饺子" />
-                        <TextBlock Margin="0,1.5,6,0" Text="龙游天渊" />
-                        <TextBlock Margin="0,1.5,6,0" Text="入梦寻影" />
-                        <TextBlock Margin="0,1.5,6,0" Text="墨韵诗笺" />
-                        <TextBlock Margin="0,1.5,6,0" Text="岸尽若辉" />
-                        <TextBlock Margin="0,1.5,6,0" Text="月亮大王" />
-                        <TextBlock Margin="0,1.5,6,0" Text="人间无常" />
-                        <TextBlock Margin="0,1.5,6,0" Text="炒股养猫" />
-                        <TextBlock Margin="0,1.5,6,0" Text="梧梦绫音" />
-                        <TextBlock Margin="0,1.5,6,0" Text="林克达达" />
-                        <TextBlock Margin="0,1.5,6,0" Text="今年有钱" />
-                        <TextBlock Margin="0,1.5,6,0" Text="落笔东流" />
-                        <TextBlock Margin="0,1.5,6,0" Text="琴道桐君" />
-                        <TextBlock Margin="0,1.5,6,0" Text="御笔执光" />
-                        <TextBlock Margin="0,1.5,6,0" Text="琼浆玉液" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鱼中之海" />
-                        <TextBlock Margin="0,1.5,6,0" Text="吃瓜群猹" />
-                        <TextBlock Margin="0,1.5,6,0" Text="电弧陷阱" />
-                        <TextBlock Margin="0,1.5,6,0" Text="查无此人" />
-                        <TextBlock Margin="0,1.5,6,0" Text="农夫三全" />
-                        <TextBlock Margin="0,1.5,6,0" Text="我想吃鱼" />
-                        <TextBlock Margin="0,1.5,6,0" Text="秋月山魈" />
-                        <TextBlock Margin="0,1.5,6,0" Text="时忆梦璃" />
-                        <TextBlock Margin="0,1.5,6,0" Text="奥古斯都" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不爱睡觉" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Lo_Karry" />
-                        <TextBlock Margin="0,1.5,6,0" Text="两袖清风" />
-                        <TextBlock Margin="0,1.5,6,0" Text="世界和平" />
-                        <TextBlock Margin="0,1.5,6,0" Text="吃喝不愁" />
-                        <TextBlock Margin="0,1.5,6,0" Text="軼的明天" />
-                        <TextBlock Margin="0,1.5,6,0" Text="油炸酥饼" />
-                        <TextBlock Margin="0,1.5,6,0" Text="三月冰雹" />
-                        <TextBlock Margin="0,1.5,6,0" Text="爱久爱海" />
-                        <TextBlock Margin="0,1.5,6,0" Text="拿羊煲汤" />
-                        <TextBlock Margin="0,1.5,6,0" Text="张宇惠天" />
-                        <TextBlock Margin="0,1.5,6,0" Text="魏白逐星" />
-                        <TextBlock Margin="0,1.5,6,0" Text="隔壁老赵" />
-                        <TextBlock Margin="0,1.5,6,0" Text="断坯残垣" />
-                        <TextBlock Margin="0,1.5,6,0" Text="濒危物种" />
-                        <TextBlock Margin="0,1.5,6,0" Text="泪雨霖铃" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Summer" />
-                        <TextBlock Margin="0,1.5,6,0" Text="wanxing" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ayanami" />
-                        <TextBlock Margin="0,1.5,6,0" Text="DFanger" />
-                        <TextBlock Margin="0,1.5,6,0" Text="REMOTE" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Bad_Xue" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Feidemu" />
-                        <TextBlock Margin="0,1.5,6,0" Text="GuanDN" />
-                        <TextBlock Margin="0,1.5,6,0" Text="君莫问96" />
-                        <TextBlock Margin="0,1.5,6,0" Text="我推:古见" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Duunam" />
-                        <TextBlock Margin="0,1.5,6,0" Text="屑黑黑Z7" />
-                        <TextBlock Margin="0,1.5,6,0" Text="huhaaaa" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Liriummi" />
-                        <TextBlock Margin="0,1.5,6,0" Text="shenxiny" />
-                        <TextBlock Margin="0,1.5,6,0" Text="木镐子XY" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不如睡觉." />
-                        <TextBlock Margin="0,1.5,6,0" Text="Tanikaze" />
-                        <TextBlock Margin="0,1.5,6,0" Text="LLOKVRE" />
-                        <TextBlock Margin="0,1.5,6,0" Text="hengjimi" />
-                        <TextBlock Margin="0,1.5,6,0" Text="人心难测i" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Feng_orz" />
-                        <TextBlock Margin="0,1.5,6,0" Text="oguricap" />
-                        <TextBlock Margin="0,1.5,6,0" Text="zhiaizirui" />
-                        <TextBlock Margin="0,1.5,6,0" Text="SCPWWL" />
-                        <TextBlock Margin="0,1.5,6,0" Text="asoftwan" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Xianyu_V" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Tyrazdon" />
-                        <TextBlock Margin="0,1.5,6,0" Text="hdwsjy21" />
-                        <TextBlock Margin="0,1.5,6,0" Text="klgb2025" />
-                        <TextBlock Margin="0,1.5,6,0" Text="龙影Kage" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Mike茶茶" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Marrakes" />
-                        <TextBlock Margin="0,1.5,6,0" Text="hero_boy" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Kreamzfy" />
-                        <TextBlock Margin="0,1.5,6,0" Text="LOWVAN" />
-                        <TextBlock Margin="0,1.5,6,0" Text="半顷·阳光·" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Zikyeung" />
-                        <TextBlock Margin="0,1.5,6,0" Text="rainbowk" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ukpkmkk" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ickicr双鱼" />
-                        <TextBlock Margin="0,1.5,6,0" Text="watuking" />
-                        <TextBlock Margin="0,1.5,6,0" Text="OldFriday" />
-                        <TextBlock Margin="0,1.5,6,0" Text="YuanYing" />
-                        <TextBlock Margin="0,1.5,6,0" Text="yshdjgfsd" />
-                        <TextBlock Margin="0,1.5,6,0" Text="zzmmjj66" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Judyshuo" />
-                        <TextBlock Margin="0,1.5,6,0" Text="mmmmm" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Kaorurem" />
-                        <TextBlock Margin="0,1.5,6,0" Text="bangbing" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Mr-桂花酒" />
-                        <TextBlock Margin="0,1.5,6,0" Text="星屿 Staris" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ฅ(*°ω°*ฅ)*" />
-                        <TextBlock Margin="0,1.5,6,0" Text="HereBlack" />
-                        <TextBlock Margin="0,1.5,6,0" Text="lokishi666" />
-                        <TextBlock Margin="0,1.5,6,0" Text="114514pcl" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Eastmelan" />
-                        <TextBlock Margin="0,1.5,6,0" Text="可恶的一瓶" />
-                        <TextBlock Margin="0,1.5,6,0" Text="龙庙彭于晏" />
-                        <TextBlock Margin="0,1.5,6,0" Text="请输入文本" />
-                        <TextBlock Margin="0,1.5,6,0" Text="音黎爱玩机" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Kiren_Yuki" />
-                        <TextBlock Margin="0,1.5,6,0" Text="流年乍思雨" />
-                        <TextBlock Margin="0,1.5,6,0" Text="StellarDoll" />
-                        <TextBlock Margin="0,1.5,6,0" Text="鸽子子子子" />
-                        <TextBlock Margin="0,1.5,6,0" Text="猫猫雫羽咔" />
-                        <TextBlock Margin="0,1.5,6,0" Text="吴糖味可乐" />
-                        <TextBlock Margin="0,1.5,6,0" Text="前方已无人" />
-                        <TextBlock Margin="0,1.5,6,0" Text="陨落小笨蛋" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Thousumy" />
-                        <TextBlock Margin="0,1.5,6,0" Text="睡不够张张" />
-                        <TextBlock Margin="0,1.5,6,0" Text="妙味脆脆鲨" />
-                        <TextBlock Margin="0,1.5,6,0" Text="执琴不是勤" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小路啦啦啦" />
-                        <TextBlock Margin="0,1.5,6,0" Text="明日香大王" />
-                        <TextBlock Margin="0,1.5,6,0" Text="落子木木木" />
-                        <TextBlock Margin="0,1.5,6,0" Text="尘枫maple" />
-                        <TextBlock Margin="0,1.5,6,0" Text="白瓷梅子汤" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不要吃冰箱" />
-                        <TextBlock Margin="0,1.5,6,0" Text="何以断倾伤" />
-                        <TextBlock Margin="0,1.5,6,0" Text="一三五陆七" />
-                        <TextBlock Margin="0,1.5,6,0" Text="三火可燃冰" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不是哥们?" />
-                        <TextBlock Margin="0,1.5,6,0" Text="下北泽红茶" />
-                        <TextBlock Margin="0,1.5,6,0" Text="梦醒时见鲸" />
-                        <TextBlock Margin="0,1.5,6,0" Text="不亮的星星" />
-                        <TextBlock Margin="0,1.5,6,0" Text="毕加索的橙" />
-                        <TextBlock Margin="0,1.5,6,0" Text="心中装乾坤" />
-                        <TextBlock Margin="0,1.5,6,0" Text="嘿科勒科赫" />
-                        <TextBlock Margin="0,1.5,6,0" Text="花落莫清风" />
-                        <TextBlock Margin="0,1.5,6,0" Text="无聊的墨仔" />
-                        <TextBlock Margin="0,1.5,6,0" Text="阿多勒纳林" />
-                        <TextBlock Margin="0,1.5,6,0" Text="十八号小白" />
-                        <TextBlock Margin="0,1.5,6,0" Text="话唠唠死者" />
-                        <TextBlock Margin="0,1.5,6,0" Text="绝望的萌新" />
-                        <TextBlock Margin="0,1.5,6,0" Text="路边的骑士" />
-                        <TextBlock Margin="0,1.5,6,0" Text="百墨平一岚" />
-                        <TextBlock Margin="0,1.5,6,0" Text="chy125430" />
-                        <TextBlock Margin="0,1.5,6,0" Text="秋枫Maple" />
-                        <TextBlock Margin="0,1.5,6,0" Text="omgDDDz" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Theyinguo" />
-                        <TextBlock Margin="0,1.5,6,0" Text="LanYinALA" />
-                        <TextBlock Margin="0,1.5,6,0" Text="G∀ℵ★827" />
-                        <TextBlock Margin="0,1.5,6,0" Text="雷徳斯·阔恩" />
-                        <TextBlock Margin="0,1.5,6,0" Text="白给Escape" />
-                        <TextBlock Margin="0,1.5,6,0" Text="茶泡饭0708" />
-                        <TextBlock Margin="0,1.5,6,0" Text="风华正猫 恒" />
-                        <TextBlock Margin="0,1.5,6,0" Text="FiTrWOB53" />
-                        <TextBlock Margin="0,1.5,6,0" Text="暮冥official" />
-                        <TextBlock Margin="0,1.5,6,0" Text="🍀一缕阳光" />
-                        <TextBlock Margin="0,1.5,6,0" Text="乌龟的_黑头" />
-                        <TextBlock Margin="0,1.5,6,0" Text="NWXSXWN" />
-                        <TextBlock Margin="0,1.5,6,0" Text="wIpH9kxhg" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Scattered白" />
-                        <TextBlock Margin="0,1.5,6,0" Text="HomesIsFar" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Wuking022" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Asphyxiaful" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Vangoghaa" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Mr.尼古拉斯" />
-                        <TextBlock Margin="0,1.5,6,0" Text="BrittleShark" />
-                        <TextBlock Margin="0,1.5,6,0" Text="yanmuyuan" />
-                        <TextBlock Margin="0,1.5,6,0" Text="RoyalPower" />
-                        <TextBlock Margin="0,1.5,6,0" Text="新空Newsky" />
-                        <TextBlock Margin="0,1.5,6,0" Text="LrisMirabilis" />
-                        <TextBlock Margin="0,1.5,6,0" Text="2061316363" />
-                        <TextBlock Margin="0,1.5,6,0" Text="FurryFanson" />
-                        <TextBlock Margin="0,1.5,6,0" Text="国窖ao_li_ao" />
-                        <TextBlock Margin="0,1.5,6,0" Text="C.肥宅快乐水" />
-                        <TextBlock Margin="0,1.5,6,0" Text="xubo100511" />
-                        <TextBlock Margin="0,1.5,6,0" Text="神狐_Godfox" />
-                        <TextBlock Margin="0,1.5,6,0" Text="oooo123123" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小阿鬼下大饭" />
-                        <TextBlock Margin="0,1.5,6,0" Text="月下独酌的猫" />
-                        <TextBlock Margin="0,1.5,6,0" Text="IncredibleYu" />
-                        <TextBlock Margin="0,1.5,6,0" Text="收取人间快乐" />
-                        <TextBlock Margin="0,1.5,6,0" Text="暴雪魔法巨龙" />
-                        <TextBlock Margin="0,1.5,6,0" Text="分かリません" />
-                        <TextBlock Margin="0,1.5,6,0" Text="炸鱼与狗修金" />
-                        <TextBlock Margin="0,1.5,6,0" Text="又中他人一计" />
-                        <TextBlock Margin="0,1.5,6,0" Text="STEFAN8196" />
-                        <TextBlock Margin="0,1.5,6,0" Text="睁眼睡不着觉" />
-                        <TextBlock Margin="0,1.5,6,0" Text="阿尔卑斯的风" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小赵能吃能喝" />
-                        <TextBlock Margin="0,1.5,6,0" Text="摸鱼混日真菌" />
-                        <TextBlock Margin="0,1.5,6,0" Text="维他命柠檬茶" />
-                        <TextBlock Margin="0,1.5,6,0" Text="一个真正的鳗" />
-                        <TextBlock Margin="0,1.5,6,0" Text="炸天帮古尘沙" />
-                        <TextBlock Margin="0,1.5,6,0" Text="史上最甜的躯" />
-                        <TextBlock Margin="0,1.5,6,0" Text="你叫什么名字" />
-                        <TextBlock Margin="0,1.5,6,0" Text="奈亚拉托提普" />
-                        <TextBlock Margin="0,1.5,6,0" Text="名譽殺死武士" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Lyt_IT Studio" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Atozaxiomin" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Dejavu_0202" />
-                        <TextBlock Margin="0,1.5,6,0" Text="CCJACKMAN" />
-                        <TextBlock Margin="0,1.5,6,0" Text="SyngoZeenLi" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Mr.Aloe Vera" />
-                        <TextBlock Margin="0,1.5,6,0" Text="♢糖酱5217♢" />
-                        <TextBlock Margin="0,1.5,6,0" Text="WANGZIONE" />
-                        <TextBlock Margin="0,1.5,6,0" Text="TearWindBell" />
-                        <TextBlock Margin="0,1.5,6,0" Text="守护最好的mc" />
-                        <TextBlock Margin="0,1.5,6,0" Text="TranquilGlow" />
-                        <TextBlock Margin="0,1.5,6,0" Text="chenzhiyu520" />
-                        <TextBlock Margin="0,1.5,6,0" Text="L0VESitonggg" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ClearL0ve7777" />
-                        <TextBlock Margin="0,1.5,6,0" Text="🎾     🎾     🎾" />
-                        <TextBlock Margin="0,1.5,6,0" Text="雨夜带刀不带伞" />
-                        <TextBlock Margin="0,1.5,6,0" Text="有船的少年与海" />
-                        <TextBlock Margin="0,1.5,6,0" Text="星空中吹来的风" />
-                        <TextBlock Margin="0,1.5,6,0" Text="深院尘稀书韵雅" />
-                        <TextBlock Margin="0,1.5,6,0" Text="空恋大魔女yuki" />
-                        <TextBlock Margin="0,1.5,6,0" Text="名字是個好東西" />
-                        <TextBlock Margin="0,1.5,6,0" Text="叱咤月海鱼鱼猫" />
-                        <TextBlock Margin="0,1.5,6,0" Text="苔藓块速访问子" />
-                        <TextBlock Margin="0,1.5,6,0" Text="北湖龙哥的应该" />
-                        <TextBlock Margin="0,1.5,6,0" Text="你脸怎么红红的" />
-                        <TextBlock Margin="0,1.5,6,0" Text="你好曾经的少年" />
-                        <TextBlock Margin="0,1.5,6,0" Text="哥伦比亚大蠊W" />
-                        <TextBlock Margin="0,1.5,6,0" Text="你我山后不相逢" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Tokyoboy0701" />
-                        <TextBlock Margin="0,1.5,6,0" Text="AnEvilPancake" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Despicable me" />
-                        <TextBlock Margin="0,1.5,6,0" Text="UgoTombari80" />
-                        <TextBlock Margin="0,1.5,6,0" Text="starskysunlight" />
-                        <TextBlock Margin="0,1.5,6,0" Text="xiaozhaoDOGE" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Non Respicere_" />
-                        <TextBlock Margin="0,1.5,6,0" Text="PurplePuffCake" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Cookycookyi🌙" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Gefallene Engel" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Abandoned丶梦" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ElamrUranusDay" />
-                        <TextBlock Margin="0,1.5,6,0" Text="新鲜哥(暗示版)" />
-                        <TextBlock Margin="0,1.5,6,0" Text="从你的全世界路过" />
-                        <TextBlock Margin="0,1.5,6,0" Text="须臾山中棺林见晴" />
-                        <TextBlock Margin="0,1.5,6,0" Text="无害性质的烈焰人" />
-                        <TextBlock Margin="0,1.5,6,0" Text="順著海風找不到海" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Bilibili_Z2WLGSG" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ChewingGum233" />
-                        <TextBlock Margin="0,1.5,6,0" Text="Ms.Right Of MrXu" />
-                        <TextBlock Margin="0,1.5,6,0" Text="孙嘉昊まごかひろし" />
-                        <TextBlock Margin="0,1.5,6,0" Text="为什么要偷我的外卖" />
-                        <TextBlock Margin="0,1.5,6,0" Text="是男人就喝刺客魔药" />
-                        <TextBlock Margin="0,1.5,6,0" Text="小熊软糖(变硬版)" />
-                        <TextBlock Margin="0,1.5,6,0" Text="这次就让我来爱你吧" />
-                        <TextBlock Margin="0,1.5,6,0" Text="guaiguaibushuijiao" />
-                        <TextBlock Margin="0,1.5,6,0" Text="阿伟阿伟想要知道一切" />
-                        <TextBlock Margin="0,1.5,6,0" Text="AAA建材老安(doge)" />
-                        <TextBlock Margin="0,1.5,6,0" Text="￴￴ ￴￴此恨绵绵无绝期" />
-                        <TextBlock Margin="0,1.5,6,0" Text="[email protected]" />
-                        <TextBlock Margin="0,1.5,6,0" Text="牧尘瑞斯(muchenruisi)" />
-                        <TextBlock Margin="0,1.5,6,0" Text="你家猫出门散步被我捡了" />
-                        <TextBlock Margin="0,1.5,6,0" Text="逍遥游丶叮当猫丶宁静之海" />
-                        <TextBlock Margin="0,1.5,6,0" Text="ㅤㅤㅤ꧁€€€亿只pvp€€€꧂" />
+                        <TextBlock Margin="0,1.5,6,0" Text="沨旻泽" />
+                        <TextBlock Margin="0,1.5,6,0" Text="李睿洋" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Frutaa" />
+                        <TextBlock Margin="0,1.5,6,0" Text="饱之维" />
+                        <TextBlock Margin="0,1.5,6,0" Text="刘啥啊" />
+                        <TextBlock Margin="0,1.5,6,0" Text="鼻涕菌" />
+                        <TextBlock Margin="0,1.5,6,0" Text="熙镜樱" />
+                        <TextBlock Margin="0,1.5,6,0" Text="不知道" />
+                        <TextBlock Margin="0,1.5,6,0" Text="好棒蛇" />
+                        <TextBlock Margin="0,1.5,6,0" Text="苏幕花" />
+                        <TextBlock Margin="0,1.5,6,0" Text="苏眠眩" />
+                        <TextBlock Margin="0,1.5,6,0" Text="享长生" />
+                        <TextBlock Margin="0,1.5,6,0" Text="黄锦坤" />
+                        <TextBlock Margin="0,1.5,6,0" Text="缄默龙" />
+                        <TextBlock Margin="0,1.5,6,0" Text="楽嘞嘞" />
+                        <TextBlock Margin="0,1.5,6,0" Text="斯科达" />
+                        <TextBlock Margin="0,1.5,6,0" Text="的逻辑" />
+                        <TextBlock Margin="0,1.5,6,0" Text="新叶叶" />
+                        <TextBlock Margin="0,1.5,6,0" Text="四月初" />
+                        <TextBlock Margin="0,1.5,6,0" Text="梦霙雪" />
+                        <TextBlock Margin="0,1.5,6,0" Text="夜不收" />
+                        <TextBlock Margin="0,1.5,6,0" Text="97ang" />
+                        <TextBlock Margin="0,1.5,6,0" Text="马天癸" />
+                        <TextBlock Margin="0,1.5,6,0" Text="云野寂" />
+                        <TextBlock Margin="0,1.5,6,0" Text="金木研" />
+                        <TextBlock Margin="0,1.5,6,0" Text="韩雨宸" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Scoop" />
+                        <TextBlock Margin="0,1.5,6,0" Text="绘梨衣" />
+                        <TextBlock Margin="0,1.5,6,0" Text="夜小辞" />
+                        <TextBlock Margin="0,1.5,6,0" Text="明月奴" />
+                        <TextBlock Margin="0,1.5,6,0" Text="光和热" />
+                        <TextBlock Margin="0,1.5,6,0" Text="湫某辞" />
+                        <TextBlock Margin="0,1.5,6,0" Text="大哈操" />
+                        <TextBlock Margin="0,1.5,6,0" Text="顾東凡" />
+                        <TextBlock Margin="0,1.5,6,0" Text="云之梦" />
+                        <TextBlock Margin="0,1.5,6,0" Text="叶云翳" />
+                        <TextBlock Margin="0,1.5,6,0" Text="爱钱钱" />
+                        <TextBlock Margin="0,1.5,6,0" Text="oaken" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小小球" />
+                        <TextBlock Margin="0,1.5,6,0" Text="天羽煜" />
+                        <TextBlock Margin="0,1.5,6,0" Text="UN_41" />
+                        <TextBlock Margin="0,1.5,6,0" Text="bguae" />
+                        <TextBlock Margin="0,1.5,6,0" Text="hjsa30" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Chpoy" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Ander." />
+                        <TextBlock Margin="0,1.5,6,0" Text="muzsh" />
+                        <TextBlock Margin="0,1.5,6,0" Text="gyj120" />
+                        <TextBlock Margin="0,1.5,6,0" Text="IC1805" />
+                        <TextBlock Margin="0,1.5,6,0" Text="logical" />
+                        <TextBlock Margin="0,1.5,6,0" Text="bit...bit" />
+                        <TextBlock Margin="0,1.5,6,0" Text="N0rdiK" />
+                        <TextBlock Margin="0,1.5,6,0" Text="techzjc" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Keiskei" />
+                        <TextBlock Margin="0,1.5,6,0" Text="EMO龚" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Thgink" />
+                        <TextBlock Margin="0,1.5,6,0" Text="forever" />
+                        <TextBlock Margin="0,1.5,6,0" Text="manbo" />
+                        <TextBlock Margin="0,1.5,6,0" Text="114514" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Gemini" />
+                        <TextBlock Margin="0,1.5,6,0" Text="MAL.鱼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="114514" />
+                        <TextBlock Margin="0,1.5,6,0" Text="114514" />
+                        <TextBlock Margin="0,1.5,6,0" Text="mneng" />
+                        <TextBlock Margin="0,1.5,6,0" Text="YEYEYE" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Phuket" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Kabuto" />
+                        <TextBlock Margin="0,1.5,6,0" Text=".懒子:(" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ZyR3Xx" />
+                        <TextBlock Margin="0,1.5,6,0" Text="DrQuin" />
+                        <TextBlock Margin="0,1.5,6,0" Text="sund3a" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Snowill" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Charile." />
+                        <TextBlock Margin="0,1.5,6,0" Text="夜未央S" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Esykaul" />
+                        <TextBlock Margin="0,1.5,6,0" Text="粑8博弈" />
+                        <TextBlock Margin="0,1.5,6,0" Text="GY9965" />
+                        <TextBlock Margin="0,1.5,6,0" Text="果冻1号" />
+                        <TextBlock Margin="0,1.5,6,0" Text="chicken" />
+                        <TextBlock Margin="0,1.5,6,0" Text="阿毛mjy" />
+                        <TextBlock Margin="0,1.5,6,0" Text="CRF1SH" />
+                        <TextBlock Margin="0,1.5,6,0" Text="EDream" />
+                        <TextBlock Margin="0,1.5,6,0" Text="-Guard-" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Stridder" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Lennyes" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Aspirike" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Paprosa" />
+                        <TextBlock Margin="0,1.5,6,0" Text="weather" />
+                        <TextBlock Margin="0,1.5,6,0" Text="qwptpw" />
+                        <TextBlock Margin="0,1.5,6,0" Text="RedLink" />
+                        <TextBlock Margin="0,1.5,6,0" Text="longday" />
+                        <TextBlock Margin="0,1.5,6,0" Text="wwwww" />
+                        <TextBlock Margin="0,1.5,6,0" Text="我不在线" />
+                        <TextBlock Margin="0,1.5,6,0" Text="脏仔牛奶" />
+                        <TextBlock Margin="0,1.5,6,0" Text="贤者摸鱼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="只见伊人" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小鱼干儿" />
+                        <TextBlock Margin="0,1.5,6,0" Text="逆浪千秋" />
+                        <TextBlock Margin="0,1.5,6,0" Text="南宫若兮" />
+                        <TextBlock Margin="0,1.5,6,0" Text="二十四誓" />
+                        <TextBlock Margin="0,1.5,6,0" Text="浮世三千" />
+                        <TextBlock Margin="0,1.5,6,0" Text="逐兔寻鲸" />
+                        <TextBlock Margin="0,1.5,6,0" Text="氮气炸锅" />
+                        <TextBlock Margin="0,1.5,6,0" Text="爱莉希雅" />
+                        <TextBlock Margin="0,1.5,6,0" Text="容我三思" />
+                        <TextBlock Margin="0,1.5,6,0" Text="正经云泽" />
+                        <TextBlock Margin="0,1.5,6,0" Text="不会起名" />
+                        <TextBlock Margin="0,1.5,6,0" Text="肆拾贰号" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小茵fans" />
+                        <TextBlock Margin="0,1.5,6,0" Text="杰克刀哥" />
+                        <TextBlock Margin="0,1.5,6,0" Text="风止于夏" />
+                        <TextBlock Margin="0,1.5,6,0" Text="汇流成莹" />
+                        <TextBlock Margin="0,1.5,6,0" Text="霜灵雾屿" />
+                        <TextBlock Margin="0,1.5,6,0" Text="依宸不在" />
+                        <TextBlock Margin="0,1.5,6,0" Text="繁星闪音" />
+                        <TextBlock Margin="0,1.5,6,0" Text="萧萧轻语" />
+                        <TextBlock Margin="0,1.5,6,0" Text="文文新闻" />
+                        <TextBlock Margin="0,1.5,6,0" Text="耶日霍夫" />
+                        <TextBlock Margin="0,1.5,6,0" Text="游鹤神归" />
+                        <TextBlock Margin="0,1.5,6,0" Text="加央顿珠" />
+                        <TextBlock Margin="0,1.5,6,0" Text="不讲武德" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Xiaotian" />
+                        <TextBlock Margin="0,1.5,6,0" Text="雨夜渔阳" />
+                        <TextBlock Margin="0,1.5,6,0" Text="冻天星梦" />
+                        <TextBlock Margin="0,1.5,6,0" Text="醉歌梦凌" />
+                        <TextBlock Margin="0,1.5,6,0" Text="一只沙貂" />
+                        <TextBlock Margin="0,1.5,6,0" Text="高山炎炎" />
+                        <TextBlock Margin="0,1.5,6,0" Text="桐树生花" />
+                        <TextBlock Margin="0,1.5,6,0" Text="马赛克娘" />
+                        <TextBlock Margin="0,1.5,6,0" Text="瓦尔基里" />
+                        <TextBlock Margin="0,1.5,6,0" Text="旧事酒浓" />
+                        <TextBlock Margin="0,1.5,6,0" Text="奇迹于你" />
+                        <TextBlock Margin="0,1.5,6,0" Text="北宋供奉" />
+                        <TextBlock Margin="0,1.5,6,0" Text="粪海狂蛆" />
+                        <TextBlock Margin="0,1.5,6,0" Text="暮雪沉香" />
+                        <TextBlock Margin="0,1.5,6,0" Text="领袖凉生" />
+                        <TextBlock Margin="0,1.5,6,0" Text="欧气虹吸" />
+                        <TextBlock Margin="0,1.5,6,0" Text="饿性循环" />
+                        <TextBlock Margin="0,1.5,6,0" Text="白灼百叶" />
+                        <TextBlock Margin="0,1.5,6,0" Text="竹林提酒" />
+                        <TextBlock Margin="0,1.5,6,0" Text="黎月红夕" />
+                        <TextBlock Margin="0,1.5,6,0" Text="天下无双" />
+                        <TextBlock Margin="0,1.5,6,0" Text="四月喝茶" />
+                        <TextBlock Margin="0,1.5,6,0" Text="vx:久念" />
+                        <TextBlock Margin="0,1.5,6,0" Text="咫尺之遥" />
+                        <TextBlock Margin="0,1.5,6,0" Text="谁知道喽" />
+                        <TextBlock Margin="0,1.5,6,0" Text="和光同尘" />
+                        <TextBlock Margin="0,1.5,6,0" Text="琉璃柏影" />
+                        <TextBlock Margin="0,1.5,6,0" Text="白鸢鲸落" />
+                        <TextBlock Margin="0,1.5,6,0" Text="陌刀云一" />
+                        <TextBlock Margin="0,1.5,6,0" Text="(=^x^=)" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Milkyink" />
+                        <TextBlock Margin="0,1.5,6,0" Text="houteng" />
+                        <TextBlock Margin="0,1.5,6,0" Text="MiaoTvT" />
+                        <TextBlock Margin="0,1.5,6,0" Text="是黎明Ya" />
+                        <TextBlock Margin="0,1.5,6,0" Text="IcassavaI" />
+                        <TextBlock Margin="0,1.5,6,0" Text="zgyyyyyy" />
+                        <TextBlock Margin="0,1.5,6,0" Text="無WuAD" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小鹅_XEE" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Naroulta" />
+                        <TextBlock Margin="0,1.5,6,0" Text="lazeshen" />
+                        <TextBlock Margin="0,1.5,6,0" Text="VVVerniy" />
+                        <TextBlock Margin="0,1.5,6,0" Text="PoiliPoili" />
+                        <TextBlock Margin="0,1.5,6,0" Text="777seese" />
+                        <TextBlock Margin="0,1.5,6,0" Text=" 脖子右拧" />
+                        <TextBlock Margin="0,1.5,6,0" Text="User9075" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Bai_Yang" />
+                        <TextBlock Margin="0,1.5,6,0" Text="平凡-仁友" />
+                        <TextBlock Margin="0,1.5,6,0" Text="bbbbben" />
+                        <TextBlock Margin="0,1.5,6,0" Text="3355411²" />
+                        <TextBlock Margin="0,1.5,6,0" Text="boluoluo" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Marming" />
+                        <TextBlock Margin="0,1.5,6,0" Text="雾眠Reko" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Sevenfan" />
+                        <TextBlock Margin="0,1.5,6,0" Text="114514sir" />
+                        <TextBlock Margin="0,1.5,6,0" Text="忆恩sama" />
+                        <TextBlock Margin="0,1.5,6,0" Text="InertStew" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小沉Chen" />
+                        <TextBlock Margin="0,1.5,6,0" Text="断网没mu" />
+                        <TextBlock Margin="0,1.5,6,0" Text="THOPING" />
+                        <TextBlock Margin="0,1.5,6,0" Text="EXcloudZ" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Leisurelyz" />
+                        <TextBlock Margin="0,1.5,6,0" Text="white白鸽" />
+                        <TextBlock Margin="0,1.5,6,0" Text="有用的小B" />
+                        <TextBlock Margin="0,1.5,6,0" Text="GKIGVHJJ" />
+                        <TextBlock Margin="0,1.5,6,0" Text="YMonody" />
+                        <TextBlock Margin="0,1.5,6,0" Text="历战b三狼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="DHSGXKL" />
+                        <TextBlock Margin="0,1.5,6,0" Text="执意追风..." />
+                        <TextBlock Margin="0,1.5,6,0" Text="ZMMMM" />
+                        <TextBlock Margin="0,1.5,6,0" Text="sensei425" />
+                        <TextBlock Margin="0,1.5,6,0" Text="aslillusory" />
+                        <TextBlock Margin="0,1.5,6,0" Text="fjh321008" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ai_114514" />
+                        <TextBlock Margin="0,1.5,6,0" Text="BlackGary" />
+                        <TextBlock Margin="0,1.5,6,0" Text="MoFu莫孚" />
+                        <TextBlock Margin="0,1.5,6,0" Text="gggg1234" />
+                        <TextBlock Margin="0,1.5,6,0" Text="-雾里看星-" />
+                        <TextBlock Margin="0,1.5,6,0" Text="R2hyb3Ro" />
+                        <TextBlock Margin="0,1.5,6,0" Text="暮幽&amp;星辰" />
+                        <TextBlock Margin="0,1.5,6,0" Text="DoorDoor" />
+                        <TextBlock Margin="0,1.5,6,0" Text="乄罒丶灬彡" />
+                        <TextBlock Margin="0,1.5,6,0" Text="众所又周知" />
+                        <TextBlock Margin="0,1.5,6,0" Text="一小片雨霖" />
+                        <TextBlock Margin="0,1.5,6,0" Text="爱游戏的狼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Smile_sink" />
+                        <TextBlock Margin="0,1.5,6,0" Text="不浇会枯花" />
+                        <TextBlock Margin="0,1.5,6,0" Text="想喝冰可乐" />
+                        <TextBlock Margin="0,1.5,6,0" Text="残阳墨雨柒" />
+                        <TextBlock Margin="0,1.5,6,0" Text="忘却的旋律" />
+                        <TextBlock Margin="0,1.5,6,0" Text="迪奥的迪克" />
+                        <TextBlock Margin="0,1.5,6,0" Text="封于修不修" />
+                        <TextBlock Margin="0,1.5,6,0" Text="山海不可平" />
+                        <TextBlock Margin="0,1.5,6,0" Text="梦に逢う夜" />
+                        <TextBlock Margin="0,1.5,6,0" Text="被遗弃的猫" />
+                        <TextBlock Margin="0,1.5,6,0" Text="FalseSleep" />
+                        <TextBlock Margin="0,1.5,6,0" Text="消失的狐狸" />
+                        <TextBlock Margin="0,1.5,6,0" Text="折戟唤沉沙" />
+                        <TextBlock Margin="0,1.5,6,0" Text="神秘车万厨" />
+                        <TextBlock Margin="0,1.5,6,0" Text="葡萄成熟时" />
+                        <TextBlock Margin="0,1.5,6,0" Text="微观粒子号" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ㅤ明月入怀" />
+                        <TextBlock Margin="0,1.5,6,0" Text="没有名字哈" />
+                        <TextBlock Margin="0,1.5,6,0" Text="帝皇的货币" />
+                        <TextBlock Margin="0,1.5,6,0" Text="暗黑卡卡西" />
+                        <TextBlock Margin="0,1.5,6,0" Text="月掩星未眠" />
+                        <TextBlock Margin="0,1.5,6,0" Text="老登吃小登" />
+                        <TextBlock Margin="0,1.5,6,0" Text="星辰与月亮" />
+                        <TextBlock Margin="0,1.5,6,0" Text="想吃烤冷面" />
+                        <TextBlock Margin="0,1.5,6,0" Text="此玉却彼风" />
+                        <TextBlock Margin="0,1.5,6,0" Text="蛋炒饭大王" />
+                        <TextBlock Margin="0,1.5,6,0" Text="青岚丶悠远" />
+                        <TextBlock Margin="0,1.5,6,0" Text="玖久九鸠纠" />
+                        <TextBlock Margin="0,1.5,6,0" Text="无聊的爱莉" />
+                        <TextBlock Margin="0,1.5,6,0" Text="希希爱睡觉" />
+                        <TextBlock Margin="0,1.5,6,0" Text="六面三倍速" />
+                        <TextBlock Margin="0,1.5,6,0" Text="orangexixi" />
+                        <TextBlock Margin="0,1.5,6,0" Text="月下如墨黑" />
+                        <TextBlock Margin="0,1.5,6,0" Text="此心无一事" />
+                        <TextBlock Margin="0,1.5,6,0" Text="烂鱼一条线" />
+                        <TextBlock Margin="0,1.5,6,0" Text="欲买桂花酒" />
+                        <TextBlock Margin="0,1.5,6,0" Text="慢悠悠报表" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Myst-FOEY" />
+                        <TextBlock Margin="0,1.5,6,0" Text="qaz155808" />
+                        <TextBlock Margin="0,1.5,6,0" Text="289775340" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Executarea" />
+                        <TextBlock Margin="0,1.5,6,0" Text="rosewhisky" />
+                        <TextBlock Margin="0,1.5,6,0" Text="mreaaaaay" />
+                        <TextBlock Margin="0,1.5,6,0" Text="GreyFalcon" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Neko_2333" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Stellar_Red" />
+                        <TextBlock Margin="0,1.5,6,0" Text="陶纸Mr.Tao" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Hhhsalfkhs" />
+                        <TextBlock Margin="0,1.5,6,0" Text="地灵989898" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小啊北Devo" />
+                        <TextBlock Margin="0,1.5,6,0" Text="  花落碎人心" />
+                        <TextBlock Margin="0,1.5,6,0" Text="TravellerISX" />
+                        <TextBlock Margin="0,1.5,6,0" Text="littlefive999" />
+                        <TextBlock Margin="0,1.5,6,0" Text="AliesMoctxi" />
+                        <TextBlock Margin="0,1.5,6,0" Text="EmmSUPER" />
+                        <TextBlock Margin="0,1.5,6,0" Text="DeathHunk" />
+                        <TextBlock Margin="0,1.5,6,0" Text="时时雨Sama" />
+                        <TextBlock Margin="0,1.5,6,0" Text="永远的Elysia" />
+                        <TextBlock Margin="0,1.5,6,0" Text="2127864647" />
+                        <TextBlock Margin="0,1.5,6,0" Text="yu🐟 ζ°)))彡" />
+                        <TextBlock Margin="0,1.5,6,0" Text="COImos071_" />
+                        <TextBlock Margin="0,1.5,6,0" Text="QingYiLiang" />
+                        <TextBlock Margin="0,1.5,6,0" Text="诺万_Norvan" />
+                        <TextBlock Margin="0,1.5,6,0" Text="amazingball" />
+                        <TextBlock Margin="0,1.5,6,0" Text="边骂边摆的驴" />
+                        <TextBlock Margin="0,1.5,6,0" Text="万物不及欣然" />
+                        <TextBlock Margin="0,1.5,6,0" Text="桓桓在等高铁" />
+                        <TextBlock Margin="0,1.5,6,0" Text="随便写的名字" />
+                        <TextBlock Margin="0,1.5,6,0" Text="我就是萝莉控" />
+                        <TextBlock Margin="0,1.5,6,0" Text="秦大人工作室" />
+                        <TextBlock Margin="0,1.5,6,0" Text="爱村民的小春" />
+                        <TextBlock Margin="0,1.5,6,0" Text="泰拉萌新小王" />
+                        <TextBlock Margin="0,1.5,6,0" Text="大貓君小貓君" />
+                        <TextBlock Margin="0,1.5,6,0" Text="画下梦的羽衣" />
+                        <TextBlock Margin="0,1.5,6,0" Text="枫叶下的沉默" />
+                        <TextBlock Margin="0,1.5,6,0" Text="欢愉不是花鱼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="这算个什么鬼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="你无聊的队友" />
+                        <TextBlock Margin="0,1.5,6,0" Text="壬彐木公木木" />
+                        <TextBlock Margin="0,1.5,6,0" Text="口渴了不喝水" />
+                        <TextBlock Margin="0,1.5,6,0" Text="全网最善之人" />
+                        <TextBlock Margin="0,1.5,6,0" Text="星核猎手银狼" />
+                        <TextBlock Margin="0,1.5,6,0" Text="凯文卡斯兰娜" />
+                        <TextBlock Margin="0,1.5,6,0" Text="happy?无聊" />
+                        <TextBlock Margin="0,1.5,6,0" Text="殷殷殷!!!" />
+                        <TextBlock Margin="0,1.5,6,0" Text="打泡泡SAMA" />
+                        <TextBlock Margin="0,1.5,6,0" Text="猫的龙车吸引" />
+                        <TextBlock Margin="0,1.5,6,0" Text="谁念桥边红药" />
+                        <TextBlock Margin="0,1.5,6,0" Text="centuryplant" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Suber_agiley" />
+                        <TextBlock Margin="0,1.5,6,0" Text="NoBody_MO" />
+                        <TextBlock Margin="0,1.5,6,0" Text="M的CC_5b67" />
+                        <TextBlock Margin="0,1.5,6,0" Text="gaomanman" />
+                        <TextBlock Margin="0,1.5,6,0" Text="satorikomeiji" />
+                        <TextBlock Margin="0,1.5,6,0" Text="元初_Nanana" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小喜出品1239" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Changephon" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Emo真的emo" />
+                        <TextBlock Margin="0,1.5,6,0" Text="路过一下的lsp" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Nakano Nino" />
+                        <TextBlock Margin="0,1.5,6,0" Text="minecraft风竹" />
+                        <TextBlock Margin="0,1.5,6,0" Text="huangweijian" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Kecdl_Chacha" />
+                        <TextBlock Margin="0,1.5,6,0" Text="CrimsonCloud" />
+                        <TextBlock Margin="0,1.5,6,0" Text="minecraftac11" />
+                        <TextBlock Margin="0,1.5,6,0" Text="一只可爱的ss猹" />
+                        <TextBlock Margin="0,1.5,6,0" Text="黑煤球第一帕克" />
+                        <TextBlock Margin="0,1.5,6,0" Text="qq1967131327" />
+                        <TextBlock Margin="0,1.5,6,0" Text="清清娴娴哆快乐" />
+                        <TextBlock Margin="0,1.5,6,0" Text="地表最强妹妹头" />
+                        <TextBlock Margin="0,1.5,6,0" Text="半世琉璃倾城梦" />
+                        <TextBlock Margin="0,1.5,6,0" Text="思念最是飞雪时" />
+                        <TextBlock Margin="0,1.5,6,0" Text="做人要脑洞大开" />
+                        <TextBlock Margin="0,1.5,6,0" Text="正义警官足立透" />
+                        <TextBlock Margin="0,1.5,6,0" Text="夜空中最亮的星" />
+                        <TextBlock Margin="0,1.5,6,0" Text="正义哥布林二号" />
+                        <TextBlock Margin="0,1.5,6,0" Text="大王叫我去做饭" />
+                        <TextBlock Margin="0,1.5,6,0" Text="泪水打湿泪水湿" />
+                        <TextBlock Margin="0,1.5,6,0" Text="みやぐにあかり" />
+                        <TextBlock Margin="0,1.5,6,0" Text="苇名剑圣有地绫" />
+                        <TextBlock Margin="0,1.5,6,0" Text="SummerAlway_" />
+                        <TextBlock Margin="0,1.5,6,0" Text="CHENDASHUAI" />
+                        <TextBlock Margin="0,1.5,6,0" Text="柚子_grapefruit_" />
+                        <TextBlock Margin="0,1.5,6,0" Text="天下第一可爱芝麻" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Hendestroyer149" />
+                        <TextBlock Margin="0,1.5,6,0" Text="一名热爱mc的玩家" />
+                        <TextBlock Margin="0,1.5,6,0" Text="过年啦(๑ᵔ⌔ᵔ๑)ノ🧨" />
+                        <TextBlock Margin="0,1.5,6,0" Text="星ベ空(Xingkong)" />
+                        <TextBlock Margin="0,1.5,6,0" Text="WerewolfwolfyXD" />
+                        <TextBlock Margin="0,1.5,6,0" Text="All systems normal" />
+                        <TextBlock Margin="0,1.5,6,0" Text="传奇幻想乡冰之勇者" />
+                        <TextBlock Margin="0,1.5,6,0" Text="NepentheAria-ゆせ" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Mercuryearedrabbit" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Exeller(没钱的腐竹)" />
+                        <TextBlock Margin="0,1.5,6,0" Text="荒漠迷城第一突破手凑友希娜" />
+                        <TextBlock Margin="0,1.5,6,0" Text="我*:《蚊子》【*】亖**蚊子引雷" />
                     </WrapPanel>
                     </WrapPanel>
                     <Grid Height="35">
                     <Grid Height="35">
                         <Grid.ColumnDefinitions>
                         <Grid.ColumnDefinitions>

+ 5 - 5
Plain Craft Launcher 2/Pages/PageOther/PageOtherHelp.xaml.vb

@@ -144,13 +144,13 @@
                 If Not Entry.ShowInSearch OrElse (Val(VersionBranchCode) <> 50 AndAlso Not Entry.ShowInSnapshot) Then Continue For
                 If Not Entry.ShowInSearch OrElse (Val(VersionBranchCode) <> 50 AndAlso Not Entry.ShowInSnapshot) Then Continue For
                 QueryList.Add(New SearchEntry(Of HelpEntry) With {
                 QueryList.Add(New SearchEntry(Of HelpEntry) With {
                     .Item = Entry,
                     .Item = Entry,
-                    .SearchSource = New List(Of KeyValuePair(Of String, Double)) From {
-                        New KeyValuePair(Of String, Double)(Entry.Title, 1),
-                        New KeyValuePair(Of String, Double)(Entry.Desc, 0.5),
-                        New KeyValuePair(Of String, Double)(Entry.Search, 1.5)
+                    .SearchSource = New List(Of SearchSource) From {
+                        New SearchSource(Entry.Title, 1),
+                        New SearchSource(Entry.Desc, 0.5),
+                        New SearchSource(Entry.Search, 1.5)
                     }
                     }
                 })
                 })
-                'New KeyValuePair(Of String, Double)(If(Entry.IsEvent, If(Entry.EventData, ""), Entry.XamlContent), 0.2)
+                'New SearchSource(If(Entry.IsEvent, If(Entry.EventData, ""), Entry.XamlContent), 0.2)
             Next
             Next
             '进行搜索,构造列表
             '进行搜索,构造列表
             Dim SearchResult = Search(QueryList, SearchBox.Text, MaxBlurCount:=5, MinBlurSimilarity:=0.08)
             Dim SearchResult = Search(QueryList, SearchBox.Text, MaxBlurCount:=5, MinBlurSimilarity:=0.08)

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

@@ -101,12 +101,13 @@
         {"LaunchArgumentWindowHeight", New SetupEntry(480)},
         {"LaunchArgumentWindowHeight", New SetupEntry(480)},
         {"LaunchArgumentWindowType", New SetupEntry(1)},
         {"LaunchArgumentWindowType", New SetupEntry(1)},
         {"LaunchArgumentRam", New SetupEntry(False, Source:=SetupSource.Registry)},
         {"LaunchArgumentRam", New SetupEntry(False, Source:=SetupSource.Registry)},
-        {"LaunchAdvanceJvm", New SetupEntry("-XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Djdk.lang.Process.allowAmbiguousCommands=true -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true")},
+        {"LaunchAdvanceJvm", New SetupEntry("-XX:-OmitStackTraceInFastThrow -Djdk.lang.Process.allowAmbiguousCommands=true -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true")},
         {"LaunchAdvanceGame", New SetupEntry("")},
         {"LaunchAdvanceGame", New SetupEntry("")},
         {"LaunchAdvanceRun", New SetupEntry("")},
         {"LaunchAdvanceRun", New SetupEntry("")},
         {"LaunchAdvanceRunWait", New SetupEntry(True)},
         {"LaunchAdvanceRunWait", New SetupEntry(True)},
         {"LaunchAdvanceDisableJLW", New SetupEntry(False)},
         {"LaunchAdvanceDisableJLW", New SetupEntry(False)},
         {"LaunchAdvanceGraphicCard", New SetupEntry(True, Source:=SetupSource.Registry)},
         {"LaunchAdvanceGraphicCard", New SetupEntry(True, Source:=SetupSource.Registry)},
+        {"LaunchAdvanceGC", New SetupEntry(1)},
         {"LaunchRamType", New SetupEntry(0)},
         {"LaunchRamType", New SetupEntry(0)},
         {"LaunchRamCustom", New SetupEntry(15)},
         {"LaunchRamCustom", New SetupEntry(15)},
         {"LinkLastAutoJoinInviteCode", New SetupEntry("", Source:=SetupSource.Registry)},
         {"LinkLastAutoJoinInviteCode", New SetupEntry("", Source:=SetupSource.Registry)},
@@ -180,6 +181,7 @@
         {"VersionAdvanceRunWait", New SetupEntry(True, Source:=SetupSource.Instance)},
         {"VersionAdvanceRunWait", New SetupEntry(True, Source:=SetupSource.Instance)},
         {"VersionAdvanceDisableJLW", New SetupEntry(False, Source:=SetupSource.Instance)},
         {"VersionAdvanceDisableJLW", New SetupEntry(False, Source:=SetupSource.Instance)},
         {"VersionAdvanceDisableModUpdate", New SetupEntry(False, Source:=SetupSource.Instance)},
         {"VersionAdvanceDisableModUpdate", New SetupEntry(False, Source:=SetupSource.Instance)},
+        {"VersionAdvanceGC", New SetupEntry(0, Source:=SetupSource.Instance)},
         {"VersionRamType", New SetupEntry(2, Source:=SetupSource.Instance)},
         {"VersionRamType", New SetupEntry(2, Source:=SetupSource.Instance)},
         {"VersionRamCustom", New SetupEntry(15, Source:=SetupSource.Instance)},
         {"VersionRamCustom", New SetupEntry(15, Source:=SetupSource.Instance)},
         {"VersionRamOptimize", New SetupEntry(0, Source:=SetupSource.Instance)},
         {"VersionRamOptimize", New SetupEntry(0, Source:=SetupSource.Instance)},
@@ -529,72 +531,57 @@
         FrmMain.ImgBack.Margin = New Thickness(-(Value + 1) / 1.8)
         FrmMain.ImgBack.Margin = New Thickness(-(Value + 1) / 1.8)
     End Sub
     End Sub
     Public Sub UiBackgroundSuit(Value As Integer)
     Public Sub UiBackgroundSuit(Value As Integer)
-        If IsNothing(FrmMain.ImgBack.Background) Then Return
-        Dim Width As Double = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
-        Dim Height As Double = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
+        If FrmMain.ImgBack.Background Is Nothing Then Return
+        Dim Brush As ImageBrush = CType(FrmMain.ImgBack.Background, ImageBrush)
         If Value = 0 Then
         If Value = 0 Then
             '智能:当图片较小时平铺,较大时适应
             '智能:当图片较小时平铺,较大时适应
-            If Width < FrmMain.PanMain.ActualWidth / 2 AndAlso Height < FrmMain.PanMain.ActualHeight / 2 Then
+            If Brush.ImageSource.Width < FrmMain.PanMain.ActualWidth / 2 AndAlso Brush.ImageSource.Height < FrmMain.PanMain.ActualHeight / 2 Then
                 Value = 4 '平铺
                 Value = 4 '平铺
             Else
             Else
                 Value = 2 '适应
                 Value = 2 '适应
             End If
             End If
         End If
         End If
-        CType(FrmMain.ImgBack.Background, ImageBrush).TileMode = TileMode.None
-        CType(FrmMain.ImgBack.Background, ImageBrush).Viewport = New Rect(0, 0, 1, 1)
-        CType(FrmMain.ImgBack.Background, ImageBrush).ViewportUnits = BrushMappingMode.RelativeToBoundingBox
+        Brush.Stretch = Stretch.UniformToFill
+        Brush.TileMode = TileMode.None
+        Brush.Viewport = New Rect(0, 0, 1, 1)
+        Brush.ViewportUnits = BrushMappingMode.RelativeToBoundingBox
         Select Case Value
         Select Case Value
-            Case 1 '居中
-                FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Center
-                FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Center
-                CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
-                FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
-                FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
             Case 2 '适应
             Case 2 '适应
-                FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Stretch
-                FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Stretch
-                CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.UniformToFill
-                FrmMain.ImgBack.Width = Double.NaN
-                FrmMain.ImgBack.Height = Double.NaN
             Case 3 '拉伸
             Case 3 '拉伸
-                FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Stretch
-                FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Stretch
-                CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.Fill
-                FrmMain.ImgBack.Width = Double.NaN
-                FrmMain.ImgBack.Height = Double.NaN
+                Brush.Stretch = Stretch.Fill
             Case 4 '平铺
             Case 4 '平铺
-                FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Stretch
-                FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Stretch
-                CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
-                CType(FrmMain.ImgBack.Background, ImageBrush).TileMode = TileMode.Tile
-                CType(FrmMain.ImgBack.Background, ImageBrush).Viewport = New Rect(0, 0, CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width, CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height)
-                CType(FrmMain.ImgBack.Background, ImageBrush).ViewportUnits = BrushMappingMode.Absolute
-                FrmMain.ImgBack.Width = Double.NaN
-                FrmMain.ImgBack.Height = Double.NaN
+                Brush.Stretch = Stretch.None
+                Brush.TileMode = TileMode.Tile
+                Brush.Viewport = New Rect(0, 0, Brush.ImageSource.Width, Brush.ImageSource.Height)
+                Brush.ViewportUnits = BrushMappingMode.Absolute
+
+            Case 1 '中
+                Brush.AlignmentX = AlignmentX.Center
+                Brush.AlignmentY = AlignmentY.Center
             Case 5 '左上
             Case 5 '左上
-                FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Left
-                FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Top
-                CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
-                FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
-                FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
+                Brush.AlignmentX = AlignmentX.Left
+                Brush.AlignmentY = AlignmentY.Top
             Case 6 '右上
             Case 6 '右上
-                FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Right
-                FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Top
-                CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
-                FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
-                FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
+                Brush.AlignmentX = AlignmentX.Right
+                Brush.AlignmentY = AlignmentY.Top
             Case 7 '左下
             Case 7 '左下
-                FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Left
-                FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Bottom
-                CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
-                FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
-                FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
+                Brush.AlignmentX = AlignmentX.Left
+                Brush.AlignmentY = AlignmentY.Bottom
             Case 8 '右下
             Case 8 '右下
-                FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Right
-                FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Bottom
-                CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
-                FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
-                FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
+                Brush.AlignmentX = AlignmentX.Right
+                Brush.AlignmentY = AlignmentY.Bottom
+            Case 9 '左
+                Brush.AlignmentX = AlignmentX.Left
+                Brush.AlignmentY = AlignmentY.Center
+            Case 10 '右
+                Brush.AlignmentX = AlignmentX.Right
+                Brush.AlignmentY = AlignmentY.Center
+            Case 11 '上
+                Brush.AlignmentX = AlignmentX.Center
+                Brush.AlignmentY = AlignmentY.Top
+            Case 12 '下
+                Brush.AlignmentX = AlignmentX.Center
+                Brush.AlignmentY = AlignmentY.Bottom
         End Select
         End Select
     End Sub
     End Sub
 
 

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

@@ -116,7 +116,7 @@
                     </Grid>
                     </Grid>
                 </StackPanel>
                 </StackPanel>
             </local:MyCard>
             </local:MyCard>
-            <local:MyCard Margin="0,0,0,15" Title="游戏内存">
+            <local:MyCard Margin="0,0,0,15" Title="内存分配">
                 <StackPanel Margin="25,40,25,15">
                 <StackPanel Margin="25,40,25,15">
                     <local:MyHint x:Name="LabRamWarn" Visibility="Visible" Text="32 位 Java 只能分配最多 1 GB 的内存。强烈建议换用 64 位的 Java!" Theme="Yellow" Margin="0,0,0,12" />
                     <local:MyHint x:Name="LabRamWarn" Visibility="Visible" Text="32 位 Java 只能分配最多 1 GB 的内存。强烈建议换用 64 位的 Java!" Theme="Yellow" Margin="0,0,0,12" />
                     <Grid Margin="0,0,0,3">
                     <Grid Margin="0,0,0,3">
@@ -231,6 +231,8 @@
                         <RowDefinition Height="9" />
                         <RowDefinition Height="9" />
                         <RowDefinition Height="28" />
                         <RowDefinition Height="28" />
                         <RowDefinition Height="Auto" />
                         <RowDefinition Height="Auto" />
+                        <RowDefinition Height="9" />
+                        <RowDefinition Height="28" />
                         <RowDefinition Height="Auto" />
                         <RowDefinition Height="Auto" />
                         <RowDefinition Height="Auto" />
                         <RowDefinition Height="Auto" />
                     </Grid.RowDefinitions>
                     </Grid.RowDefinitions>
@@ -249,13 +251,24 @@
                                  ToolTip="在 MC 启动前执行特定命令或程序,语法与 Windows 的命令提示符一致。&#xa;&#xa;你可以用替换标记来动态改变其内容或实现相对路径,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。例如:&#xa; · &quot;{verpath}test.exe&quot; :运行版本文件夹下的 test.exe 程序&#xa; · &quot;{java}java.exe&quot; -jar &quot;{verpath}test.jar&quot; :用 Java 运行版本文件夹下的 test.jar&#xa; · notepad &quot;{verindie}options.txt&quot; :使用记事本打开该版本的设置文件&#xa;&#xa;涉及路径的操作最好都打上双引号,以避免路径中的空格导致运行失败。&#xa;执行命令时,命令行所在的目录是当前的 .minecraft 文件夹。" />
                                  ToolTip="在 MC 启动前执行特定命令或程序,语法与 Windows 的命令提示符一致。&#xa;&#xa;你可以用替换标记来动态改变其内容或实现相对路径,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。例如:&#xa; · &quot;{verpath}test.exe&quot; :运行版本文件夹下的 test.exe 程序&#xa; · &quot;{java}java.exe&quot; -jar &quot;{verpath}test.jar&quot; :用 Java 运行版本文件夹下的 test.jar&#xa; · notepad &quot;{verindie}options.txt&quot; :使用记事本打开该版本的设置文件&#xa;&#xa;涉及路径的操作最好都打上双引号,以避免路径中的空格导致运行失败。&#xa;执行命令时,命令行所在的目录是当前的 .minecraft 文件夹。" />
                     <local:MyCheckBox Grid.Row="5" Grid.Column="1" x:Name="CheckAdvanceRunWait" Tag="LaunchAdvanceRunWait" Visibility="Collapsed"
                     <local:MyCheckBox Grid.Row="5" Grid.Column="1" x:Name="CheckAdvanceRunWait" Tag="LaunchAdvanceRunWait" Visibility="Collapsed"
                                   Text="等待命令执行完成后再继续启动" Margin="0,8,0,7" />
                                   Text="等待命令执行完成后再继续启动" Margin="0,8,0,7" />
-                    <StackPanel Margin="0,12,0,4" Grid.Row="6" Grid.ColumnSpan="2" HorizontalAlignment="Left">
+                    <TextBlock VerticalAlignment="Center" Grid.Row="7" HorizontalAlignment="Left" Text="内存管理" Margin="0,0,25,0" />
+                    <local:MyComboBox x:Name="ComboAdvanceGC" Grid.Row="7" Grid.ColumnSpan="2" Tag="LaunchAdvanceGC" Grid.Column="1">
+                        <local:MyComboBoxItem Content="尽量使用 ZGC(激进)"
+                                              ToolTipService.BetweenShowDelay="0" ToolTip="在 Java 21+ 使用分代 ZGC,20~15 使用非分代的 ZGC,14- 使用 G1GC。&#xa;在 Java 25+ 额外添加 -XX:+UseCompactObjectHeaders。&#xa;&#xa;覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
+                        <local:MyComboBoxItem Content="尽量使用分代 ZGC(平衡)" IsSelected="True"
+                                              ToolTipService.BetweenShowDelay="0" ToolTip="在 Java 21+ 使用分代 ZGC,20- 使用 G1GC。&#xa;在 Java 25+ 额外添加 -XX:+UseCompactObjectHeaders。&#xa;&#xa;覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
+                        <local:MyComboBoxItem Content="仅 G1GC"
+                                              ToolTipService.BetweenShowDelay="0" ToolTip="固定使用以下参数:&#xa;-XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M&#xa;&#xa;覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
+                        <local:MyComboBoxItem Content="不指定(可自定义)"
+                                              ToolTipService.BetweenShowDelay="0" ToolTip="不自动添加 GC 参数。&#xa;&#xa;仅当选择此项时,你可以在 “Java 虚拟机参数” 设置中手动添加 GC 参数。" />
+                    </local:MyComboBox>
+                    <StackPanel Margin="0,12,0,4" Grid.Row="8" Grid.ColumnSpan="2" HorizontalAlignment="Left">
                         <local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" x:Name="CheckAdvanceDisableJLW" Tag="LaunchAdvanceDisableJLW"
                         <local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" x:Name="CheckAdvanceDisableJLW" Tag="LaunchAdvanceDisableJLW"
                             ToolTipService.Placement="Right" ToolTip="PCL 会使用 Java Launch Wrapper 来修复老版本 Java 在中文路径下无法启动的问题。&#xa;如果这被反作弊拦截,或遇到其他问题,也可以将其关闭。" />
                             ToolTipService.Placement="Right" ToolTip="PCL 会使用 Java Launch Wrapper 来修复老版本 Java 在中文路径下无法启动的问题。&#xa;如果这被反作弊拦截,或遇到其他问题,也可以将其关闭。" />
                         <local:MyCheckBox Height="28" Text="使用高性能显卡" x:Name="CheckAdvanceGraphicCard" Tag="LaunchAdvanceGraphicCard"
                         <local:MyCheckBox Height="28" Text="使用高性能显卡" x:Name="CheckAdvanceGraphicCard" Tag="LaunchAdvanceGraphicCard"
                             ToolTipService.Placement="Right" ToolTip="自动在 Windows 设置 → 系统 → 屏幕 → 显示卡 中将 PCL 和 Java 改为使用高性能显卡。&#xa;如果同时有集成显卡和独立显卡,这能确保 MC 使用独立显卡进行渲染,以大幅提高帧率。" />
                             ToolTipService.Placement="Right" ToolTip="自动在 Windows 设置 → 系统 → 屏幕 → 显示卡 中将 PCL 和 Java 改为使用高性能显卡。&#xa;如果同时有集成显卡和独立显卡,这能确保 MC 使用独立显卡进行渲染,以大幅提高帧率。" />
                     </StackPanel>
                     </StackPanel>
-                    <local:MyHint Text="版本独立设置中还有更多高级选项可供调整。" Margin="0,5,0,10" Theme="Blue" Grid.Row="7" Grid.ColumnSpan="2"
+                    <local:MyHint Text="版本独立设置中还有更多高级选项可供调整。" Margin="0,5,0,10" Theme="Blue" Grid.Row="9" Grid.ColumnSpan="2"
                                   CanClose="True" RelativeSetup="HintMoreAdvancedSetup" />
                                   CanClose="True" RelativeSetup="HintMoreAdvancedSetup" />
                 </Grid>
                 </Grid>
             </local:MyCard>
             </local:MyCard>

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

@@ -54,6 +54,7 @@
             TextAdvanceJvm.Text = Setup.Get("LaunchAdvanceJvm")
             TextAdvanceJvm.Text = Setup.Get("LaunchAdvanceJvm")
             TextAdvanceGame.Text = Setup.Get("LaunchAdvanceGame")
             TextAdvanceGame.Text = Setup.Get("LaunchAdvanceGame")
             TextAdvanceRun.Text = Setup.Get("LaunchAdvanceRun")
             TextAdvanceRun.Text = Setup.Get("LaunchAdvanceRun")
+            ComboAdvanceGC.SelectedIndex = Setup.Get("LaunchAdvanceGC")
             CheckAdvanceRunWait.Checked = Setup.Get("LaunchAdvanceRunWait")
             CheckAdvanceRunWait.Checked = Setup.Get("LaunchAdvanceRunWait")
             CheckAdvanceDisableJLW.Checked = Setup.Get("LaunchAdvanceDisableJLW")
             CheckAdvanceDisableJLW.Checked = Setup.Get("LaunchAdvanceDisableJLW")
             CheckAdvanceGraphicCard.Checked = Setup.Get("LaunchAdvanceGraphicCard")
             CheckAdvanceGraphicCard.Checked = Setup.Get("LaunchAdvanceGraphicCard")
@@ -85,6 +86,7 @@
             Setup.Reset("LaunchAdvanceJvm")
             Setup.Reset("LaunchAdvanceJvm")
             Setup.Reset("LaunchAdvanceGame")
             Setup.Reset("LaunchAdvanceGame")
             Setup.Reset("LaunchAdvanceRun")
             Setup.Reset("LaunchAdvanceRun")
+            Setup.Reset("LaunchAdvanceGC")
             Setup.Reset("LaunchAdvanceRunWait")
             Setup.Reset("LaunchAdvanceRunWait")
             Setup.Reset("LaunchAdvanceDisableJLW")
             Setup.Reset("LaunchAdvanceDisableJLW")
             Setup.Reset("LaunchAdvanceGraphicCard")
             Setup.Reset("LaunchAdvanceGraphicCard")
@@ -111,7 +113,7 @@
     Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderRamCustom.Change
     Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderRamCustom.Change
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value)
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value)
     End Sub
     End Sub
-    Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndieV2.SelectionChanged, ComboArgumentVisibie.SelectionChanged, ComboArgumentWindowType.SelectionChanged, ComboArgumentPriority.SelectionChanged
+    Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndieV2.SelectionChanged, ComboArgumentVisibie.SelectionChanged, ComboArgumentWindowType.SelectionChanged, ComboArgumentPriority.SelectionChanged, ComboAdvanceGC.SelectionChanged
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
     End Sub
     End Sub
     Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceRunWait.Change, CheckArgumentRam.Change, CheckAdvanceDisableJLW.Change, CheckAdvanceGraphicCard.Change
     Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceRunWait.Change, CheckArgumentRam.Change, CheckAdvanceDisableJLW.Change, CheckAdvanceGraphicCard.Change

+ 8 - 4
Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml

@@ -94,10 +94,14 @@
                             <local:MyComboBoxItem Content="适应" ToolTip="拉伸图片并保持长宽比不变,直至填满整个窗口" />
                             <local:MyComboBoxItem Content="适应" ToolTip="拉伸图片并保持长宽比不变,直至填满整个窗口" />
                             <local:MyComboBoxItem Content="拉伸" ToolTip="拉伸图片使其恰好填满整个窗口,很可能会导致长宽比的改变" />
                             <local:MyComboBoxItem Content="拉伸" ToolTip="拉伸图片使其恰好填满整个窗口,很可能会导致长宽比的改变" />
                             <local:MyComboBoxItem Content="平铺" />
                             <local:MyComboBoxItem Content="平铺" />
-                            <local:MyComboBoxItem Content="居于左上" />
-                            <local:MyComboBoxItem Content="居于右上" />
-                            <local:MyComboBoxItem Content="居于左下" />
-                            <local:MyComboBoxItem Content="居于右下" />
+                            <local:MyComboBoxItem Content="左上" />
+                            <local:MyComboBoxItem Content="右上" />
+                            <local:MyComboBoxItem Content="左下" />
+                            <local:MyComboBoxItem Content="右下" />
+                            <local:MyComboBoxItem Content="左" />
+                            <local:MyComboBoxItem Content="右" />
+                            <local:MyComboBoxItem Content="上" />
+                            <local:MyComboBoxItem Content="下" />
                         </local:MyComboBox>
                         </local:MyComboBox>
                     </Grid>
                     </Grid>
                     <Grid x:Name="PanBackgroundOpacity" Height="22" Margin="0,0,0,7" Visibility="Collapsed">
                     <Grid x:Name="PanBackgroundOpacity" Height="22" Margin="0,0,0,7" Visibility="Collapsed">

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 122 - 122
Plain Craft Launcher 2/Resources/ModData.txt


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است