Просмотр исходного кода

Merge branch 'main' into fix#5966

wyc-26 1 год назад
Родитель
Сommit
0604427492

+ 16 - 0
Plain Craft Launcher 2/FormMain.xaml.vb

@@ -10,6 +10,14 @@ Public Class FormMain
         Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
         '统计更新日志条目
 #If BETA Then
+        If LastVersion < 354 Then 'Release 2.9.3
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:Minecraft 会优先使用独立显卡运行"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:简化下载新版本第二步的 UI"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:使用新的版本隔离策略"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:添加了在全局启动设置与版本独立设置之间互相跳转的按钮"))
+            FeatureCount += 20
+            BugCount += 28
+        End If
         If LastVersion < 352 Then 'Release 2.9.1
             FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "新增:导出整合包功能"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:支持在超长路径下安装、启动游戏"))
@@ -58,6 +66,14 @@ Public Class FormMain
         '3:BUG+ IMP* FEAT-
         '2:BUG* IMP-
         '1:BUG-
+        If LastVersion < 353 Then 'Snapshot 2.9.3
+            If LastVersion = 352 Then
+                FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:低版本 MC 没有声音"))
+                FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:若不安装 Mod 加载器,则无法安装 OptiFine 1.14+"))
+            End If
+            FeatureCount += 8
+            BugCount += 8
+        End If
         If LastVersion < 352 Then 'Snapshot 2.9.2
             FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:Minecraft 会优先使用独立显卡运行"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:简化下载新版本第二步的 UI"))

+ 24 - 8
Plain Craft Launcher 2/Modules/Base/ModBase.vb

@@ -1,10 +1,11 @@
 Imports System.Globalization
 Imports System.IO.Compression
+Imports System.Reflection
 Imports System.Runtime.CompilerServices
 Imports System.Security.Cryptography
 Imports System.Security.Principal
 Imports System.Text.RegularExpressions
-Imports System.Windows.Markup
+Imports System.Xaml
 Imports Newtonsoft.Json
 
 Public Module ModBase
@@ -12,13 +13,13 @@ Public Module ModBase
 #Region "声明"
 
     '下列版本信息由更新器自动修改
-    Public Const VersionBaseName As String = "2.9.2" '不含分支前缀的显示用版本名
-    Public Const VersionStandardCode As String = "2.9.2." & VersionBranchCode '标准格式的四段式版本号
+    Public Const VersionBaseName As String = "2.9.3" '不含分支前缀的显示用版本名
+    Public Const VersionStandardCode As String = "2.9.3." & VersionBranchCode '标准格式的四段式版本号
     Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换
 #If BETA Then
-    Public Const VersionCode As Integer = 352 'Release
+    Public Const VersionCode As Integer = 355 'Release
 #Else
-    Public Const VersionCode As Integer = 353 'Snapshot
+    Public Const VersionCode As Integer = 354 'Snapshot
 #End If
     '自动生成的版本信息
     Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -1697,6 +1698,7 @@ RetryDir:
     End Function
     ''' <summary>
     ''' 获取处于两个子字符串之间的部分,裁切尽可能多的内容。
+    ''' 等效于 AfterLast 后接 BeforeFirst。
     ''' 如果未找到子字符串则不裁切。
     ''' </summary>
     <Extension> Public Function Between(Str As String, After As String, Before As String, Optional IgnoreCase As Boolean = False) As String
@@ -2747,13 +2749,27 @@ Retry:
     ''' <summary>
     ''' 将 XML 转换为对应 UI 对象。
     ''' </summary>
-    Public Function GetObjectFromXML(Str As String)
-        Using Stream As New MemoryStream
+    Public Function GetObjectFromXML(Str As String) As Object
+        Using Stream As New MemoryStream(Encoding.UTF8.GetBytes(Str))
+            '类型检查
+            Using Reader As New XamlXmlReader(Stream)
+                While Reader.Read()
+                    For Each BlackListType In {GetType(WebBrowser), GetType(Frame), GetType(MediaElement), GetType(ObjectDataProvider), GetType(XamlReader), GetType(Window), GetType(XmlDataProvider)}
+                        If Reader.Type IsNot Nothing AndAlso BlackListType.IsAssignableFrom(Reader.Type.UnderlyingType) Then Throw New UnauthorizedAccessException($"不允许使用 {BlackListType.Name} 类型。")
+                        If Reader.Value IsNot Nothing AndAlso Reader.Value = BlackListType.Name Then Throw New UnauthorizedAccessException($"不允许使用 {BlackListType.Name} 值。")
+                    Next
+                    For Each BlackListMember In {"Code", "FactoryMethod", "Static"}
+                        If Reader.Member IsNot Nothing AndAlso Reader.Member.Name = BlackListMember Then Throw New UnauthorizedAccessException($"不允许使用 {BlackListMember} 成员。")
+                    Next
+                End While
+            End Using
+            '实际的加载
+            Stream.Position = 0
             Using Writer As New StreamWriter(Stream)
                 Writer.Write(Str)
                 Writer.Flush()
                 Stream.Position = 0
-                Return XamlReader.Load(Stream)
+                Return Markup.XamlReader.Load(Stream)
             End Using
         End Using
     End Function

+ 5 - 5
Plain Craft Launcher 2/Modules/Base/ModValidate.vb

@@ -150,13 +150,13 @@ Public Class ValidateExcept
     Public Property Excepts As ObjectModel.Collection(Of String) = New ObjectModel.Collection(Of String)
     Public Property ErrorMessage As String
     Public Sub New()
-        ErrorMessage = "输入内容不能包含 %!"
+        ErrorMessage = "输入内容不能包含 %"
     End Sub '用于 XAML 初始化
-    Public Sub New(Excepts As ObjectModel.Collection(Of String), Optional ErrorMessage As String = "输入内容不能包含 %!")
+    Public Sub New(Excepts As ObjectModel.Collection(Of String), Optional ErrorMessage As String = "输入内容不能包含 %")
         Me.Excepts = Excepts
         Me.ErrorMessage = ErrorMessage
     End Sub
-    Public Sub New(Excepts As IEnumerable, Optional ErrorMessage As String = "输入内容不能包含 %!")
+    Public Sub New(Excepts As IEnumerable, Optional ErrorMessage As String = "输入内容不能包含 %")
         Me.Excepts = New ObjectModel.Collection(Of String)
         Me.ErrorMessage = ErrorMessage
         For Each Data As String In Excepts
@@ -185,12 +185,12 @@ Public Class ValidateExceptSame
     Public Property IgnoreCase As Boolean = False
     Public Sub New()
     End Sub
-    Public Sub New(Excepts As ObjectModel.Collection(Of String), Optional ErrorMessage As String = "输入内容不能为 %!", Optional IgnoreCase As Boolean = False)
+    Public Sub New(Excepts As ObjectModel.Collection(Of String), Optional ErrorMessage As String = "输入内容不能为 %", Optional IgnoreCase As Boolean = False)
         Me.Excepts = Excepts
         Me.ErrorMessage = ErrorMessage
         Me.IgnoreCase = IgnoreCase
     End Sub
-    Public Sub New(Excepts As IEnumerable, Optional ErrorMessage As String = "输入内容不能为 %!", Optional IgnoreCase As Boolean = False)
+    Public Sub New(Excepts As IEnumerable, Optional ErrorMessage As String = "输入内容不能为 %", Optional IgnoreCase As Boolean = False)
         Me.Excepts = New ObjectModel.Collection(Of String)
         For Each Data As String In Excepts
             Me.Excepts.Add(Data)

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

@@ -563,8 +563,9 @@ Done:
             If LogCrash.Contains("has mods that were not found") AndAlso RegexCheck(LogCrash, "The Mod File [^\n]+optifine\\OptiFine[^\n]+ has mods that were not found") Then AppendReason(CrashReason.OptiFine与Forge不兼容)
             'Mod 导致的崩溃
             If LogCrash.Contains("-- MOD ") Then
-                If LogCrash.Between("-- MOD ", "Failure message:").ContainsF(".jar", True) Then
-                    AppendReason(CrashReason.确定Mod导致游戏崩溃, If(RegexSeek(LogCrash, "(?<=Mod File: ).+"), "").TrimEnd((vbCrLf & " ").ToCharArray))
+                Dim LogCrashMod As String = LogCrash.Between("-- MOD ", "Failure message:")
+                If LogCrashMod.ContainsF(".jar", True) Then
+                    AppendReason(CrashReason.确定Mod导致游戏崩溃, If(RegexSeek(LogCrashMod, "(?<=Mod File: ).+"), "").TrimEnd((vbCrLf & " ").ToCharArray))
                 Else
                     AppendReason(CrashReason.Mod加载器报错, If(RegexSeek(LogCrash, "(?<=Failure message: )[\w\W]+?(?=\tMod)"), "").Replace(vbTab, " ").TrimEnd((vbCrLf & " ").ToCharArray))
                 End If

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

@@ -674,13 +674,14 @@ Wait:
             '若该目录有 Java,则加入结果
             If File.Exists(Path & "javaw.exe") Then Results(Path) = Source
             '查找其下的所有文件夹
+            '不应使用网易的 Java:https://github.com/Hex-Dragon/PCL2/issues/1279#issuecomment-2761489121
             Dim Keywords = {"java", "jdk", "env", "环境", "run", "软件", "jre", "mc", "dragon",
                             "soft", "cache", "temp", "corretto", "roaming", "users", "craft", "program", "世界", "net",
                             "游戏", "oracle", "game", "file", "data", "jvm", "服务", "server", "客户", "client", "整合",
                             "应用", "运行", "前置", "mojang", "官启", "新建文件夹", "eclipse", "microsoft", "hotspot",
                             "runtime", "x86", "x64", "forge", "原版", "optifine", "官方", "启动", "hmcl", "mod", "高清",
                             "download", "launch", "程序", "path", "version", "baka", "pcl", "zulu", "local", "packages",
-                            "4297127d64ec6", "国服", "网易", "ext", "netease", "1.", "启动"}
+                            "4297127d64ec6", "1.", "启动"}
             For Each FolderInfo As DirectoryInfo In OriginalPath.EnumerateDirectories
                 If FolderInfo.Attributes.HasFlag(FileAttributes.ReparsePoint) Then Continue For '跳过符号链接
                 Dim SearchEntry = GetFolderNameFromPath(FolderInfo.Name).ToLower '用于搜索的字符串

+ 22 - 14
Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb

@@ -220,21 +220,24 @@ NextInner:
         If CheckResult <> "" Then Throw New ArgumentException(CheckResult)
 #If BETA Then
         '求赞助
-        RunInNewThread(
-        Sub()
-            Select Case Setup.Get("SystemLaunchCount")
-                Case 10, 20, 40, 60, 80, 100, 120, 150, 200, 250, 300, 350, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000
-                    If MyMsgBox("PCL 已经为你启动了 " & Setup.Get("SystemLaunchCount") & " 次游戏啦!" & vbCrLf &
-                                "如果 PCL 还算好用的话,能不能考虑赞助一下 PCL……" & vbCrLf &
-                                "如果没有大家的支持,PCL 很难在免费、无任何广告的情况下维持数年的更新(磕头)……!",
-                                Setup.Get("SystemLaunchCount") & " 次启动!", "支持 PCL!", "但是我拒绝") = 1 Then
-                        OpenWebsite("https://afdian.com/a/LTCat")
-                    End If
-            End Select
-        End Sub, "Donate")
+        If CurrentLaunchOptions?.SaveBatch Is Nothing Then '保存脚本时不提示
+            RunInNewThread(
+            Sub()
+                Select Case Setup.Get("SystemLaunchCount")
+                    Case 10, 20, 40, 60, 80, 100, 120, 150, 200, 250, 300, 350, 400, 500, 600, 700, 800, 900, 1000, 1200, 1400, 1600, 1800, 2000
+                        If MyMsgBox("PCL 已经为你启动了 " & Setup.Get("SystemLaunchCount") & " 次游戏啦!" & vbCrLf &
+                                    "如果 PCL 还算好用的话,能不能考虑赞助一下 PCL……" & vbCrLf &
+                                    "如果没有大家的支持,PCL 很难在免费、无任何广告的情况下维持数年的更新(磕头)……!",
+                                    Setup.Get("SystemLaunchCount") & " 次启动!", "支持 PCL!", "但是我拒绝") = 1 Then
+                            OpenWebsite("https://afdian.com/a/LTCat")
+                        End If
+                End Select
+            End Sub, "Donate")
+        End If
 #End If
         '正版购买提示
-        If Not Setup.Get("HintBuy") AndAlso Setup.Get("LoginType") <> McLoginType.Ms Then
+        If CurrentLaunchOptions?.SaveBatch Is Nothing AndAlso '保存脚本时不提示
+           Not Setup.Get("HintBuy") AndAlso Setup.Get("LoginType") <> McLoginType.Ms Then
             If IsSystemLanguageChinese() Then
                 RunInNewThread(
                 Sub()
@@ -1347,6 +1350,12 @@ Retry:
             Arguments += " " & McLaunchArgumentsGameNew(McVersionCurrent)
             McLaunchLog("新版 Game 参数获取成功")
         End If
+        '编码参数(#5818、#5892)
+        If McLaunchJavaSelected.VersionCode > 8 Then
+            If Not Arguments.Contains("-Dfile.encoding=") Then Arguments += " -Dfile.encoding=UTF-8"
+            If Not Arguments.Contains("-Dstdout.encoding=") Then Arguments += " -Dstdout.encoding=UTF-8"
+            If Not Arguments.Contains("-Dstderr.encoding=") Then Arguments += " -Dstderr.encoding=UTF-8"
+        End If
         '替换参数
         Dim ReplaceArguments = McLaunchArgumentsReplace(McVersionCurrent, Loader)
         If String.IsNullOrWhiteSpace(ReplaceArguments("${version_type}")) Then
@@ -1899,7 +1908,6 @@ NextVersion:
             '1.6 ~ 10 :zh_CN 时正常,zh_cn 时自动切换为英文
             '1.11 ~ 12:zh_cn 时正常,zh_CN 时虽然显示了中文但语言设置会错误地显示选择英文
             '1.13+    :zh_cn 时正常,zh_CN 时自动切换为英文
-            IniClearCache(SetupFileAddress) '清除缓存(#2294)
             Dim CurrentLang As String = ReadIni(SetupFileAddress, "lang", "none")
             Dim RequiredLang As String = If(CurrentLang = "none" OrElse Not Directory.Exists(McVersionCurrent.PathIndie & "saves"), '#3844,整合包可能已经自带了 options.txt
                 If(Setup.Get("ToolHelpChinese"), "zh_cn", "en_us"), CurrentLang.ToLower)

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

@@ -207,53 +207,46 @@ Public Module ModMinecraft
         ''' </summary>
         Public ReadOnly Property PathIndie As String
             Get
-                Return GetPathIndie(Modable)
+                InitPathIndie(Modable)
+                Return If(Setup.Get("VersionArgumentIndieV2", Version:=Me), Path, PathMcFolder)
             End Get
         End Property
         ''' <summary>
-        ''' 在不加载版本的情况下获取版本隔离目录。
+        ''' 决定该版本是否应该被隔离。
         ''' </summary>
-        Public Function GetPathIndie(Modable As Boolean) As String
-            '决定版本隔离类型
-            If Setup.IsUnset("VersionArgumentIndieV2", Version:=Me) Then
-                Dim ShouldBeIndie =
-                Function() As Boolean
-                    '从老的版本独立设置中迁移:-1 未决定,0 使用全局设置,1 手动开启,2 手动关闭
-                    If Not Setup.IsUnset("VersionArgumentIndie", Version:=Me) AndAlso Setup.Get("VersionArgumentIndie", Version:=Me) > 0 Then
-                        Log($"[Minecraft] 版本隔离初始化({Name}):从老的版本独立设置中迁移")
-                        Return Setup.Get("VersionArgumentIndie", Version:=Me) = 1
-                    End If
-                    '若版本文件夹下包含 mods 或 saves 文件夹,则自动开启版本隔离
-                    Dim ModFolder As New DirectoryInfo(Path & "mods\")
-                    Dim SaveFolder As New DirectoryInfo(Path & "saves\")
-                    If (ModFolder.Exists AndAlso ModFolder.EnumerateFiles.Any) OrElse (SaveFolder.Exists AndAlso SaveFolder.EnumerateFiles.Any) Then
-                        Log($"[Minecraft] 版本隔离初始化({Name}):版本文件夹下存在 mods 或 saves 文件夹,自动开启")
+        Public Sub InitPathIndie(Modable As Boolean)
+            If Not Setup.IsUnset("VersionArgumentIndieV2", Version:=Me) Then Return
+            Dim ShouldBeIndie =
+            Function() As Boolean
+                '从老的版本独立设置中迁移:-1 未决定,0 使用全局设置,1 手动开启,2 手动关闭
+                If Not Setup.IsUnset("VersionArgumentIndie", Version:=Me) AndAlso Setup.Get("VersionArgumentIndie", Version:=Me) > 0 Then
+                    Log($"[Minecraft] 版本隔离初始化({Name}):从老的版本独立设置中迁移")
+                    Return Setup.Get("VersionArgumentIndie", Version:=Me) = 1
+                End If
+                '若版本文件夹下包含 mods 或 saves 文件夹,则自动开启版本隔离
+                Dim ModFolder As New DirectoryInfo(Path & "mods\")
+                Dim SaveFolder As New DirectoryInfo(Path & "saves\")
+                If (ModFolder.Exists AndAlso ModFolder.EnumerateFiles.Any) OrElse (SaveFolder.Exists AndAlso SaveFolder.EnumerateFiles.Any) Then
+                    Log($"[Minecraft] 版本隔离初始化({Name}):版本文件夹下存在 mods 或 saves 文件夹,自动开启")
+                    Return True
+                End If
+                '根据全局的默认设置决定是否隔离
+                Log($"[Minecraft] 版本隔离初始化({Name}):从全局默认设置中({Setup.Get("LaunchArgumentIndieV2")})判断")
+                Select Case Setup.Get("LaunchArgumentIndieV2")
+                    Case 0 '关闭
+                        Return False
+                    Case 1 '仅隔离可安装 Mod 的版本
+                        Return Modable
+                    Case 2 '仅隔离非正式版
+                        Return State = McVersionState.Fool OrElse State = McVersionState.Old OrElse State = McVersionState.Snapshot
+                    Case 3 '隔离非正式版与可安装 Mod 的版本
+                        Return Modable OrElse State = McVersionState.Fool OrElse State = McVersionState.Old OrElse State = McVersionState.Snapshot
+                    Case Else '隔离所有版本
                         Return True
-                    End If
-                    '根据全局的默认设置决定是否隔离
-                    Log($"[Minecraft] 版本隔离初始化({Name}):从全局默认设置中({Setup.Get("LaunchArgumentIndieV2")})判断")
-                    Select Case Setup.Get("LaunchArgumentIndieV2")
-                        Case 0 '关闭
-                            Return False
-                        Case 1 '仅隔离可安装 Mod 的版本
-                            Return Modable
-                        Case 2 '仅隔离非正式版
-                            Return State = McVersionState.Fool OrElse State = McVersionState.Old OrElse State = McVersionState.Snapshot
-                        Case 3 '隔离非正式版与可安装 Mod 的版本
-                            Return Modable OrElse State = McVersionState.Fool OrElse State = McVersionState.Old OrElse State = McVersionState.Snapshot
-                        Case Else '隔离所有版本
-                            Return True
-                    End Select
-                End Function
-                Setup.Set("VersionArgumentIndieV2", ShouldBeIndie(), Version:=Me)
-            End If
-            '根据隔离类型决定路径
-            If Setup.Get("VersionArgumentIndieV2", Version:=Me) Then
-                Return Path
-            Else
-                Return PathMcFolder
-            End If
-        End Function
+                End Select
+            End Function
+            Setup.Set("VersionArgumentIndieV2", ShouldBeIndie(), Version:=Me)
+        End Sub
 
         ''' <summary>
         ''' 该版本的版本文件夹名称。
@@ -1080,6 +1073,8 @@ ExitDataLoad:
             Return "2023 | 研究表明:玩家喜欢作出选择——越多越好!"
         ElseIf Name = "24w14potato" Then
             Return "2024 | 毒马铃薯一直都被大家忽视和低估,于是我们超级加强了它!"
+        ElseIf Name = "25w14craftmine" Then
+            Return "2025 | 你可以合成任何东西——包括合成你的世界!"
         Else
             Return ""
         End If

+ 16 - 7
Plain Craft Launcher 2/Modules/ModMain.vb

@@ -873,17 +873,26 @@ NextFile:
     End Sub
 
     ''' <summary>
-    ''' 申请一个可用于任务缓存的临时文件夹,以 \ 结尾。
-    ''' 这些文件夹无需进行后续清理。
+    ''' 申请一个可用于任务缓存的临时文件夹,以 \ 结尾。这些文件夹无需进行后续清理。
+    ''' 若所有缓存位置均没有权限,会抛出异常。
     ''' </summary>
     ''' <param name="RequireNonSpace">是否要求路径不包含空格。</param>
     Public Function RequestTaskTempFolder(Optional RequireNonSpace As Boolean = False) As String
         TryClearTaskTemp()
-        RequestTaskTempFolder = $"{PathTemp}TaskTemp\{GetUuid()}-{RandomInteger(0, 1000000)}\"
-        If RequireNonSpace AndAlso RequestTaskTempFolder.Contains(" ") Then
-            RequestTaskTempFolder = $"{OsDrive}ProgramData\PCL\TaskTemp\{GetUuid()}-{RandomInteger(0, 1000000)}\"
-        End If
-        Directory.CreateDirectory(RequestTaskTempFolder)
+        Dim ResultFolder As String
+        Try
+            ResultFolder = $"{PathTemp}TaskTemp\{GetUuid()}-{RandomInteger(0, 1000000)}\"
+            If RequireNonSpace AndAlso ResultFolder.Contains(" ") Then Exit Try '带空格
+            Directory.CreateDirectory(ResultFolder)
+            CheckPermissionWithException(ResultFolder)
+            Return ResultFolder
+        Catch
+        End Try
+        '使用备用路径
+        ResultFolder = $"{OsDrive}ProgramData\PCL\TaskTemp\{GetUuid()}-{RandomInteger(0, 1000000)}\"
+        Directory.CreateDirectory(ResultFolder)
+        CheckPermission(ResultFolder)
+        Return ResultFolder
     End Function
 
 #End Region

+ 7 - 1
Plain Craft Launcher 2/Modules/ModMusic.vb

@@ -245,7 +245,12 @@
             RunInThread(
             Sub()
                 Log("[Music] 已恢复播放")
-                MusicNAudio?.Play()
+                Try
+                    MusicNAudio?.Play()
+                Catch 'https://github.com/Hex-Dragon/PCL2/pull/5415#issuecomment-2751135223
+                    MusicNAudio?.Stop()
+                    MusicNAudio?.Play()
+                End Try
                 MusicRefreshUI()
             End Sub)
             Return True
@@ -273,6 +278,7 @@
             '开始播放
             CurrentWave = New NAudio.Wave.WaveOutEvent()
             MusicNAudio = CurrentWave
+            CurrentWave.DeviceNumber = -1
             Reader = New NAudio.Wave.AudioFileReader(MusicCurrent)
             CurrentWave.Init(Reader)
             CurrentWave.Play()

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

@@ -1,7 +1,5 @@
 '由于包含加解密等安全信息,本文件中的部分代码已被删除
 
-Imports System.Net
-Imports System.Reflection
 Imports System.Security.Cryptography
 
 Friend Module ModSecret

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

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

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

@@ -441,9 +441,9 @@ pause"
         '添加 Java Wrapper 作为主 Jar
         Dim Arguments As String
         If UseJavaWrapper AndAlso Not Setup.Get("LaunchAdvanceDisableJLW") Then
-            Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -Duser.home=""{BaseMcFolderHome}"" -cp ""{Target}"" -jar ""{ExtractJavaWrapper()}"" optifine.Installer"
+            Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" -jar ""{ExtractJavaWrapper()}"" optifine.Installer"
         Else
-            Arguments = $"-Duser.home=""{BaseMcFolderHome}"" -cp ""{Target}"" optifine.Installer"
+            Arguments = $"-Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" optifine.Installer"
         End If
         If Java.VersionCode >= 9 Then Arguments = "--add-exports cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED " & Arguments
         '开始启动
@@ -545,8 +545,8 @@ pause"
         Dim VersionFolder As String = McFolder & "versions\" & Id & "\"
         Dim IsNewVersion As Boolean = DownloadInfo.Inherit.Contains("w") OrElse Val(DownloadInfo.Inherit.Split(".")(1)) >= 14
         Dim Target As String = If(IsNewVersion,
-            RequestTaskTempFolder() & "temp",
-            McFolder & "libraries\optifine\OptiFine\" & DownloadInfo.NameFile.Replace("OptiFine_", "").Replace(".jar", "").Replace("preview_", "") & "\" & DownloadInfo.NameFile.Replace("OptiFine_", "OptiFine-").Replace("preview_", ""))
+            $"{RequestTaskTempFolder()}OptiFine.jar",
+            $"{McFolder}libraries\optifine\OptiFine\{DownloadInfo.NameFile.Replace("OptiFine_", "").Replace(".jar", "").Replace("preview_", "")}\{DownloadInfo.NameFile.Replace("OptiFine_", "OptiFine-").Replace("preview_", "")}")
         Dim Loaders As New List(Of LoaderBase)
 
         '获取下载地址
@@ -613,8 +613,8 @@ pause"
             Log("[Download] 检测为新版 OptiFine:" & DownloadInfo.Inherit)
             Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)("安装 OptiFine(方式 A)",
             Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
-                Dim BaseMcFolderHome As String = BaseMcFolderHome.TrimEnd("\")
-                Dim BaseMcFolder As String = BaseMcFolderHome & "\.minecraft\"
+                Dim BaseMcFolderHome As String = RequestTaskTempFolder()
+                Dim BaseMcFolder As String = BaseMcFolderHome & ".minecraft\"
                 Try
                     '准备安装环境
                     If Directory.Exists(BaseMcFolder & "versions\" & DownloadInfo.Inherit) Then
@@ -2056,13 +2056,11 @@ Retry:
     ''' </summary>
     ''' <exception cref="CancelledException" />
     Public Function McInstallLoader(Request As McInstallRequest, Optional DontFixLibraries As Boolean = False) As List(Of LoaderBase)
-        '获取缓存目录
-        Dim TempMcFolder As String = RequestTaskTempFolder(
-            PathTemp.Contains(" ") AndAlso '要求路径不包含空格
-            (Request.OptiFineEntry IsNot Nothing OrElse Request.ForgeEntry IsNot Nothing OrElse Request.NeoForgeEntry IsNot Nothing))
+        '获取缓存目录(安装 Mod 加载器的文件夹不能包含空格)
+        Dim TempMcFolder As String = RequestTaskTempFolder(Request.OptiFineEntry IsNot Nothing OrElse Request.ForgeEntry IsNot Nothing OrElse Request.NeoForgeEntry IsNot Nothing)
 
         '获取参数
-        Dim OutputFolder As String = PathMcFolder & "versions\" & Request.TargetVersionName & "\"
+        Dim VersionFolder As String = PathMcFolder & "versions\" & Request.TargetVersionName & "\"
         If Directory.Exists(TempMcFolder) Then DeleteDirectory(TempMcFolder)
         Dim OptiFineFolder As String = Nothing
         If Request.OptiFineVersion IsNot Nothing Then
@@ -2088,12 +2086,14 @@ Retry:
         Dim LiteLoaderFolder As String = Nothing
         If Request.LiteLoaderEntry IsNot Nothing Then LiteLoaderFolder = TempMcFolder & "versions\" & Request.MinecraftName & "-LiteLoader"
 
-        '判断 OptiFine 是否作为 Mod 进行下载
-        'Dim MinecraftCode As Integer = If(Request.MinecraftName.Contains("."), Val(Request.MinecraftName.Split(".")(1)), 0)
-        Dim OptiFineAsMod As Boolean = Request.OptiFineEntry IsNot Nothing AndAlso
-            (Request.FabricVersion IsNot Nothing OrElse Request.ForgeEntry IsNot Nothing) '选择了 OptiFine 与任意 Mod 加载器
-        Dim ModsFolder As String = New McVersion(OutputFolder).GetPathIndie(True) & "mods\"
+        '决定版本隔离情况(#5970)
+        Dim Modable As Boolean = Request.FabricVersion IsNot Nothing OrElse Request.ForgeEntry IsNot Nothing OrElse Request.NeoForgeEntry IsNot Nothing OrElse Request.LiteLoaderEntry IsNot Nothing
+        Dim Version As New McVersion(VersionFolder)
+        Version.InitPathIndie(Modable)
+        Dim ModsFolder As String = If(Modable, VersionFolder, PathMcFolder) & "mods\"
 
+        '判断 OptiFine 是否作为 Mod 进行下载
+        Dim OptiFineAsMod As Boolean = Request.OptiFineEntry IsNot Nothing AndAlso Modable '选择了 OptiFine 与任意 Mod 加载器
         If OptiFineAsMod Then
             Log("[Download] OptiFine 将作为 Mod 进行下载")
             OptiFineFolder = ModsFolder
@@ -2108,14 +2108,14 @@ Retry:
         Log("[Download] 对应的原版版本:" & Request.MinecraftName)
 
         '重复版本检查
-        If File.Exists(OutputFolder & Request.TargetVersionName & ".json") Then
+        If File.Exists($"{VersionFolder}{Request.TargetVersionName}.json") Then
             Hint("版本 " & Request.TargetVersionName & " 已经存在!", HintType.Critical)
             Throw New CancelledException
         End If
 
         Dim LoaderList As New List(Of LoaderBase)
         '添加忽略标识
-        LoaderList.Add(New LoaderTask(Of Integer, Integer)("添加忽略标识", Sub() WriteFile(OutputFolder & ".pclignore", "用于临时地在 PCL 的版本列表中屏蔽此版本。")) With {.Show = False, .Block = False})
+        LoaderList.Add(New LoaderTask(Of Integer, Integer)("添加忽略标识", Sub() WriteFile(VersionFolder & ".pclignore", "用于临时地在 PCL 的版本列表中屏蔽此版本。")) With {.Show = False, .Block = False})
         'Fabric API
         If Request.FabricApi IsNot Nothing Then
             LoaderList.Add(New LoaderDownload("下载 Fabric API", New List(Of NetFile) From {Request.FabricApi.ToNetFile(ModsFolder)}) With {.ProgressWeight = 3, .Block = False})
@@ -2154,7 +2154,7 @@ Retry:
         '合并安装
         LoaderList.Add(New LoaderTask(Of String, String)("安装游戏",
             Sub(Task As LoaderTask(Of String, String))
-                InstallMerge(OutputFolder, OutputFolder, OptiFineFolder, OptiFineAsMod, ForgeFolder, Request.ForgeVersion, NeoForgeFolder, Request.NeoForgeVersion, FabricFolder, LiteLoaderFolder)
+                InstallMerge(VersionFolder, VersionFolder, OptiFineFolder, OptiFineAsMod, ForgeFolder, Request.ForgeVersion, NeoForgeFolder, Request.NeoForgeVersion, FabricFolder, LiteLoaderFolder)
                 Task.Progress = 0.3
                 If Directory.Exists(TempMcFolder & "libraries") Then CopyDirectory(TempMcFolder & "libraries", PathMcFolder & "libraries")
                 If Directory.Exists(TempMcFolder & "mods") Then CopyDirectory(TempMcFolder & "mods", ModsFolder)
@@ -2168,12 +2168,12 @@ Retry:
         If Not DontFixLibraries AndAlso
         (Request.OptiFineEntry IsNot Nothing OrElse (Request.ForgeVersion IsNot Nothing AndAlso Request.ForgeVersion.BeforeFirst(".") >= 20) OrElse Request.NeoForgeVersion IsNot Nothing OrElse Request.FabricVersion IsNot Nothing OrElse Request.LiteLoaderEntry IsNot Nothing) Then
             Dim LoadersLib As New List(Of LoaderBase)
-            LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析游戏支持库文件(副加载器)", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(OutputFolder))) With {.ProgressWeight = 1, .Show = False})
+            LoadersLib.Add(New LoaderTask(Of String, List(Of NetFile))("分析游戏支持库文件(副加载器)", Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
             LoadersLib.Add(New LoaderDownload("下载游戏支持库文件(副加载器)", New List(Of NetFile)) With {.ProgressWeight = 7, .Show = False})
             LoaderList.Add(New LoaderCombo(Of String)("下载游戏支持库文件", LoadersLib) With {.ProgressWeight = 8})
         End If
         '删除忽略标识
-        LoaderList.Add(New LoaderTask(Of Integer, Integer)("删除忽略标识", Sub() File.Delete(OutputFolder & ".pclignore")) With {.Show = False})
+        LoaderList.Add(New LoaderTask(Of Integer, Integer)("删除忽略标识", Sub() File.Delete(VersionFolder & ".pclignore")) With {.Show = False})
         '总加载器
         Return LoaderList
     End Function

+ 3 - 0
Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb

@@ -756,6 +756,7 @@
     Private Sub OptiFine_Clear(sender As Object, e As MouseButtonEventArgs) Handles BtnOptiFineClear.MouseLeftButtonUp
         SelectedOptiFine = Nothing
         SelectedOptiFabric = Nothing
+        AutoSelectedOptiFabric = False
         CardOptiFine.IsSwaped = True
         e.Handled = True
         Forge_Loaded()
@@ -1025,7 +1026,9 @@
     Private Sub Fabric_Clear(sender As Object, e As MouseButtonEventArgs) Handles BtnFabricClear.MouseLeftButtonUp
         SelectedFabric = Nothing
         SelectedFabricApi = Nothing
+        AutoSelectedFabricApi = False
         SelectedOptiFabric = Nothing
+        AutoSelectedOptiFabric = False
         CardFabric.IsSwaped = True
         e.Handled = True
         SelectReload()

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

@@ -227,13 +227,19 @@ Download:
                 Log($"[Page] 实例化:清空自定义主页 UI,来源为空")
                 Return
             End If
-            Content = "<StackPanel xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:local=""clr-namespace:PCL;assembly=Plain Craft Launcher 2"">" & Content & "</StackPanel>"
-            Content = HelpArgumentReplace(Content)
-            Log($"[Page] 实例化:加载自定义主页 UI 开始,最终内容长度:{Content.Count}")
             Try
+                Content = HelpArgumentReplace(Content)
+                If Content.Contains("xmlns") Then Content = Content.RegexReplace("xmlns[^""']*(""|')[^""']*(""|')", "").Replace("xmlns", "") '禁止声明命名空间
+                Content = "<StackPanel xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:sys=""clr-namespace:System;assembly=mscorlib"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:local=""clr-namespace:PCL;assembly=Plain Craft Launcher 2"">" & Content & "</StackPanel>"
+                Log($"[Page] 实例化:加载自定义主页 UI 开始,最终内容长度:{Content.Count}")
                 PanCustom.Children.Add(GetObjectFromXML(Content))
+            Catch ex As UnauthorizedAccessException
+                Log(ex, "加载失败的自定义主页内容:" & vbCrLf & Content)
+                If MyMsgBox(ex.Message, "加载自定义主页失败", "重试", "取消") = 1 Then
+                    GoTo Refresh '防止 SyncLock 死锁
+                End If
             Catch ex As Exception
-                Log("[Page] 加载失败的自定义主页内容:" & vbCrLf & Content)
+                Log(ex, "加载失败的自定义主页内容:" & vbCrLf & Content)
                 If MyMsgBox($"自定义主页内容编写有误,请根据下列错误信息进行检查:{vbCrLf}{GetExceptionSummary(ex)}", "加载自定义主页失败", "重试", "取消") = 1 Then
                     GoTo Refresh '防止 SyncLock 死锁
                 End If

+ 185 - 253
Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml

@@ -104,260 +104,192 @@
             </local:MyCard>
             <local:MyCard Margin="0,0,0,15" Title="赞助者">
                 <StackPanel Margin="25,40,10,20">
-                    <TextBlock HorizontalAlignment="Left" Text="以下是 2025 年 2 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
-                    <WrapPanel Margin="0,0,0,10">
                        <TextBlock Width="120" Margin="0,1.5" Text="Morisummer" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="香" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Creeper" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="tjsstctd" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="tangent95" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Qqwertyui1" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="爱吃东西的布布" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="青丘" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Lithium" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="派大星教授加博士先生" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="海月" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="电鳗" />
+                    <TextBlock HorizontalAlignment="Left" Text="以下是 2025 年 3 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
+                    <WrapPanel Margin="0,0,0,10">
                        <TextBlock Width="120" Margin="0,1.5" Text="micheal276" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="吃面不加葱" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="想去看那倒悬山" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="隳之狐" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="QY熹微" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="LZL" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="老卡费" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="散." />
+                        <TextBlock Width="120" Margin="0,1.5" Text="续笙_xusheng" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="HappyGhast0123" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Tong" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="15158206433" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="一抹蓝色和粉色" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="哦" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="T2222" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Toudesu" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="苏利" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="DW." />
+                        <TextBlock Width="120" Margin="0,1.5" Text="无名小卒" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="lgl" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="mk" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="鲨鱼不是鱼" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Momizi_Azusa" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="oseki" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="精?华?夏?" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="术士的黑猫" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="theagin" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="狗杞わ枸子" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="别凶不二啦" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="枫叶落江" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Tianwai来物" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="如风FC" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="fan" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="雨恋芳歌" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="neko" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="陌上云暮迟迟归" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="121" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="SGYH" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Lelouch" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="tisky" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="禹餘" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="MoYou" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="?HONEY HONEY BOOM?" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="流雪无痕" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="yourenA" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="当归与蜜糖" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="提瓦特太保" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="weidao-云天" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Yangxl" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="zero" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="guoomg" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="孤念鬱海" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="李晨曦" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="dyh" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="didibubu" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="way_" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="浅冥" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="LightTeaHear" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="kiki" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="洛山阳" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="月下独酌" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="阿晴" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="论猫的液体可能性" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="微尔丶白折" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="超凡大谱系" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="麻圣" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="八宝饭" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="张不易" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="1" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="望Wang" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="alrin" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="无心态" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="MelonEater88" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="白日梦" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="FEssyyzplane" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="札卜铎徳勒" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="星河" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="老王1233" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="王等等等" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="橘子233" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="wyhll" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="SiMen_774" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="pepsi" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="FORGE" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="李青团" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Zmr2333" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="CWKF" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="兜帽人evei622130" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="毒奶神探女" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="赤诚之心" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="藏白" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="某零子" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="骨头" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Starying" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="钱小穷" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="casper" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Summer丿皓月" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="小促" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="御坂美琴" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="闲的没事干啥呢" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="aiyu" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="shuaitiao" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="小真寻" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="清离风" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="FateIsYetUncertain" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Olympia" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="橘如望九" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="木涵" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="2147483647" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="YJ-StarBlock" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="欲予卿" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="haolanne" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="浅夏" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="MCxiaobai" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="未知数x酱" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="有事打钱" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Setsuna" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="电脑" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="mpty" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="小兔噗噗" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="超级白羊大王" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="奈奈" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="12345" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="fshj" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Langfeige" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="聆风岱岳" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Fier" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="张怀民" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="minecraftmc22" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="爱蹈琯子" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="何心慈" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="睏欤" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="熙里糊涂" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="落叶" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="阿坎尔德" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="杜野凛世" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="呆呆" />
+                        <TextBlock Width="240" Margin="0,1.5" Text="我和琳妮特有个孩子" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Fishking_qwe" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="惠惠" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="黑暗风暴" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Oxsheep" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Clove_Cloud" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="今は最高" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="YuiuY" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="George0307" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="游子桀" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="玄之" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="海绵宝宝低顺钠" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="杜先生" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="黑火c" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="落日余音" />
                         <TextBlock Width="120" Margin="0,1.5" Text="mojanng_" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="柒白绛" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="山药汤圆" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="hrjrb" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ccd114514" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="煦翛" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="xiaozhengjiang" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="梦醒方知梦" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="MCwsj" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="7_Sloth" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="混沌青莲" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="112233" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="cry" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="青椒" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="MostxLingo" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="暖男排狗后面" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="大狗芬里尔" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="xfuiz" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Hilsars" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="翎霜流火" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="但愿如此" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="AF" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="王王的朋友" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="风未酉" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="YukiNoa" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="柠鼠" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="xioaliepei" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="照井黎Terui_Rei" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="1w2w3w" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="奈何" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Dispaper" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="绅士不是坤" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Jason" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Auditor1027" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="上财葬俗" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="スター?プレイヤー007" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="404" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="C-R-Carlos" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="雨霁青青" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="无尽的折腾" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Zheng404" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="IC_Star" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="叶子L" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="E·Nigme·粥" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ccc`" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="shangt541" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="i_c" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="毒饺子" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="花菜球酥" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Guardsman" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="末地大师" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ART_js" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="可爱的安小唯" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="GDDR3" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="不想疏忽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="uuhihj" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="fy-z" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="阿迟" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="古泽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="记得回家吃饭" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Vularia" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="L" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="zzz" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="DD酱です" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="lzzy" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="盐" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="王杰" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="金兔银鲤" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="晓景红" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="66581k" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="zpi寻觅" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="二叠" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="JMHE" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="rjq1212" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="jEVd" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Me4444da" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="NekoTsumiki" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="日笙漓雨" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="天空叶雨" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="隐藏老六" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="YANGGE" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="里的囧啊睡觉的" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="415411户用" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="咱们尬聊吧" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="洛斯里克的旅人" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="寒寒子" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="冬天吃棒冰" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="缘了了" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Hamtaro937" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="404_null_" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="是霭墨哒~" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="also春分" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Rikka" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="罐装冰块." />
-                        <TextBlock Width="120" Margin="0,1.5" Text="mc_niunai" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="一片空白" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="嗨害嗨" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="XxiaozhangX" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="云默_初心" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="番薯" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="佛系的快乐水" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="青雀人间体" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Minecraft00A" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="安东老鼠Anton Rattus" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="KissyXissy" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="α" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="kkx" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="书中君" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="WuCun" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="流年似水" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="坚果饼子" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="风幽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="皿良皮车" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="塌琪" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="dingdang6283" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="无心之眼" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="mc小李" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="把罐子捡起来" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="华子" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="水电风扇" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ahjsvjvs" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="椰汁城传奇" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="梓笙" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="空欢喜" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="是折木木阿" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="BreezyCarp" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="IAMDAEV" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="洛阳蓝焰" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="TC" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Alanshen233" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="DirtySoup" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="江南遇知音" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="目睹世界终焉的不死人" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="PG社区" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="氼乚" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="武陟永" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="关于皆非" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="FVHERFJIKL" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="happy" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="施国祥" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="神秘" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Jerry" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="j-vns" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="飘逸非凡" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="阿飘" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="笑笑狐阿狸" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="罗教授不是歌手" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="某猫" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="YUEZHIHUAN" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="河姆渡鱼化石" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ZeroMostia" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="枯萎的西行妖" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Elyas" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Boris_Vasha" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="凯" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="都是万恶的马哈鱼害的" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="阎阎" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Laotou" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="IN" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="浪客wave" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="A.L" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="xlz" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="幻紫薰" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="落子" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="张卿予" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="无眠" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="苏瑾" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Arthur" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="敬乎尔珍" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="御清宇" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="MJD" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="邸网管" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="chiguaba" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="清风不及君" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="万象聚今朝" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="泗木" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="正义人" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="......" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="镜千视界" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="脆脆屑人" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="海妖" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="5418ly" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="传奇阿玮" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Qian" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="SeaSurgeX" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="hehe" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="凌憬awa" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="我当个混子就行" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="聪聪" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Zhea" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="The_Back-Admin" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="寒雨KanU_" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="衡阳雁去" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="空月" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="IFwikidot管理员" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="是阿改哦" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="铮难弄" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="???" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="锕礸" />
-                        <TextBlock Width="240" Margin="0,1.5" Text="我真的事仁济啊(恼)" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="初辟鸿蒙" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="火丙知日" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="李白" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Tian_bei" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="御风任飞" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="PurplePuffCake" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="倾天" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="柚子_grapefruit_" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="qt2000" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="玉驹素海" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="忘崽小杜" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="才毅" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="smhMCJack" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Muyiyi" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="dingyaa1" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="菍" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="明凡HD" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="SenLin233" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="zjhf" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="末影花生" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="shui素大青花" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="凌梦_dream" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="O.W.B." />
-                        <TextBlock Width="120" Margin="0,1.5" Text="走过的四季" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="风羽" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="梧筱墨" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="StarSky" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="乌罗布罗斯" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Kinllia" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="梦醒皆是虚无" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="ZmdNotFound" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="防水抹布" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="BBK" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="白璃是你姐姐呀" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="天之海" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="花落影" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="小渣渣" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="djhwshm" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Sola18" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="漆黑" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="jian_ke" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="聿丏" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ClarkeTAT" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="东方浅浅" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="王ZEAN" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ayu" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="无所畏惧冷圈人" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="馨軟" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="白加黑" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="梦境之中" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="青枝望月" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="m1nato__" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="法老" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="和十奕" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="give" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="我是只面包猫" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="柒安" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="YUU" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="月下初拥" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="白叶夕秋" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="酸奶炸鱼" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="灵喻" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="_暮霭" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="TylerDeng" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="咸鱼汤鱼咸" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Hugh" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Qiyue" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="CHAKKS" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Silver_1572" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="WIFTAB" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="hmal" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="通大小学弟" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="htenet" />
                     </WrapPanel>
                     <Grid Height="35">
                         <Grid.ColumnDefinitions>

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

@@ -221,6 +221,7 @@
                         If(IsHintIndie, vbCrLf & "由于该版本开启了版本隔离,删除版本时该版本对应的存档、资源包、Mod 等文件也将被一并删除!", ""),
                         "版本删除确认", , "取消",, True)
                 Case 1
+                    IniClearCache(Version.PathIndie & "options.txt")
                     IniClearCache(Version.Path & "PCL\Setup.ini")
                     If IsShiftPressed Then
                         DeleteDirectory(Version.Path)

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

@@ -21,6 +21,7 @@
         {"HintClearRubbish", New SetupEntry(0, Source:=SetupSource.Registry)},
         {"HintUpdateMod", New SetupEntry(False, Source:=SetupSource.Registry)},
         {"HintCustomCommand", New SetupEntry(False, Source:=SetupSource.Registry)},
+        {"HintCustomWarn", New SetupEntry(False, Source:=SetupSource.Registry)},
         {"HintMoreAdvancedSetup", New SetupEntry(False, Source:=SetupSource.Registry)},
         {"HintIndieSetup", New SetupEntry(False, Source:=SetupSource.Registry)},
         {"HintExportConfig", New SetupEntry(False, Source:=SetupSource.Registry)},
@@ -100,7 +101,7 @@
         {"LaunchArgumentWindowHeight", New SetupEntry(480)},
         {"LaunchArgumentWindowType", New SetupEntry(1)},
         {"LaunchArgumentRam", New SetupEntry(False, Source:=SetupSource.Registry)},
-        {"LaunchAdvanceJvm", New SetupEntry("-Dfile.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Djdk.lang.Process.allowAmbiguousCommands=true -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true")},
+        {"LaunchAdvanceJvm", New SetupEntry("-XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Djdk.lang.Process.allowAmbiguousCommands=true -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true")},
         {"LaunchAdvanceGame", New SetupEntry("")},
         {"LaunchAdvanceRun", New SetupEntry("")},
         {"LaunchAdvanceRunWait", New SetupEntry(True)},
@@ -592,11 +593,13 @@
                 FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
                 FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
                 FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
+                FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
             Case 1 '本地
                 FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
                 FrmSetupUI.PanCustomLocal.Visibility = Visibility.Visible
                 FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
                 FrmSetupUI.HintCustom.Visibility = Visibility.Visible
+                FrmSetupUI.HintCustomWarn.Visibility = If(Setup.Get("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
                 FrmSetupUI.HintCustom.Text = $"从 PCL 文件夹下的 Custom.xaml 读取主页内容。{vbCrLf}你可以手动编辑该文件,向主页添加文本、图片、常用网站、快捷启动等功能。"
                 FrmSetupUI.HintCustom.EventType = ""
                 FrmSetupUI.HintCustom.EventData = ""
@@ -605,6 +608,7 @@
                 FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
                 FrmSetupUI.PanCustomNet.Visibility = Visibility.Visible
                 FrmSetupUI.HintCustom.Visibility = Visibility.Visible
+                FrmSetupUI.HintCustomWarn.Visibility = If(Setup.Get("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
                 FrmSetupUI.HintCustom.Text = $"从指定网址联网获取主页内容。服主也可以用于动态更新服务器公告。{vbCrLf}如果你制作了稳定运行的联网主页,可以点击这条提示投稿,若合格即可加入预设!"
                 FrmSetupUI.HintCustom.EventType = "打开网页"
                 FrmSetupUI.HintCustom.EventData = "https://github.com/Hex-Dragon/PCL2/discussions/2528"
@@ -613,6 +617,7 @@
                 FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
                 FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
                 FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
+                FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
         End Select
         FrmSetupUI.CardCustom.TriggerForceResize()
     End Sub

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

@@ -206,6 +206,8 @@
                         <local:MyRadioBox Text="读取本地文件" x:Name="RadioCustomType1" Height="22" Tag="UiCustomType/1" Grid.Column="2" />
                         <local:MyRadioBox Text="联网更新" x:Name="RadioCustomType2" Height="22" Tag="UiCustomType/2" Grid.Column="3" />
                     </Grid>
+                    <local:MyHint Margin="0,15,0,-9" Text="在使用陌生人提供的主页前请务必谨慎,恶意的主页可能会造成损害!" IsWarn="True" x:Name="HintCustomWarn" 
+                                  CanClose="True" RelativeSetup="HintCustomWarn" />
                     <local:MyHint Margin="0,15,0,1" Text="内容见 ModSetup" IsWarn="False" x:Name="HintCustom" />
                     <Grid Height="35" x:Name="PanCustomLocal" Visibility="Collapsed" Margin="0,10,0,5">
                         <Grid.ColumnDefinitions>

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

@@ -176,7 +176,6 @@
                                         <System:String>"</System:String>
                                         <System:String>“</System:String>
                                         <System:String>”</System:String>
-                                        <System:String>/</System:String>
                                         <System:String>http://</System:String>
                                         <System:String>https://</System:String>
                                     </local:ValidateExcept.Excepts>

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

@@ -374,4 +374,11 @@ local:MyIconButton(图标按钮):
  - Theme:设置颜色主题,Color(默认)为当前启动器的主题颜色,也可设置为 White、Black、Red
  - EventType、EventData:触发特定事件
 
+默认会声明以下命名空间:
+ - xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ - xmlns:sys="clr-namespace:System;assembly=mscorlib"
+ - xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ - xmlns:local="clr-namespace:PCL;assembly=Plain Craft Launcher 2"
+除此之外,不能声明其他命名空间。
+
 -->

Разница между файлами не показана из-за своего большого размера
+ 121 - 121
Plain Craft Launcher 2/Resources/ModData.txt


BIN
最新正式版.zip


Некоторые файлы не были показаны из-за большого количества измененных файлов