龙腾猫跃 1 rok temu
rodzic
commit
70636a9a77
25 zmienionych plików z 303 dodań i 279 usunięć
  1. 2 2
      Plain Craft Launcher 2/App.config
  2. 7 0
      Plain Craft Launcher 2/FormMain.xaml.vb
  3. 5 6
      Plain Craft Launcher 2/Modules/Base/ModBase.vb
  4. 3 2
      Plain Craft Launcher 2/Modules/Base/ModNet.vb
  5. 10 21
      Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
  6. 73 83
      Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
  7. 14 11
      Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
  8. 13 5
      Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
  9. 8 6
      Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb
  10. 16 12
      Plain Craft Launcher 2/Modules/Minecraft/MyLocalModItem.xaml.vb
  11. 5 0
      Plain Craft Launcher 2/Modules/ModDevelop.vb
  12. 2 2
      Plain Craft Launcher 2/My Project/AssemblyInfo.vb
  13. 1 1
      Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
  14. 0 1
      Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml
  15. 1 1
      Plain Craft Launcher 2/Pages/PageLaunch/MySkin.xaml.vb
  16. 3 3
      Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
  17. 5 0
      Plain Craft Launcher 2/Pages/PageLaunch/PageLoginLegacy.xaml.vb
  18. 112 99
      Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml
  19. 7 9
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml
  20. 2 2
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml.vb
  21. 1 1
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml
  22. 2 2
      Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.vb
  23. 3 3
      Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb
  24. BIN
      Plain Craft Launcher 2/Resources/Help.zip
  25. 8 7
      Plain Craft Launcher 2/app.manifest

+ 2 - 2
Plain Craft Launcher 2/App.config

@@ -9,8 +9,8 @@
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2"/>
     </startup>
     </startup>
   <runtime>
   <runtime>
-    <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/>
-    <AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/>
+	<AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" />
+	<AppContextSwitchOverrides value="Switch.System.Windows.DoNotScaleForDpiChanges=false"/> <!-- #5337 -->
     <generatePublisherEvidence enabled="false"/>
     <generatePublisherEvidence enabled="false"/>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
       <dependentAssembly>

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

@@ -90,6 +90,13 @@ Public Class FormMain
         '3:BUG+ IMP* FEAT-
         '3:BUG+ IMP* FEAT-
         '2:BUG* IMP-
         '2:BUG* IMP-
         '1:BUG-
         '1:BUG-
+        If LastVersion < 346 Then 'Snapshot 2.8.13
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化网络环境不佳时,Mod、整合包页面的加载速度"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复部分电脑无法打开程序的 Bug"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复可能无法识别、更新 Mod 的 Bug"))
+            FeatureCount += 6
+            BugCount += 14
+        End If
         If LastVersion < 346 Then 'Snapshot 2.8.12
         If LastVersion < 346 Then 'Snapshot 2.8.12
             If LastVersion = 345 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复帮助页面报错的 Bug"))
             If LastVersion = 345 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复帮助页面报错的 Bug"))
         End If
         End If

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

@@ -12,13 +12,13 @@ Public Module ModBase
 #Region "声明"
 #Region "声明"
 
 
     '下列版本信息由更新器自动修改
     '下列版本信息由更新器自动修改
-    Public Const VersionBaseName As String = "2.8.12" '不含分支前缀的显示用版本名
-    Public Const VersionStandardCode As String = "2.8.12." & VersionBranchCode '标准格式的四段式版本号
+    Public Const VersionBaseName As String = "2.8.13" '不含分支前缀的显示用版本名
+    Public Const VersionStandardCode As String = "2.8.13." & 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 = 347 'Release
     Public Const VersionCode As Integer = 347 'Release
 #Else
 #Else
-    Public Const VersionCode As Integer = 346 'Snapshot
+    Public Const VersionCode As Integer = 348 'Snapshot
 #End If
 #End If
     '自动生成的版本信息
     '自动生成的版本信息
     Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
     Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -1975,13 +1975,12 @@ RetryDir:
     End Function
     End Function
 
 
     ''' <summary>
     ''' <summary>
-    ''' 判断当前系统语言是否为中文(中国大陆)。
+    ''' 判断当前系统语言是否为 zh-CN。
     ''' </summary>
     ''' </summary>
     Public Function IsSystemLanguageChinese() As Boolean
     Public Function IsSystemLanguageChinese() As Boolean
         Return CultureInfo.CurrentCulture.Name = "zh-CN" OrElse CultureInfo.CurrentUICulture.Name = "zh-CN"
         Return CultureInfo.CurrentCulture.Name = "zh-CN" OrElse CultureInfo.CurrentUICulture.Name = "zh-CN"
     End Function
     End Function
 
 
-
     Private Uuid As Integer = 1
     Private Uuid As Integer = 1
     Private UuidLock As Object
     Private UuidLock As Object
     ''' <summary>
     ''' <summary>
@@ -2865,4 +2864,4 @@ Retry:
 
 
 #End Region
 #End Region
 
 
-End Module
+End Module

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

@@ -1819,6 +1819,7 @@ Retry:
         Private Sub RefreshStat()
         Private Sub RefreshStat()
             Try
             Try
                 Dim DeltaTime As Long = GetTimeTick() - RefreshStatLast
                 Dim DeltaTime As Long = GetTimeTick() - RefreshStatLast
+                If DeltaTime = 0 Then Return
                 RefreshStatLast += DeltaTime
                 RefreshStatLast += DeltaTime
 #Region "刷新整体速度"
 #Region "刷新整体速度"
                 '计算瞬时速度
                 '计算瞬时速度
@@ -1884,7 +1885,7 @@ Retry:
                         For Each File As NetFile In WaitingFiles
                         For Each File As NetFile In WaitingFiles
                             If NetTaskThreadCount >= NetTaskThreadLimit Then Continue While '最大线程数检查
                             If NetTaskThreadCount >= NetTaskThreadLimit Then Continue While '最大线程数检查
                             Dim NewThread = File.TryBeginThread()
                             Dim NewThread = File.TryBeginThread()
-                            If NewThread IsNot Nothing AndAlso NewThread.Source.Url.Contains("bmclapi") Then Thread.Sleep(70) '减少 BMCLAPI 请求频率,避免 Too Many Requests
+                            If NewThread IsNot Nothing AndAlso NewThread.Source.Url.Contains("bmclapi") Then Thread.Sleep(100) '减少 BMCLAPI 请求频率,避免 Too Many Requests
                         Next
                         Next
                         '为进行中的文件追加线程
                         '为进行中的文件追加线程
                         If Speed >= NetTaskSpeedLimitLow Then Continue While '下载速度足够,无需新增
                         If Speed >= NetTaskSpeedLimitLow Then Continue While '下载速度足够,无需新增
@@ -1904,7 +1905,7 @@ Retry:
                             '新增线程
                             '新增线程
                             If PreparingCount > DownloadingCount Then Continue For '准备中的线程已多于下载中的线程,不再新增
                             If PreparingCount > DownloadingCount Then Continue For '准备中的线程已多于下载中的线程,不再新增
                             Dim NewThread = File.TryBeginThread()
                             Dim NewThread = File.TryBeginThread()
-                            If NewThread IsNot Nothing AndAlso NewThread.Source.Url.Contains("bmclapi") Then Thread.Sleep(70) '减少 BMCLAPI 请求频率,避免 Too Many Requests
+                            If NewThread IsNot Nothing AndAlso NewThread.Source.Url.Contains("bmclapi") Then Thread.Sleep(100) '减少 BMCLAPI 请求频率,避免 Too Many Requests
                         Next
                         Next
                     End While
                     End While
                 Catch ex As Exception
                 Catch ex As Exception

+ 10 - 21
Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb

@@ -434,11 +434,8 @@
         Public Function ToCompItem(ShowMcVersionDesc As Boolean, ShowLoaderDesc As Boolean) As MyCompItem
         Public Function ToCompItem(ShowMcVersionDesc As Boolean, ShowLoaderDesc As Boolean) As MyCompItem
             '获取版本描述
             '获取版本描述
             Dim GameVersionDescription As String
             Dim GameVersionDescription As String
-            Dim AllSnapshot As Boolean = GameVersions.All(Function(v) RegexCheck(v, "[0-9]{2}w[0-9]{2}[a-z]{1}"))
-            If AllSnapshot Then
-                GameVersionDescription = "仅快照版本"
-            ElseIf GameVersions Is Nothing OrElse Not GameVersions.Any() Then
-                GameVersionDescription = "未知"
+            If GameVersions Is Nothing OrElse Not GameVersions.Any() Then
+                GameVersionDescription = "仅快照版本" '#5412
             Else
             Else
                 Dim SpaVersions As New List(Of String)
                 Dim SpaVersions As New List(Of String)
                 Dim IsOld As Boolean = False
                 Dim IsOld As Boolean = False
@@ -496,17 +493,11 @@
                     ModLoaderDescriptionFull = "仅 " & ModLoadersForDesc.Single.ToString
                     ModLoaderDescriptionFull = "仅 " & ModLoadersForDesc.Single.ToString
                     ModLoaderDescriptionPart = ModLoadersForDesc.Single.ToString
                     ModLoaderDescriptionPart = ModLoadersForDesc.Single.ToString
                 Case Else
                 Case Else
-                    If ModLoaders.Contains(CompModLoaderType.Forge) AndAlso Not AllSnapshot AndAlso
-                       (GameVersions.Max < 14 OrElse ModLoaders.Contains(CompModLoaderType.Fabric)) AndAlso
-                       (GameVersions.Max < 20 OrElse ModLoaders.Contains(CompModLoaderType.NeoForge)) AndAlso
-                       (GameVersions.Max < 14 OrElse ModLoaders.Contains(CompModLoaderType.Quilt) OrElse Setup.Get("ToolDownloadIgnoreQuilt")) Then
-                        ModLoaderDescriptionFull = "任意"
-                        ModLoaderDescriptionPart = ""
-                    ElseIf AllSnapshot AndAlso
-                        ModLoaders.Contains(CompModLoaderType.Forge) AndAlso
-                        ModLoaders.Contains(CompModLoaderType.Fabric) AndAlso
-                        ModLoaders.Contains(CompModLoaderType.NeoForge) AndAlso
-                        (ModLoaders.Contains(CompModLoaderType.Quilt) OrElse Setup.Get("ToolDownloadIgnoreQuilt")) Then
+                    Dim MaxVersion As Integer = If(GameVersions.Any, GameVersions.Max, 99)
+                    If ModLoaders.Contains(CompModLoaderType.Forge) AndAlso
+                       (MaxVersion < 14 OrElse ModLoaders.Contains(CompModLoaderType.Fabric)) AndAlso
+                       (MaxVersion < 20 OrElse ModLoaders.Contains(CompModLoaderType.NeoForge)) AndAlso
+                       (MaxVersion < 14 OrElse ModLoaders.Contains(CompModLoaderType.Quilt) OrElse Setup.Get("ToolDownloadIgnoreQuilt")) Then
                         ModLoaderDescriptionFull = "任意"
                         ModLoaderDescriptionFull = "任意"
                         ModLoaderDescriptionPart = ""
                         ModLoaderDescriptionPart = ""
                     Else
                     Else
@@ -1083,7 +1074,7 @@ Retry:
 
 
         If RealResults.Count + Storage.Results.Count < Task.Input.TargetResultCount Then
         If RealResults.Count + Storage.Results.Count < Task.Input.TargetResultCount Then
             Log($"[Comp] 总结果数需求最少 {Task.Input.TargetResultCount} 个,仅获得了 {RealResults.Count + Storage.Results.Count} 个")
             Log($"[Comp] 总结果数需求最少 {Task.Input.TargetResultCount} 个,仅获得了 {RealResults.Count + Storage.Results.Count} 个")
-            If Task.Input.CanContinue Then
+            If Task.Input.CanContinue AndAlso [Error] Is Nothing Then '如果有下载源失败则不再重试,这时候重试可能导致无限循环
                 Log("[Comp] 将继续尝试加载下一页")
                 Log("[Comp] 将继续尝试加载下一页")
                 GoTo Retry
                 GoTo Retry
             Else
             Else
@@ -1491,10 +1482,8 @@ Retry:
         If Deps.Any Then
         If Deps.Any Then
             For Each DepProject In Deps.Where(Function(id) CompProjectCache.ContainsKey(id)).Select(Function(id) CompProjectCache(id))
             For Each DepProject In Deps.Where(Function(id) CompProjectCache.ContainsKey(id)).Select(Function(id) CompProjectCache(id))
                 For Each File In CompFilesCache(ProjectId)
                 For Each File In CompFilesCache(ProjectId)
-                    If File.RawDependencies.Contains(DepProject.Id) AndAlso
-                    DepProject.Id <> ProjectId AndAlso 
-                    Not File.Dependencies.Contains(DepProject.Id) Then
-                        File.Dependencies.Add(DepProject.Id)
+                    If File.RawDependencies.Contains(DepProject.Id) AndAlso DepProject.Id <> ProjectId Then
+                        If Not File.Dependencies.Contains(DepProject.Id) Then File.Dependencies.Add(DepProject.Id)
                     End If
                     End If
                 Next
                 Next
             Next
             Next

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

@@ -1098,39 +1098,27 @@
     ''' 调用 NetGetCodeByRequest。
     ''' 调用 NetGetCodeByRequest。
     ''' </summary>
     ''' </summary>
     Public Function DlModRequest(Url As String, Optional IsJson As Boolean = False) As Object
     Public Function DlModRequest(Url As String, Optional IsJson As Boolean = False) As Object
-        Dim McimUrl As String = DlSourceModGet(Url)
         Dim Urls As New List(Of KeyValuePair(Of String, Integer))
         Dim Urls As New List(Of KeyValuePair(Of String, Integer))
-        If McimUrl <> Url Then
-            Select Case Setup.Get("ToolDownloadMod")
-                'TODO: 在 MCIM 源稳定后回调
-                Case 0
-                    If ModeDebug Then
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 20))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60))
-                    Else
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 20))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-                    End If
-                Case 1
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 20))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-                Case Else
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-            End Select
-        End If
+        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
+        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
+        'Dim McimUrl As String = DlSourceModGet(Url)
+        'If McimUrl <> Url Then
+        '    Select Case Setup.Get("ToolDownloadMod")
+        '        Case 0
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5))
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
+        '        Case 1
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5))
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
+        '        Case Else
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
+        '            Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
+        '    End Select
+        'End If
         Dim Exs As String = ""
         Dim Exs As String = ""
         For Each Source In Urls
         For Each Source In Urls
             Try
             Try
@@ -1147,39 +1135,27 @@
     ''' 调用 NetRequest。
     ''' 调用 NetRequest。
     ''' </summary>
     ''' </summary>
     Public Function DlModRequest(Url As String, Method As String, Data As String, ContentType As String) As String
     Public Function DlModRequest(Url As String, Method As String, Data As String, ContentType As String) As String
-        Dim McimUrl As String = DlSourceModGet(Url)
         Dim Urls As New List(Of KeyValuePair(Of String, Integer))
         Dim Urls As New List(Of KeyValuePair(Of String, Integer))
-        If McimUrl <> Url Then
-            Select Case Setup.Get("ToolDownloadMod")
-                'TODO: 在 MCIM 源稳定后回调
-                Case 0
-                    If ModeDebug Then
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 20))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60))
-                    Else
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 20))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60))
-                        Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-                    End If
-                Case 1
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 20))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 30))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-                Case Else
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 30))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(Url, 60))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-                    Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 60))
-            End Select
-        End If
+        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
+        Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
+        'Dim McimUrl As String = DlSourceModGet(Url)
+        'If McimUrl <> Url Then
+        '   Select Case Setup.Get("ToolDownloadMod")
+        '       Case 0
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5))
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
+        '       Case 1
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 5))
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
+        '       Case Else
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(Url, 5))
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(Url, 15))
+        '           Urls.Add(New KeyValuePair(Of String, Integer)(McimUrl, 10))
+        '   End Select
+        'End If
         Dim Exs As String = ""
         Dim Exs As String = ""
         For Each Source In Urls
         For Each Source In Urls
             Try
             Try
@@ -1207,28 +1183,42 @@
     End Function
     End Function
 
 
     Public Function DlSourceLibraryGet(Original As String) As String()
     Public Function DlSourceLibraryGet(Original As String) As String()
-        Return {
-            Original.
-                Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/maven").
-                Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/maven").
-                Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/maven"),
-            Original.
-                Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/libraries").
-                Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/libraries").
-                Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/libraries"),
-            Original
-        }
+        If {"minecraftforge", "fabricmc", "neoforged"}.Any(Function(k) Original.Contains(k)) Then '不添加原版源
+            Return {
+                Original.
+                    Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/maven").
+                    Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/maven").
+                    Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/maven"),
+                Original.
+                    Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/libraries").
+                    Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/libraries").
+                    Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/libraries")
+            }
+        Else
+            Return {
+                Original.
+                    Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/maven").
+                    Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/maven").
+                    Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/maven"),
+                Original.
+                    Replace("https://piston-data.mojang.com", "https://bmclapi2.bangbang93.com/libraries").
+                    Replace("https://piston-meta.mojang.com", "https://bmclapi2.bangbang93.com/libraries").
+                    Replace("https://libraries.minecraft.net", "https://bmclapi2.bangbang93.com/libraries"),
+                Original
+            }
+        End If
     End Function
     End Function
 
 
     Public Function DlSourceModGet(Original As String) As String
     Public Function DlSourceModGet(Original As String) As String
-        Return Original.
-            Replace("api.modrinth.com", "mod.mcimirror.top/modrinth").
-            Replace("staging-api.modrinth.com", "mod.mcimirror.top/modrinth").
-            Replace("cdn.modrinth.com", "mod.mcimirror.top").
-            Replace("api.curseforge.com", "mod.mcimirror.top/curseforge").
-            Replace("edge.forgecdn.net", "mod.mcimirror.top").
-            Replace("mediafilez.forgecdn.net", "mod.mcimirror.top").
-            Replace("media.forgecdn.net", "mod.mcimirror.top")
+        Return Original
+        'Return Original.
+        '    Replace("api.modrinth.com", "mod.mcimirror.top/modrinth").
+        '    Replace("staging-api.modrinth.com", "mod.mcimirror.top/modrinth").
+        '    Replace("cdn.modrinth.com", "mod.mcimirror.top").
+        '    Replace("api.curseforge.com", "mod.mcimirror.top/curseforge").
+        '    Replace("edge.forgecdn.net", "mod.mcimirror.top").
+        '    Replace("mediafilez.forgecdn.net", "mod.mcimirror.top").
+        '    Replace("media.forgecdn.net", "mod.mcimirror.top")
     End Function
     End Function
 
 
     Public Function DlSourceLauncherOrMetaGet(Original As String) As String()
     Public Function DlSourceLauncherOrMetaGet(Original As String) As String()

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

@@ -236,15 +236,18 @@ NextInner:
         '正版购买提示
         '正版购买提示
         If Not Setup.Get("HintBuy") AndAlso Setup.Get("LoginType") <> McLoginType.Ms Then
         If Not Setup.Get("HintBuy") AndAlso Setup.Get("LoginType") <> McLoginType.Ms Then
             If IsSystemLanguageChinese() Then
             If IsSystemLanguageChinese() Then
-                Select Case Setup.Get("SystemLaunchCount")
-                    Case 3, 8, 15, 30, 50, 70, 90, 110, 130, 180, 220, 280, 330, 380, 450, 550, 660, 750, 880, 950, 1100, 1300, 1500, 1700, 1900
-                        If MyMsgBox("你已经启动了 " & Setup.Get("SystemLaunchCount") & " 次 Minecraft 啦!" & vbCrLf &
-                                    "如果觉得 Minecraft 还不错,可以购买正版支持一下,毕竟开发游戏也真的很不容易……不要一直白嫖啦。" & vbCrLf & vbCrLf &
-                                    "在登录一次正版账号后,就不会再出现这个提示了!",
-                                    "考虑一下正版?", "支持正版游戏!", "下次一定") = 1 Then
-                            OpenWebsite("https://www.xbox.com/zh-cn/games/store/minecraft-java-bedrock-edition-for-pc/9nxp44l49shj")
-                        End If
-                End Select
+                RunInNewThread(
+                Sub()
+                    Select Case Setup.Get("SystemLaunchCount")
+                        Case 3, 8, 15, 30, 50, 70, 90, 110, 130, 180, 220, 280, 330, 380, 450, 550, 660, 750, 880, 950, 1100, 1300, 1500, 1700, 1900
+                            If MyMsgBox("你已经启动了 " & Setup.Get("SystemLaunchCount") & " 次 Minecraft 啦!" & vbCrLf &
+                                "如果觉得 Minecraft 还不错,可以购买正版支持一下,毕竟开发游戏也真的很不容易……不要一直白嫖啦。" & vbCrLf & vbCrLf &
+                                "在登录一次正版账号后,就不会再出现这个提示了!",
+                                "考虑一下正版?", "支持正版游戏!", "下次一定") = 1 Then
+                                OpenWebsite("https://www.xbox.com/zh-cn/games/store/minecraft-java-bedrock-edition-for-pc/9nxp44l49shj")
+                            End If
+                    End Select
+                End Sub, "Buy Minecraft")
             ElseIf Setup.Get("LoginType") = McLoginType.Legacy Then
             ElseIf Setup.Get("LoginType") = McLoginType.Legacy Then
                 Select Case MyMsgBox("你必须先登录正版账号,才能进行离线登录!", "正版验证", "购买正版", "试玩", "返回",
                 Select Case MyMsgBox("你必须先登录正版账号,才能进行离线登录!", "正版验证", "购买正版", "试玩", "返回",
                     Button1Action:=Sub() OpenWebsite("https://www.xbox.com/zh-cn/games/store/minecraft-java-bedrock-edition-for-pc/9nxp44l49shj"))
                     Button1Action:=Sub() OpenWebsite("https://www.xbox.com/zh-cn/games/store/minecraft-java-bedrock-edition-for-pc/9nxp44l49shj"))
@@ -2045,8 +2048,8 @@ IgnoreCustomSkin:
                 "@echo off" & vbCrLf &
                 "@echo off" & vbCrLf &
                 "title 启动 - " & McVersionCurrent.Name & vbCrLf &
                 "title 启动 - " & McVersionCurrent.Name & vbCrLf &
                 "echo 游戏正在启动,请稍候。" & vbCrLf &
                 "echo 游戏正在启动,请稍候。" & vbCrLf &
-                "set APPDATA=""" & PathMcFolder & """" & vbCrLf &
-                "cd /D """ & PathMcFolder & """" & vbCrLf &
+                "set APPDATA=""" & McVersionCurrent.PathIndie & """" & vbCrLf &
+                "cd /D """ & McVersionCurrent.PathIndie & """" & vbCrLf &
                 CustomCommandGlobal & vbCrLf &
                 CustomCommandGlobal & vbCrLf &
                 CustomCommandVersion & vbCrLf &
                 CustomCommandVersion & vbCrLf &
                 """" & McLaunchJavaSelected.PathJava & """ " & McLaunchArgument & vbCrLf &
                 """" & McLaunchJavaSelected.PathJava & """ " & McLaunchArgument & vbCrLf &

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

@@ -2037,8 +2037,12 @@ OnLoaded:
             If Checker.Check(Token.LocalPath) Is Nothing Then Continue For
             If Checker.Check(Token.LocalPath) Is Nothing Then Continue For
             '文件不符合,添加下载
             '文件不符合,添加下载
             Dim Urls As New List(Of String)
             Dim Urls As New List(Of String)
+            If Token.Url Is Nothing AndAlso Token.Name = "net.minecraftforge:forge:universal" Then
+                '特判修复 Forge 部分 universal 文件缺失 URL(#5455)
+                Token.Url = "https://maven.minecraftforge.net" & Token.LocalPath.Replace(If(Token.IsJumpLoader, JumpLoaderFolder, CustomMcFolder) & "libraries", "").Replace("\", "/")
+            End If
             If Token.Url IsNot Nothing Then
             If Token.Url IsNot Nothing Then
-                '获取 Url 的真实地址
+                '获取 URL 的真实地址
                 Urls.Add(Token.Url)
                 Urls.Add(Token.Url)
                 If Token.Url.Contains("launcher.mojang.com/v1/objects") OrElse Token.Url.Contains("client.txt") OrElse
                 If Token.Url.Contains("launcher.mojang.com/v1/objects") OrElse Token.Url.Contains("client.txt") OrElse
                    Token.Url.Contains(".tsrg") Then
                    Token.Url.Contains(".tsrg") Then
@@ -2080,10 +2084,14 @@ OnLoaded:
         McLibGet = If(WithHead, CustomMcFolder & "libraries\", "") &
         McLibGet = If(WithHead, CustomMcFolder & "libraries\", "") &
                    Splited(0).Replace(".", "\") & "\" & Splited(1) & "\" & Splited(2) & "\" & Splited(1) & "-" & Splited(2) & ".jar"
                    Splited(0).Replace(".", "\") & "\" & Splited(1) & "\" & Splited(2) & "\" & Splited(1) & "-" & Splited(2) & ".jar"
         '判断 OptiFine 是否应该使用 installer
         '判断 OptiFine 是否应该使用 installer
-        If McLibGet.Contains("optifine\OptiFine\1.12") AndAlso '仅在 1.12 OptiFine 可重现
-           File.Exists(CustomMcFolder & "libraries\" & Splited(0).Replace(".", "\") & "\" & Splited(1) & "\" & Splited(2) & "\" & Splited(1) & "-" & Splited(2) & "-installer.jar") Then
-            Log("[Launch] 已将 " & Original & " 特判替换为对应的 Installer 文件", LogLevel.Debug)
-            McLibGet = McLibGet.Replace(".jar", "-installer.jar")
+        If McLibGet.Contains("optifine\OptiFine\1.") AndAlso Splited(2).Split(".").Count > 1 Then
+            Dim MajorVersion As Integer = Val(Splited(2).Split(".")(1))
+            Dim MinorVersion As Integer = If(Splited(2).Split(".").Count > 1, Val(Splited(2).Split(".")(2).BeforeFirst("_")), 0)
+            If (MajorVersion = 12 OrElse (MajorVersion = 20 AndAlso MinorVersion >= 4) OrElse MajorVersion >= 21) AndAlso '仅在 1.12 (无法追溯) 和 1.20.4+ (#5376) 遇到此问题
+                File.Exists($"{CustomMcFolder}libraries\{Splited(0).Replace(".", "\")}\{Splited(1)}\{Splited(2)}\{Splited(1)}-{Splited(2)}-installer.jar") Then
+                McLaunchLog("已将 " & Original & " 替换为对应的 Installer 文件")
+                McLibGet = McLibGet.Replace(".jar", "-installer.jar")
+            End If
         End If
         End If
     End Function
     End Function
 
 

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

@@ -241,9 +241,7 @@ Retry:
             '获取 Mod 下载信息
             '获取 Mod 下载信息
             ModDownloadLoaders.Add(New LoaderTask(Of Integer, JArray)("获取 Mod 下载信息",
             ModDownloadLoaders.Add(New LoaderTask(Of Integer, JArray)("获取 Mod 下载信息",
             Sub(Task As LoaderTask(Of Integer, JArray))
             Sub(Task As LoaderTask(Of Integer, JArray))
-                '由于 MCIM 缺少下载信息,只使用官方源获取列表
-                'TODO: 在 MCIM 源稳定后回调回 DlModRequest
-                Task.Output = GetJson(NetRequestRetry("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModList, ",") & "]}", "application/json"))("data")
+                Task.Output = GetJson(DlModRequest("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModList, ",") & "]}", "application/json"))("data")
                 '如果文件已被删除,则 API 会跳过那一项
                 '如果文件已被删除,则 API 会跳过那一项
                 If ModList.Count > Task.Output.Count Then Throw New Exception("整合包中的部分 Mod 版本已被 Mod 作者删除,所以没法继续安装了,请向整合包作者反馈该问题")
                 If ModList.Count > Task.Output.Count Then Throw New Exception("整合包中的部分 Mod 版本已被 Mod 作者删除,所以没法继续安装了,请向整合包作者反馈该问题")
             End Sub) With {.ProgressWeight = ModList.Count / 10}) '每 10 Mod 需要 1s
             End Sub) With {.ProgressWeight = ModList.Count / 10}) '每 10 Mod 需要 1s
@@ -798,14 +796,18 @@ Retry:
                 Thread.Sleep(400) '避免文件争用
                 Thread.Sleep(400) '避免文件争用
                 '查找解压后的 exe 文件
                 '查找解压后的 exe 文件
                 Dim Launcher As String = Nothing
                 Dim Launcher As String = Nothing
-                For Each ExeFile In Directory.GetFiles(TargetFolder, "*.exe", SearchOption.AllDirectories)
+                For Each ExeFile In Directory.GetFiles(TargetFolder, "*.exe", SearchOption.TopDirectoryOnly)
                     Dim Info = FileVersionInfo.GetVersionInfo(ExeFile)
                     Dim Info = FileVersionInfo.GetVersionInfo(ExeFile)
                     Log($"[Modpack] 文件 {ExeFile} 的产品名标识为 {Info.ProductName}")
                     Log($"[Modpack] 文件 {ExeFile} 的产品名标识为 {Info.ProductName}")
                     If Info.ProductName = "Plain Craft Launcher" Then
                     If Info.ProductName = "Plain Craft Launcher" Then
                         Launcher = ExeFile
                         Launcher = ExeFile
-                    ElseIf (Info.ProductName.ContainsF("Launcher", True) OrElse Info.ProductName.ContainsF("启动器", True)) AndAlso
+                        Log($"[Modpack] 发现整合包附带的 PCL 启动器:{ExeFile}")
+                    ElseIf (Info.ProductName.ContainsF("Launcher", True) OrElse Info.ProductName.ContainsF("启动", True)) AndAlso
                         Not Info.ProductName = "Plain Craft Launcher Admin Manager" Then
                         Not Info.ProductName = "Plain Craft Launcher Admin Manager" Then
-                        If Launcher Is Nothing Then Launcher = ExeFile
+                        If Launcher Is Nothing Then
+                            Launcher = ExeFile
+                            Log($"[Modpack] 发现整合包附带的疑似第三方启动器:{ExeFile}")
+                        End If
                     End If
                     End If
                 Next
                 Next
                 Task.Progress = 0.95
                 Task.Progress = 0.95

+ 16 - 12
Plain Craft Launcher 2/Modules/Minecraft/MyLocalModItem.xaml.vb

@@ -137,18 +137,14 @@ Public Class MyLocalModItem
             Exit Sub
             Exit Sub
         End If
         End If
         '计算滑动范围
         '计算滑动范围
-        Dim Index = CType(Parent, StackPanel).Children.IndexOf(Me)
-        If Index < 0 OrElse Index >= CType(Parent, StackPanel).Children.Count Then Exit Sub
-        SwipeStart = Math.Min(SwipeStart, Index)
-        SwipeEnd = Math.Max(SwipeEnd, Index)
-        If SwipeStart < 0 Then SwipeStart = 0
-        If SwipeEnd < 0 Then SwipeEnd = 0
-        If SwipeStart >= CType(Parent, StackPanel).Children.Count Then SwipeStart = CType(Parent, StackPanel).Children.Count - 1
-        If SwipeEnd >= CType(Parent, StackPanel).Children.Count Then SwipeEnd = CType(Parent, StackPanel).Children.Count - 1
+        Dim Elements = CType(Parent, StackPanel).Children
+        Dim Index As Integer = Elements.IndexOf(Me)
+        SwipeStart = MathClamp(Math.Min(SwipeStart, Index), 0, Elements.Count - 1)
+        SwipeEnd = MathClamp(Math.Max(SwipeEnd, Index), 0, Elements.Count - 1)
         '勾选所有范围中的项
         '勾选所有范围中的项
         If SwipeStart = SwipeEnd Then Exit Sub
         If SwipeStart = SwipeEnd Then Exit Sub
         For i = SwipeStart To SwipeEnd
         For i = SwipeStart To SwipeEnd
-            Dim Item As MyLocalModItem = CType(Parent, StackPanel).Children(i)
+            Dim Item As MyLocalModItem = Elements(i)
             Item.InitLate(Item, e)
             Item.InitLate(Item, e)
             Item.Checked = SwipToState
             Item.Checked = SwipToState
         Next
         Next
@@ -466,8 +462,11 @@ Public Class MyLocalModItem
     End Sub
     End Sub
 
 
     '显示更新日志
     '显示更新日志
-    Private Sub ShowUpdateLog(sender As Object, e As MouseButtonEventArgs) Handles BtnUpdate.PreviewMouseRightButtonUp
+    Private Sub BtnUpdate_PreviewMouseRightButtonUp(sender As Object, e As MouseButtonEventArgs) Handles BtnUpdate.PreviewMouseRightButtonUp
         e.Handled = True
         e.Handled = True
+        ShowUpdateLog()
+    End Sub
+    Private Sub ShowUpdateLog()
         Dim CurseForgeUrl As String = Entry.ChangelogUrls.FirstOrDefault(Function(x) x.Contains("curseforge.com"))
         Dim CurseForgeUrl As String = Entry.ChangelogUrls.FirstOrDefault(Function(x) x.Contains("curseforge.com"))
         Dim ModrinthUrl As String = Entry.ChangelogUrls.FirstOrDefault(Function(x) x.Contains("modrinth.com"))
         Dim ModrinthUrl As String = Entry.ChangelogUrls.FirstOrDefault(Function(x) x.Contains("modrinth.com"))
         If CurseForgeUrl Is Nothing OrElse ModrinthUrl Is Nothing Then
         If CurseForgeUrl Is Nothing OrElse ModrinthUrl Is Nothing Then
@@ -484,8 +483,13 @@ Public Class MyLocalModItem
 
 
     '触发更新
     '触发更新
     Private Sub BtnUpdate_Click(sender As Object, e As EventArgs) Handles BtnUpdate.Click
     Private Sub BtnUpdate_Click(sender As Object, e As EventArgs) Handles BtnUpdate.Click
-        If MyMsgBox($"是否要更新 {Entry.Name}?{vbCrLf}{vbCrLf}{GetUpdateCompareDescription()}", "Mod 更新确认", "更新", "取消") = 2 Then Return
-        FrmVersionMod.UpdateMods({Entry})
+        Select Case MyMsgBox($"是否要更新 {Entry.Name}?{vbCrLf}{vbCrLf}{GetUpdateCompareDescription()}", "Mod 更新确认", "更新", "查看更新日志", "取消")
+            Case 1 '更新
+                FrmVersionMod.UpdateMods({Entry})
+            Case 2 '查看更新日志
+                ShowUpdateLog()
+            Case 3 '取消
+        End Select
     End Sub
     End Sub
 
 
     '自适应(#4465)
     '自适应(#4465)

+ 5 - 0
Plain Craft Launcher 2/Modules/ModDevelop.vb

@@ -1,3 +1,8 @@
 Public Module ModDevelop
 Public Module ModDevelop
 
 
+#If DEBUG Then
+    Public Sub Start()
+    End Sub
+#End If
+
 End Module
 End Module

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

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

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

@@ -1353,7 +1353,7 @@ Retry:
                     '去除其中的原始 Forgelike 项
                     '去除其中的原始 Forgelike 项
                     For i = 0 To Libs.Count - 1
                     For i = 0 To Libs.Count - 1
                         If Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}.jar") OrElse
                         If Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}.jar") OrElse
-Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}-client.jar") Then
+                           Libs(i).LocalPath.EndsWithF($"{LoaderName.ToLower}-{Inherit}-{LoaderVersion}-client.jar") Then
                             Log($"[Download] 已从待下载 {LoaderName} 支持库中移除:" & Libs(i).LocalPath, LogLevel.Debug)
                             Log($"[Download] 已从待下载 {LoaderName} 支持库中移除:" & Libs(i).LocalPath, LogLevel.Debug)
                             Libs.RemoveAt(i)
                             Libs.RemoveAt(i)
                             Exit For
                             Exit For

+ 0 - 1
Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml

@@ -9,7 +9,6 @@
             <Grid.RowDefinitions>
             <Grid.RowDefinitions>
                 <RowDefinition Height="Auto" />
                 <RowDefinition Height="Auto" />
                 <RowDefinition Height="1*" />
                 <RowDefinition Height="1*" />
-                <RowDefinition Height="Auto" />
             </Grid.RowDefinitions>
             </Grid.RowDefinitions>
             <local:MyCard Margin="0,0,0,25" x:Name="CardIntro">
             <local:MyCard Margin="0,0,0,25" x:Name="CardIntro">
                 <StackPanel Margin="22,18,22,19" x:Name="PanIntro">
                 <StackPanel Margin="22,18,22,19" x:Name="PanIntro">

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

@@ -242,7 +242,7 @@ Retry:
                             {"Vanilla", "原版披风"}, {"Minecon2011", "Minecon 2011 参与者披风"}, {"Minecon2012", "Minecon 2012 参与者披风"},
                             {"Vanilla", "原版披风"}, {"Minecon2011", "Minecon 2011 参与者披风"}, {"Minecon2012", "Minecon 2012 参与者披风"},
                             {"Minecon2013", "Minecon 2013 参与者披风"}, {"Minecon2015", "Minecon 2015 参与者披风"}, {"Minecon2016", "Minecon 2016 参与者披风"},
                             {"Minecon2013", "Minecon 2013 参与者披风"}, {"Minecon2015", "Minecon 2015 参与者披风"}, {"Minecon2016", "Minecon 2016 参与者披风"},
                             {"Cherry Blossom", "樱花披风"}, {"15th Anniversary", "15 周年纪念披风"}, {"Purple Heart", "紫色心形披风"},
                             {"Cherry Blossom", "樱花披风"}, {"15th Anniversary", "15 周年纪念披风"}, {"Purple Heart", "紫色心形披风"},
-                            {"Follower's", "追随者披风"}, {"MCC 15th Year", "MCC 15 周年披风"}, {"Minecraft Experience", "村民救援披风"}, 
+                            {"Follower's", "追随者披风"}, {"MCC 15th Year", "MCC 15 周年披风"}, {"Minecraft Experience", "村民救援披风"},
                             {"Mojang Office", "Mojang 办公室披风"}
                             {"Mojang Office", "Mojang 办公室披风"}
                         }
                         }
                         Dim SelectionControl As New List(Of IMyRadio) From {New MyRadioBox With {.Text = "无披风"}}
                         Dim SelectionControl As New List(Of IMyRadio) From {New MyRadioBox With {.Text = "无披风"}}

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

@@ -109,11 +109,11 @@ Download:
                         GoTo Download
                         GoTo Download
                     Case 7
                     Case 7
                         Log("[Page] 主页预设:主页市场")
                         Log("[Page] 主页预设:主页市场")
-                        Url = "https://homepage-market.pages.dev/Custom.xaml"
+                        Url = "https://pclhomeplazaoss.lingyunawa.top:26994/d/Homepages/JingHai-Lingyun/Custom.xaml"
                         GoTo Download
                         GoTo Download
                     Case 8
                     Case 8
                         Log("[Page] 主页预设:更新日志")
                         Log("[Page] 主页预设:更新日志")
-                        Url = "https://updatehomepage.pages.dev/UpdateHomepage.xaml"
+                        Url = "https://pclhomeplazaoss.lingyunawa.top:26994/d/Homepages/Joker2184/UpdateHomepage.xaml"
                         GoTo Download
                         GoTo Download
                     Case 9
                     Case 9
                         Log("[Page] 主页预设:PCL 新功能说明书")
                         Log("[Page] 主页预设:PCL 新功能说明书")
@@ -125,7 +125,7 @@ Download:
                         GoTo Download
                         GoTo Download
                     Case 11
                     Case 11
                         Log("[Page] 主页预设:杂志主页")
                         Log("[Page] 主页预设:杂志主页")
-                        Url = "http://pclhomeplazaoss.lingyunawa.top:26994/d/Homepages/Ext1nguisher/Custom.xaml"
+                        Url = "https://pclhomeplazaoss.lingyunawa.top:26994/d/Homepages/Ext1nguisher/Custom.xaml"
                         GoTo Download
                         GoTo Download
                 End Select
                 End Select
         End Select
         End Select

+ 5 - 0
Plain Craft Launcher 2/Pages/PageLaunch/PageLoginLegacy.xaml.vb

@@ -44,6 +44,11 @@ Public Class PageLoginLegacy
     Public Shared Function IsVaild(LoginData As McLoginLegacy) As String
     Public Shared Function IsVaild(LoginData As McLoginLegacy) As String
         If LoginData.UserName.Trim = "" Then Return "玩家名不能为空!"
         If LoginData.UserName.Trim = "" Then Return "玩家名不能为空!"
         If LoginData.UserName.Contains("""") Then Return "玩家名不能包含英文引号!"
         If LoginData.UserName.Contains("""") Then Return "玩家名不能包含英文引号!"
+        If McVersionCurrent IsNot Nothing AndAlso
+           ((McVersionCurrent.Version.McCodeMain = 20 AndAlso McVersionCurrent.Version.McCodeSub >= 3) OrElse McVersionCurrent.Version.McCodeMain > 20) AndAlso
+           LoginData.UserName.Trim.Length > 16 Then
+            Return "自 1.20.3 起,玩家名至多只能包含 16 个字符!"
+        End If
         Return ""
         Return ""
     End Function
     End Function
     Public Function IsVaild() As String
     Public Function IsVaild() As String

+ 112 - 99
Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml

@@ -104,107 +104,120 @@
             </local:MyCard>
             </local:MyCard>
             <local:MyCard Margin="0,0,0,15" Title="赞助者">
             <local:MyCard Margin="0,0,0,15" Title="赞助者">
                 <StackPanel Margin="25,40,10,20">
                 <StackPanel Margin="25,40,10,20">
-                    <TextBlock HorizontalAlignment="Left" Text="以下是 2024 年 11 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
+                    <TextBlock HorizontalAlignment="Left" Text="以下是 2024 年 12 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
                     <WrapPanel Margin="0,0,0,10">
                     <WrapPanel Margin="0,0,0,10">
-                        <TextBlock Width="120" Margin="0,1.5" Text="枫星Maplestar" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="阿道" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="GuZhuJing" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="情鼠啾啾" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="蛇蛇W" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="蜜汁青柠檬" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="纸先生" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="CLOUD079" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="xiaoioax" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="CH土块警长" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="CHENJUN551" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Ezzo" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="夜抱?吃火炉" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Rn_Og" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="六个芙桃" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="月月月子喵" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Kuang3lian" />
+                        <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="CCYY" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="19921454753" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="房非缝" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Ashburn" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="绯念" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="PseudoStar" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="符之渡尘" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="singegg" />
+                        <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="Horrizen" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="浮光" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="songhy" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="任我被回忆捉弄" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="飘飘ppiao" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="EnerG4" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="tiredl" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="有梦想的罐头" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Hasturnyth" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="犇犇" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="初晴" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="just ugly" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="宇ovo" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="斑马" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="? AXH" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="璃音233" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="凌源羡辰" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="雨巷" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="NoDoors" />
+                        <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="凉城uwu" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="栀玖夕夏" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="X11aou" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Bobo_s1" />
+                        <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="kk" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="XDDDD" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="梵星" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="梦师A" />
+                        <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="stone devil" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="乄心" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="渡白" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="鬼鬼" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="菠萝飞走惹" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="陆山君" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="张无忧" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="缄默" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="影铉" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="酸菜鱼鱼" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="哈哈哈嗝" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="鸡逆苔煤" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="许柯" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="ChuaLinyZ" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="墨依小夕" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="柚可喝" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="m1350096708" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="猫南北丶QAQ" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="此时彼刻" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Yukino" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="Paveway" />
+                        <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="DN_TheColdWinter" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="小康康" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="李白" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Gim" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="秋前盛夏" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="默然" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="zyx1998" />
-                        <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="that month" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Hipop" />
-                        <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="Superafei" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="范UP" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="cfgfnh" />
-                        <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="cen_yi123456" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="折鹤z" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="吴风诗" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="MM775" />
-                        <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="intogo" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="清初凉宫" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="时光回执" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="tangfg" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="zzz" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="红枣列巴" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="VERNON" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="このdioた" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="潜凉" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Pinuo_0" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="被打穿的四号坦克" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="太微" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Suspect" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="龙舞猫跃" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Lotus" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="薄暮之国的希里斯" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Stone0829" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="古冰语" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="甲申道格" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Percy" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="传说中的山羊" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="TARDIS" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="dawa" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="轻梦" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="景景景景景景色分明" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="yaemikosdog" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="乜常青" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="TMOFFMY" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="参差荇菜" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="At sea" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="MRailgun" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="mason_73" />
-                        <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="BartenderJ" />
-                        <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="Amorcks" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="陌生少年" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="hh-245" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="wang" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="魔鬼Devil_Tenth" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="星辰追梦者" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="caicai7162" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="redccol" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Zero_z1" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="上玄天" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="老师看我毕设惊了" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="32cc" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="上条真" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="天宇灵TUL" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="龙猫的狗" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="瀚海生辉" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="Truman" />
-                        <TextBlock Width="120" Margin="0,1.5" Text="TianChi_廻天" />
-                        <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="mofacker" />
-                        <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="Barb" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="小镰刀菌" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="DiceA" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="朴振澈" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="YinYang_SHI" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="网底游鱼" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="xc_xiaoxian" />
+                        <TextBlock Width="120" Margin="0,1.5" Text="playermin" />
+                        <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="Lunaunde" />
                     </WrapPanel>
                     </WrapPanel>
                     <Grid Height="35">
                     <Grid Height="35">
                         <Grid.ColumnDefinitions>
                         <Grid.ColumnDefinitions>

+ 7 - 9
Plain Craft Launcher 2/Pages/PageSetup/PageSetupSystem.xaml

@@ -54,31 +54,29 @@
                             <RowDefinition Height="7" />
                             <RowDefinition Height="7" />
                             <RowDefinition Height="28" />
                             <RowDefinition Height="28" />
                             <RowDefinition Height="7" />
                             <RowDefinition Height="7" />
-                            <RowDefinition Height="28" />
-                            <RowDefinition Height="7" />
                             <RowDefinition Height="Auto" />
                             <RowDefinition Height="Auto" />
                         </Grid.RowDefinitions>
                         </Grid.RowDefinitions>
-                        <TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="下载源" Margin="0,0,25,0" />
+                        <!--<TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="下载源" Margin="0,0,25,0" />
                         <local:MyComboBox x:Name="ComboDownloadMod" Grid.Row="0" Grid.ColumnSpan="2" Tag="ToolDownloadMod" Grid.Column="1">
                         <local:MyComboBox x:Name="ComboDownloadMod" Grid.Row="0" Grid.ColumnSpan="2" Tag="ToolDownloadMod" Grid.Column="1">
                             <local:MyComboBoxItem Content="尽量使用镜像源(暂时无效)" />
                             <local:MyComboBoxItem Content="尽量使用镜像源(暂时无效)" />
                             <local:MyComboBoxItem Content="仅在官方源加载缓慢时改用镜像源" />
                             <local:MyComboBoxItem Content="仅在官方源加载缓慢时改用镜像源" />
                             <local:MyComboBoxItem Content="尽量使用官方源" IsSelected="True" />
                             <local:MyComboBoxItem Content="尽量使用官方源" IsSelected="True" />
-                        </local:MyComboBox>
-                        <TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="下载文件名" Margin="0,0,25,0" />
-                        <local:MyComboBox Grid.Row="2" x:Name="ComboDownloadTranslate" Grid.ColumnSpan="2" Tag="ToolDownloadTranslate" Grid.Column="1" 
+                        </local:MyComboBox>-->
+                        <TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="下载文件名" Margin="0,0,25,0" />
+                        <local:MyComboBox Grid.Row="0" x:Name="ComboDownloadTranslate" Grid.ColumnSpan="2" Tag="ToolDownloadTranslate" Grid.Column="1" 
                                           ToolTip="下载 Mod 时,Mod 的默认文件名中,中文译名应该放在哪个位置">
                                           ToolTip="下载 Mod 时,Mod 的默认文件名中,中文译名应该放在哪个位置">
                             <local:MyComboBoxItem Content="译名位于文件名开头:[遗物] relics-0.1.14" IsSelected="True" />
                             <local:MyComboBoxItem Content="译名位于文件名开头:[遗物] relics-0.1.14" IsSelected="True" />
                             <local:MyComboBoxItem Content="译名位于文件名开头:遗物-relics-0.1.14" />
                             <local:MyComboBoxItem Content="译名位于文件名开头:遗物-relics-0.1.14" />
                             <local:MyComboBoxItem Content="译名位于文件名末尾:relics-0.1.14-遗物" />
                             <local:MyComboBoxItem Content="译名位于文件名末尾:relics-0.1.14-遗物" />
                             <local:MyComboBoxItem Content="不添加中文译名:relics-0.1.14" />
                             <local:MyComboBoxItem Content="不添加中文译名:relics-0.1.14" />
                         </local:MyComboBox>
                         </local:MyComboBox>
-                        <TextBlock Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Left" Text="Mod 管理样式" Margin="0,0,25,0" />
-                        <local:MyComboBox Grid.Row="4" x:Name="ComboModLocalNameStyle" Grid.ColumnSpan="2" Tag="ToolModLocalNameStyle" Grid.Column="1" 
+                        <TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="Mod 管理样式" Margin="0,0,25,0" />
+                        <local:MyComboBox Grid.Row="2" x:Name="ComboModLocalNameStyle" Grid.ColumnSpan="2" Tag="ToolModLocalNameStyle" Grid.Column="1" 
                                           ToolTip="在 Mod 管理页面中,Mod 项的显示方式">
                                           ToolTip="在 Mod 管理页面中,Mod 项的显示方式">
                             <local:MyComboBoxItem Content="标题显示译名,详情显示文件名" IsSelected="True" />
                             <local:MyComboBoxItem Content="标题显示译名,详情显示文件名" IsSelected="True" />
                             <local:MyComboBoxItem Content="标题显示文件名,详情显示译名" />
                             <local:MyComboBoxItem Content="标题显示文件名,详情显示译名" />
                         </local:MyComboBox>
                         </local:MyComboBox>
-                        <local:MyCheckBox Margin="0,2,0,4" Text="显示 Mod 加载器时忽略 Quilt" Grid.Row="6" Height="22" Grid.ColumnSpan="2"
+                        <local:MyCheckBox Margin="0,2,0,4" Text="显示 Mod 加载器时忽略 Quilt" Grid.Row="4" Height="22" Grid.ColumnSpan="2"
                                           x:Name="CheckDownloadIgnoreQuilt" Tag="ToolDownloadIgnoreQuilt" />
                                           x:Name="CheckDownloadIgnoreQuilt" Tag="ToolDownloadIgnoreQuilt" />
                     </Grid>
                     </Grid>
                 </StackPanel>
                 </StackPanel>

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

@@ -34,7 +34,7 @@
 
 
         'Mod 与整合包
         'Mod 与整合包
         ComboDownloadTranslate.SelectedIndex = Setup.Get("ToolDownloadTranslate")
         ComboDownloadTranslate.SelectedIndex = Setup.Get("ToolDownloadTranslate")
-        ComboDownloadMod.SelectedIndex = Setup.Get("ToolDownloadMod")
+        'ComboDownloadMod.SelectedIndex = Setup.Get("ToolDownloadMod")
         ComboModLocalNameStyle.SelectedIndex = Setup.Get("ToolModLocalNameStyle")
         ComboModLocalNameStyle.SelectedIndex = Setup.Get("ToolModLocalNameStyle")
         CheckDownloadIgnoreQuilt.Checked = Setup.Get("ToolDownloadIgnoreQuilt")
         CheckDownloadIgnoreQuilt.Checked = Setup.Get("ToolDownloadIgnoreQuilt")
 
 
@@ -96,7 +96,7 @@
     Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderDebugAnim.Change, SliderDownloadThread.Change, SliderDownloadSpeed.Change
     Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderDebugAnim.Change, SliderDownloadThread.Change, SliderDownloadSpeed.Change
         If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value)
         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 ComboDownloadVersion.SelectionChanged, ComboModLocalNameStyle.SelectionChanged, ComboDownloadTranslate.SelectionChanged, ComboSystemUpdate.SelectionChanged, ComboSystemActivity.SelectionChanged, ComboDownloadMod.SelectionChanged
+    Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboDownloadVersion.SelectionChanged, ComboModLocalNameStyle.SelectionChanged, ComboDownloadTranslate.SelectionChanged, ComboSystemUpdate.SelectionChanged, ComboSystemActivity.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 TextBoxChange(sender As MyTextBox, e As Object) Handles TextSystemCache.ValidatedTextChanged
     Private Shared Sub TextBoxChange(sender As MyTextBox, e As Object) Handles TextSystemCache.ValidatedTextChanged

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

@@ -245,7 +245,7 @@
                             <local:MyComboBoxItem Content="Minecraft 皮肤推荐(作者:wkea)" />
                             <local:MyComboBoxItem Content="Minecraft 皮肤推荐(作者:wkea)" />
                             <local:MyComboBoxItem Content="OpenBMCLAPI 仪表盘 Lite(作者:Silverteal、Mxmilu666)" />
                             <local:MyComboBoxItem Content="OpenBMCLAPI 仪表盘 Lite(作者:Silverteal、Mxmilu666)" />
                             <local:MyComboBoxItem Content="PCL 主页市场(作者:凌云)" />
                             <local:MyComboBoxItem Content="PCL 主页市场(作者:凌云)" />
-                            <local:MyComboBoxItem Content="PCL 更新日志(作者:Joker2184)" />
+                            <local:MyComboBoxItem Content="PCL 新闻速报(作者:Joker2184)" />
                             <local:MyComboBoxItem Content="PCL 新功能说明书(作者:WForst-Breeze)" />
                             <local:MyComboBoxItem Content="PCL 新功能说明书(作者:WForst-Breeze)" />
                             <local:MyComboBoxItem Content="OpenMCIM 仪表盘(作者:SALTWOOD)" />
                             <local:MyComboBoxItem Content="OpenMCIM 仪表盘(作者:SALTWOOD)" />
                             <local:MyComboBoxItem Content="杂志主页(作者:CreeperIsASpy)" />
                             <local:MyComboBoxItem Content="杂志主页(作者:CreeperIsASpy)" />

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

@@ -42,8 +42,8 @@
         '设置解锁
         '设置解锁
         If Not RadioLauncherTheme8.IsEnabled Then LabLauncherTheme8Copy.ToolTip = "累积赞助达到 ¥23.33 后,在爱发电私信发送【解锁码】以解锁。" & vbCrLf & "右键打开赞助页面,如果觉得 PCL 做得还不错就支持一下吧 =w=!"
         If Not RadioLauncherTheme8.IsEnabled Then LabLauncherTheme8Copy.ToolTip = "累积赞助达到 ¥23.33 后,在爱发电私信发送【解锁码】以解锁。" & vbCrLf & "右键打开赞助页面,如果觉得 PCL 做得还不错就支持一下吧 =w=!"
         RadioLauncherTheme8.ToolTip = "累积赞助达到 ¥23.33 后,在爱发电私信发送【解锁码】以解锁"
         RadioLauncherTheme8.ToolTip = "累积赞助达到 ¥23.33 后,在爱发电私信发送【解锁码】以解锁"
-        If Not RadioLauncherTheme9.IsEnabled Then LabLauncherTheme9Copy.ToolTip = "· 反馈一个 Bug,在标记为 [完成] 后回复识别码要求解锁(右键打开反馈页面)" & vbCrLf & "· 提交一个 Pull Request,在合并后回复识别码要求解锁"
-        RadioLauncherTheme9.ToolTip = "· 反馈一个 Bug,在标记为 [完成] 后回复识别码要求解锁" & vbCrLf & "· 提交一个 Pull Request,在合并后回复识别码要求解锁"
+        If Not RadioLauncherTheme9.IsEnabled Then LabLauncherTheme9Copy.ToolTip = "· 反馈一个 Bug,在标记为 [完成] 后回复识别码要求解锁(右键打开反馈页面)" & vbCrLf & "· 提交一个 Pull Request 或主页预设,在标记为 [完成] 后回复识别码要求解锁"
+        RadioLauncherTheme9.ToolTip = "· 反馈一个 Bug,在标记为 [完成] 后回复识别码要求解锁" & vbCrLf & "· 提交一个 Pull Request 或主页预设,在标记为 [完成] 后回复识别码要求解锁"
         '极客蓝的处理在 ThemeCheck 中
         '极客蓝的处理在 ThemeCheck 中
 
 
     End Sub
     End Sub

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

@@ -356,12 +356,12 @@
 Install:
 Install:
             Try
             Try
                 For Each ModFile In FilePathList
                 For Each ModFile In FilePathList
-                    Dim NewFileName = GetFileNameFromPath(ModFile).Replace(".disabled", "")
+                    Dim NewFileName = GetFileNameFromPath(ModFile).Replace(".disabled", "").Replace(".old", "")
                     If Not NewFileName.Contains(".") Then NewFileName += ".jar" '#4227
                     If Not NewFileName.Contains(".") Then NewFileName += ".jar" '#4227
                     CopyFile(ModFile, TargetVersion.PathIndie & "mods\" & NewFileName)
                     CopyFile(ModFile, TargetVersion.PathIndie & "mods\" & NewFileName)
                 Next
                 Next
                 If FilePathList.Count = 1 Then
                 If FilePathList.Count = 1 Then
-                    Hint($"已安装 {GetFileNameFromPath(FilePathList.First).Replace(".disabled", "")}!", HintType.Finish)
+                    Hint($"已安装 {GetFileNameFromPath(FilePathList.First).Replace(".disabled", "").Replace(".old", "")}!", HintType.Finish)
                 Else
                 Else
                     Hint($"已安装 {FilePathList.Count} 个 Mod!", HintType.Finish)
                     Hint($"已安装 {FilePathList.Count} 个 Mod!", HintType.Finish)
                 End If
                 End If
@@ -388,7 +388,7 @@ Install:
 
 
 #Region "选择"
 #Region "选择"
 
 
-    '选择的 Mod 的路径(不含 .disabled)
+    '选择的 Mod 的路径(不含 .disabled 和 .old)
     Public SelectedMods As New List(Of String)
     Public SelectedMods As New List(Of String)
 
 
     '单项切换选择状态
     '单项切换选择状态

BIN
Plain Craft Launcher 2/Resources/Help.zip


+ 8 - 7
Plain Craft Launcher 2/app.manifest

@@ -48,14 +48,15 @@
        自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需
        自动缩放。Windows Presentation Foundation (WPF)应用程序自动感知 DPI,无需
        选择加入。选择加入此设置的 Windows 窗体应用程序(目标设定为 .NET Framework 4.6 )还应
        选择加入。选择加入此设置的 Windows 窗体应用程序(目标设定为 .NET Framework 4.6 )还应
        在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。-->
        在其 app.config 中将 "EnableWindowsFormsHighDpiAutoResizing" 设置设置为 "true"。-->
+  <!-- 更改原因见 #5337 -->
   <application xmlns="urn:schemas-microsoft-com:asm.v3">
   <application xmlns="urn:schemas-microsoft-com:asm.v3">
-    <windowsSettings>
-      <!-- The combination of below two tags have the following effect : 
-           1. Per-Monitor for >= Windows 10 Anniversary Update
-           2. System < Windows 10 Anniversary Update -->
-      <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
-      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
-    </windowsSettings>
+  	<windowsSettings>
+  		<!-- The combination of below two tags have the following effect : 
+            1. Per-Monitor for >= Windows 10 Anniversary Update
+            2. System < Windows 10 Anniversary Update -->
+  		<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
+  		<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
+  	</windowsSettings>
   </application>
   </application>
 
 
   <!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->
   <!-- 启用 Windows 公共控件和对话框的主题(Windows XP 和更高版本) -->