龙腾猫跃 6 mesi fa
parent
commit
c3ee4c7e1c

+ 11 - 129
Plain Craft Launcher 2/FormMain.xaml.vb

@@ -11,10 +11,11 @@ Public Class FormMain
         Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
         '统计更新日志条目
 #If BETA Then
-        If LastVersion < 386 Then 'Release 2.12.5
+        If LastVersion < 387 Then 'Release 2.12.6
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:降低 Minecraft 的内存占用"))
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:Minecraft 使用 Java 25+ 时的一个性能问题"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法下载 NeoForge 26.1"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:部分关键词搜不到资源,特别是中文 Mod 搜索经常没有结果"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:降低游戏的内存占用"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:老版本 Windows 无法启动游戏"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:连接 Mojang 的服务可能失败,提示错误码 421"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法访问爱发电"))
@@ -94,75 +95,31 @@ Public Class FormMain
             FeatureCount += 9
             BugCount += 26
         End If
-        If LastVersion < 355 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, "优化:支持在超长路径下安装、启动游戏"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法安装 1.21 OptiFine"))
-            FeatureCount += 23
-            BugCount += 10
-        End If
-        If LastVersion < 349 Then 'Release 2.8.13
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:网络环境不佳时,Mod、整合包页面的加载速度"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:部分电脑无法打开程序"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:可能无法识别、更新 Mod"))
-            FeatureCount += 6
-            BugCount += 14
-        End If
-        If LastVersion < 347 Then 'Release 2.8.12
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:Mod 管理页面添加下载 Mod、安装 Mod 选项"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:Mod 详情页面支持按加载器、游戏版本进行分类和筛选"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "新增:支持安装同时包含 modpack 文件和启动器的懒人包"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "优化:整合包导入流程"))
-            FeatureCount += 43
-            BugCount += 37
-        End If
-        If LastVersion < 342 Then 'Release 2.8.9
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:支持下载原版服务端"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "新增:本地 Mod 的标题支持选择显示 Mod 原始文件名"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:搜索后启用/禁用 Mod 时出错"))
-            FeatureCount += 17
-            BugCount += 13
-        End If
-        If LastVersion < 340 Then 'Release 2.8.8
-            If LastVersion = 338 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:数个与新正版登录相关的严重 Bug"))
-            FeatureCount += 3
-            BugCount += 7
-        End If
-        If LastVersion < 338 Then 'Release 2.8.7
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "优化:使用新的正版登录方式,以提高安全性"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:安装整合包、检索 Mod 的稳定性"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法加载部分 Mod 的图标"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:在 Mod 管理页面删除 Mod 导致报错"))
-            FeatureCount += 11
-            BugCount += 21
-        End If
 #Else
         '5:          FEAT+
         '4:     IMP+ FEAT*
         '3:BUG+ IMP* FEAT-
         '2:BUG* IMP-
         '1:BUG-
+        If LastVersion < 386 Then 'Snapshot 2.12.6
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:Minecraft 使用 Java 25+ 时的一个性能问题"))
+            If LastVersion = 384 OrElse LastVersion = 385 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法正常重命名游戏版本"))
+            If LastVersion = 385 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法显示 Modrinth 整合包的版本列表"))
+            BugCount += 1
+        End If
         If LastVersion < 385 Then 'Snapshot 2.12.5
             FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法下载 NeoForge 26.1"))
             If LastVersion = 384 Then
                 FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:下载可能失败,提示下载管理刷新线程出错"))
                 FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:无法保存选择的 Minecraft 文件夹"))
-                FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:使用中文搜索 Mod 时, 部分结果会忽略筛选条件"))
+                FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:使用中文搜索 Mod 时,部分结果会忽略筛选条件"))
             End If
             FeatureCount += 3
             BugCount += 6
         End If
         If LastVersion < 384 Then 'Snapshot 2.12.4
+            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:降低 Minecraft 的内存占用"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "修复:部分关键词搜不到资源,特别是中文 Mod 搜索经常没有结果"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:降低游戏的内存占用"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:老版本 Windows 无法启动游戏"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:连接 Mojang 的服务可能失败,提示错误码 421"))
             FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法访问爱发电"))
@@ -282,81 +239,6 @@ Public Class FormMain
             FeatureCount += 9
             BugCount += 26
         End If
-        If LastVersion < 354 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"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:使用新的版本隔离策略"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:添加了在全局启动设置与版本独立设置之间互相跳转的按钮"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:使用快照版导出带 PCL 的整合包可能失败"))
-            FeatureCount += 12
-            BugCount += 20
-        End If
-        If LastVersion < 351 Then 'Snapshot 2.9.1
-            If LastVersion = 350 Then
-                FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "优化:对导出整合包功能进行了 7 项优化,详见完整更新日志"))
-                FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法进行第三方登录"))
-                FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:在部分版本下,打开导出页面会导致启动器崩溃"))
-                BugCount += 1
-            End If
-            BugCount += 2
-        End If
-        If LastVersion < 350 Then 'Snapshot 2.9.0
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "新增:导出整合包功能"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:支持在超长路径下安装、启动游戏"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法安装 1.21 OptiFine"))
-            FeatureCount += 21
-            BugCount += 10
-        End If
-        If LastVersion < 348 Then 'Snapshot 2.8.13
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:网络环境不佳时,Mod、整合包页面的加载速度"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:部分电脑无法打开程序"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:可能无法识别、更新 Mod"))
-            FeatureCount += 6
-            BugCount += 14
-        End If
-        If LastVersion < 346 Then 'Snapshot 2.8.12
-            If LastVersion = 345 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:帮助页面报错"))
-        End If
-        If LastVersion < 345 Then 'Snapshot 2.8.11
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:Mod 管理页面添加下载 Mod、安装 Mod 选项"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:Mod 详情页面支持按加载器、游戏版本进行分类和筛选"))
-            FeatureCount += 23
-            BugCount += 21
-        End If
-        If LastVersion < 343 Then 'Snapshot 2.8.10
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "新增:支持安装同时包含 modpack 文件和启动器的懒人包"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "优化:整合包导入流程"))
-            FeatureCount += 20
-            BugCount += 16
-        End If
-        If LastVersion < 341 Then 'Snapshot 2.8.9
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:支持下载原版服务端"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "新增:本地 Mod 的标题支持选择显示 Mod 原始文件名"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:搜索后启用/禁用 Mod 时出错"))
-            FeatureCount += 17
-            BugCount += 13
-        End If
-        If LastVersion < 339 Then 'Snapshot 2.8.8
-            If LastVersion = 337 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:数个与新正版登录相关的严重 Bug"))
-            FeatureCount += 3
-            BugCount += 7
-        End If
-        If LastVersion < 337 Then 'Snapshot 2.8.7
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "优化:使用新的正版登录方式,以提高安全性"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化:安装整合包、检索 Mod 的稳定性"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法加载部分 Mod 的图标"))
-            FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:在 Mod 管理页面删除 Mod 导致报错"))
-            FeatureCount += 11
-            BugCount += 21
-        End If
 #End If
         '整理更新日志文本
         Dim ContentList As New List(Of String)

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

@@ -14,13 +14,13 @@ Public Module ModBase
 #Region "声明"
 
     '下列版本信息由更新器自动修改
-    Public Const VersionBaseName As String = "2.12.5" '不含分支前缀的显示用版本名
-    Public Const VersionStandardCode As String = "2.12.5." & VersionBranchCode '标准格式的四段式版本号
+    Public Const VersionBaseName As String = "2.12.6" '不含分支前缀的显示用版本名
+    Public Const VersionStandardCode As String = "2.12.6." & VersionBranchCode '标准格式的四段式版本号
     Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换
 #If BETA Then
-    Public Const VersionCode As Integer = 383 'Release
+    Public Const VersionCode As Integer = 387 'Release
 #Else
-    Public Const VersionCode As Integer = 385 'Snapshot
+    Public Const VersionCode As Integer = 386 'Snapshot
 #End If
     '自动生成的版本信息
     Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName

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

@@ -1528,12 +1528,16 @@ NextPage:
                     '结果可能混杂着 Mod、数据包和服务端插件
                     Dim RawLoaders As List(Of String) = Data("loaders").Select(Function(v) v.ToString).ToList
                     ModLoaders = New List(Of CompModLoaderType)
-                    If RawLoaders.Intersect({"bukkit", "folia", "paper", "purpur", "spigot"}).Any() Then Type = CompType.Plugin 'Veinminer Enchantment 同时支持服务端与 Fabric
-                    If RawLoaders.Contains("datapack") Then Type = CompType.DataPack
-                    If RawLoaders.Contains("forge") Then ModLoaders.Add(CompModLoaderType.Forge) : Type = CompType.Mod
-                    If RawLoaders.Contains("neoforge") Then ModLoaders.Add(CompModLoaderType.NeoForge) : Type = CompType.Mod
-                    If RawLoaders.Contains("fabric") Then ModLoaders.Add(CompModLoaderType.Fabric) : Type = CompType.Mod
-                    If RawLoaders.Contains("quilt") Then ModLoaders.Add(CompModLoaderType.Quilt) : Type = CompType.Mod
+                    If Type.HasFlag(CompType.Mod) OrElse Type.HasFlag(CompType.DataPack) Then
+                        If RawLoaders.Intersect({"bukkit", "folia", "paper", "purpur", "spigot"}).Any() Then Type = CompType.Plugin 'Veinminer Enchantment 同时支持服务端与 Fabric
+                        If RawLoaders.Contains("datapack") Then Type = CompType.DataPack
+                        If RawLoaders.Contains("forge") Then ModLoaders.Add(CompModLoaderType.Forge) : Type = CompType.Mod
+                        If RawLoaders.Contains("neoforge") Then ModLoaders.Add(CompModLoaderType.NeoForge) : Type = CompType.Mod
+                        If RawLoaders.Contains("fabric") Then ModLoaders.Add(CompModLoaderType.Fabric) : Type = CompType.Mod
+                        If RawLoaders.Contains("quilt") Then ModLoaders.Add(CompModLoaderType.Quilt) : Type = CompType.Mod
+                    Else
+                        '使用传入的类别,不作修改(#8377)
+                    End If
                     'Dependencies
                     If Data.ContainsKey("dependencies") Then
                         RawDependencies = Data("dependencies").

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

@@ -1413,7 +1413,9 @@ NextInstance:
         End If
 
         'JLW
-        Dim UseJLW As Boolean = Not Settings.Get("LaunchAdvanceDisableJLW") AndAlso Not Settings.Get("VersionAdvanceDisableJLW", McInstanceSelected)
+        Dim UseJLW As Boolean =
+            Not Settings.Get("LaunchAdvanceDisableJLW") AndAlso Not Settings.Get("VersionAdvanceDisableJLW", McInstanceSelected) AndAlso
+            McLaunchJavaSelected.MajorVersion <= 18
         If UseJLW Then
             If McLaunchJavaSelected.MajorVersion >= 9 Then
                 Args.Add("--add-exports") : Args.Add("cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED")
@@ -1421,6 +1423,14 @@ NextInstance:
             Args.Add("-Doolloo.jlw.tmpdir=${pure_directory}") '这里需要不以 \ 结尾
         End If
 
+        'LUA
+        Dim UseLUA As Boolean =
+            Not Settings.Get("LaunchAdvanceDisableLUA") AndAlso Not Settings.Get("VersionAdvanceDisableLUA", McInstanceSelected) AndAlso
+            McLaunchJavaSelected.MajorVersion >= 25
+        If UseLUA Then
+            Args.Add($"-javaagent:""{ExtractPatch("LUA")}""")
+        End If
+
 #Region "内存管理"
 
         McLaunchLog("当前剩余内存:" & Math.Round(My.Computer.Info.AvailablePhysicalMemory / 1024 / 1024 / 1024 * 10) / 10 & "G")
@@ -1489,7 +1499,7 @@ NextInstance:
 
         '为 JLW 添加 -jar,它必须放在最后
         If UseJLW Then
-            Args.Add("-jar") : Args.Add(ExtractJavaWrapper())
+            Args.Add("-jar") : Args.Add(ExtractPatch("JavaWrapper"))
         End If
 
         '再次去重并输出

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

@@ -9,18 +9,19 @@ Public Module ModMinecraft
     ''' </summary>
     Public Property McFolderSelected As String
         Get
-            Dim McFolderSelectedLast As String = Settings.Get("LaunchFolderSelect")
-            McFolderSelectedLast = McFolderSelectedLast.Replace("$", Path)
-            If _McFolderSelected Is Nothing Then _McFolderSelected = McFolderSelectedLast '仅在首次读取时触发
+            If _McFolderSelected Is Nothing Then SetMcFolder(Settings.Get("LaunchFolderSelect")) '不能使用 McFolderSelected 触发 Set,这会被视为为 Get 设置返回值
             Return _McFolderSelected
         End Get
         Set(Value As String)
-            If _McFolderSelected = Value Then Return
-            _McFolderSelected = Value.Replace("$", Path)
-            Settings.Set("LaunchFolderSelect", Value.Replace(Path, "$"))
-            Log("[Minecraft] 当前选择的 Minecraft 文件夹:" & _McFolderSelected)
+            SetMcFolder(Value)
         End Set
     End Property
+    Private Sub SetMcFolder(Value As String) '等同 McFolderSelected.Set
+        If _McFolderSelected = Value Then Return
+        _McFolderSelected = Value.Replace("$", Path)
+        Settings.Set("LaunchFolderSelect", Value.Replace(Path, "$"))
+        Log("[Minecraft] 当前选择的 Minecraft 文件夹:" & _McFolderSelected)
+    End Sub
     Private _McFolderSelected As String
     ''' <summary>
     ''' 当前的 Minecraft 文件夹列表。
@@ -43,8 +44,8 @@ Public Module ModMinecraft
 
         Public Overrides Function Equals(obj As Object) As Boolean
             If Not (TypeOf obj Is McFolder) Then Return False
-            Dim folder = DirectCast(obj, McFolder)
-            Return Name = folder.Name AndAlso Location = folder.Location AndAlso Type = folder.Type
+            Dim Folder = DirectCast(obj, McFolder)
+            Return Name = Folder.Name AndAlso Location = Folder.Location AndAlso Type = Folder.Type
         End Function
         Public Overrides Function ToString() As String
             Return Location

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

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

+ 10 - 0
Plain Craft Launcher 2/My Project/Resources.Designer.vb

@@ -150,6 +150,16 @@ Namespace My.Resources
             End Get
         End Property
         
+        '''<summary>
+        '''  查找 System.Byte[] 类型的本地化资源。
+        '''</summary>
+        Friend ReadOnly Property LUA() As Byte()
+            Get
+                Dim obj As Object = ResourceManager.GetObject("LUA", resourceCulture)
+                Return CType(obj,Byte())
+            End Get
+        End Property
+        
         '''<summary>
         '''  查找 System.Byte[] 类型的本地化资源。
         '''</summary>

+ 3 - 0
Plain Craft Launcher 2/My Project/Resources.resx

@@ -145,6 +145,9 @@
   <data name="libwebp64" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\libwebp64.dll;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>
+  <data name="LUA" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\lwjgl-unsafe-agent-1.0.jar;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </data>
   <data name="ModData" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\ModData.txt;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </data>

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

@@ -426,7 +426,7 @@ pause"
         '添加 Java Wrapper 作为主 Jar
         Dim Arguments As String
         If UseJavaWrapper AndAlso Not Settings.Get("LaunchAdvanceDisableJLW") Then
-            Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" -jar ""{ExtractJavaWrapper()}"" optifine.Installer"
+            Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" -jar ""{ExtractPatch("JavaWrapper")}"" optifine.Installer"
         Else
             Arguments = $"-Duser.home=""{BaseMcFolderHome.TrimEnd("\")}"" -cp ""{Target}"" optifine.Installer"
         End If
@@ -1101,7 +1101,7 @@ Retry:
         '添加 Java Wrapper 作为主 Jar
         Dim Arguments As String
         If UseJavaWrapper AndAlso Not Settings.Get("LaunchAdvanceDisableJLW") Then
-            Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" -jar ""{ExtractJavaWrapper()}"" com.bangbang93.ForgeInstaller ""{McFolder}"
+            Arguments = $"-Doolloo.jlw.tmpdir=""{PathPure.TrimEnd("\")}"" -cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" -jar ""{ExtractPatch("JavaWrapper")}"" com.bangbang93.ForgeInstaller ""{McFolder}"
         Else
             Arguments = $"-cp ""{PathTemp}Cache\forge_installer.jar;{Target}"" com.bangbang93.ForgeInstaller ""{McFolder}"
         End If
@@ -2373,37 +2373,38 @@ Retry:
     Private VanillaSyncLock As New Object
 
     ''' <summary>
-    ''' 释放 Java Wrapper 并返回完整文件路径。
+    ''' 释放补丁文件并返回完整文件路径。
     ''' </summary>
-    Public Function ExtractJavaWrapper() As String
-        Dim WrapperPath As String = PathPure & "JavaWrapper.jar"
-        Log("[Java] 选定的 Java Wrapper 路径:" & WrapperPath)
+    ''' <param name="Patch">"LUA" 或 "JavaWrapper"。</param>
+    Public Function ExtractPatch(Patch As String) As String
+        Dim PatchPath As String = $"{PathPure}{Patch}.jar"
+        Log($"[Java] 选定的 {Patch} 路径:{PatchPath}")
         Static Lock As New Object
-        SyncLock Lock '避免 OptiFine 和 Forge 安装时同时释放 Java Wrapper 导致冲突
+        SyncLock Lock '避免 OptiFine 和 Forge 安装时同时释放导致冲突
             Try
-                WriteFile(WrapperPath, GetResources("JavaWrapper"))
+                WriteFile(PatchPath, GetResources(Patch))
             Catch ex As Exception
-                If File.Exists(WrapperPath) Then
-                    '因为未知原因 Java Wrapper 可能变为只读文件(#4243)
-                    Log(ex, "Java Wrapper 文件释放失败,但文件已存在,将在删除后尝试重新生成", LogLevel.Developer)
+                If File.Exists(PatchPath) Then
+                    '因为未知原因可能变为只读文件(#4243)
+                    Log(ex, $"{Patch} 文件释放失败,但文件已存在,将在删除后尝试重新生成", LogLevel.Developer)
                     Try
-                        File.Delete(WrapperPath)
-                        WriteFile(WrapperPath, GetResources("JavaWrapper"))
+                        File.Delete(PatchPath)
+                        WriteFile(PatchPath, GetResources(Patch))
                     Catch ex2 As Exception
-                        Log(ex2, "Java Wrapper 文件重新释放失败,将尝试更换文件名重新生成", LogLevel.Developer)
-                        WrapperPath = PathPure & "JavaWrapper2.jar"
+                        Log(ex2, $"{Patch} 文件重新释放失败,将尝试更换文件名重新生成", LogLevel.Developer)
+                        PatchPath = $"{PathPure}{Patch}2.jar"
                         Try
-                            WriteFile(WrapperPath, GetResources("JavaWrapper"))
+                            WriteFile(PatchPath, GetResources(Patch))
                         Catch ex3 As Exception
-                            Throw New FileNotFoundException("释放 Java Wrapper 最终尝试失败", ex3)
+                            Throw New FileNotFoundException($"释放 {Patch} 最终尝试失败", ex3)
                         End Try
                     End Try
                 Else
-                    Throw New FileNotFoundException("释放 Java Wrapper 失败", ex)
+                    Throw New FileNotFoundException($"释放 {Patch} 失败", ex)
                 End If
             End Try
         End SyncLock
-        Return WrapperPath
+        Return PatchPath
     End Function
 
 End Module

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

@@ -246,7 +246,10 @@
                                           ToolTip="完全不更改 assets;不校验 libraries、第三方登录库与版本主 jar 文件是否被修改。&#xa;如果你没有修改相关文件,请勿勾选此项。" />
                         <local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" x:Name="CheckAdvanceDisableJLW" Tag="VersionAdvanceDisableJLW"
                                           ToolTipService.Placement="Right"
-                                          ToolTip="PCL 会使用 Java Launch Wrapper 来修复老版本 Java 在中文路径下无法启动的问题。&#xa;如果这被反作弊拦截,或遇到其他问题,也可以将其关闭。" />
+                                          ToolTip="是否使用 Java Launch Wrapper 修复 Java 18- 在中文路径下可能无法正常启动的问题。&#xa;详见:https://github.com/00ll00/java_launch_wrapper" />
+                        <local:MyCheckBox Height="28" Text="禁用 LWJGL Unsafe Agent" local:SettingService.Key="VersionAdvanceDisableLUA"
+                                          ToolTipService.Placement="Right" 
+                                          ToolTip="是否使用 LWJGL Unsafe Agent 修复 Java 25+ 的一个性能问题。&#xa;详见:https://github.com/HMCL-dev/lwjgl-unsafe-agent" />
                     </StackPanel>
                 </Grid>
             </local:MyCard>

+ 63 - 26
Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml

@@ -169,12 +169,14 @@
                         <TextBlock Margin="0,1.5,6,0" Text="jw" />
                         <TextBlock Margin="0,1.5,6,0" Text="ftt" />
                         <TextBlock Margin="0,1.5,6,0" Text="TT" />
+                        <TextBlock Margin="0,1.5,6,0" Text="......" />
                         <TextBlock Margin="0,1.5,6,0" Text="ZZ" />
                         <TextBlock Margin="0,1.5,6,0" Text="zjx" />
                         <TextBlock Margin="0,1.5,6,0" Text="XX" />
                         <TextBlock Margin="0,1.5,6,0" Text="Lie" />
                         <TextBlock Margin="0,1.5,6,0" Text="sjg" />
                         <TextBlock Margin="0,1.5,6,0" Text="yfx" />
+                        <TextBlock Margin="0,1.5,6,0" Text="PQ" />
                         <TextBlock Margin="0,1.5,6,0" Text="hly" />
                         <TextBlock Margin="0,1.5,6,0" Text="l y y" />
                         <TextBlock Margin="0,1.5,6,0" Text="陈jj" />
@@ -188,7 +190,9 @@
                         <TextBlock Margin="0,1.5,6,0" Text="555" />
                         <TextBlock Margin="0,1.5,6,0" Text="轩₩" />
                         <TextBlock Margin="0,1.5,6,0" Text="zzw" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ybb" />
                         <TextBlock Margin="0,1.5,6,0" Text="JJJT" />
+                        <TextBlock Margin="0,1.5,6,0" Text="ZCY" />
                         <TextBlock Margin="0,1.5,6,0" Text="Rou" />
                         <TextBlock Margin="0,1.5,6,0" Text="wyb" />
                         <TextBlock Margin="0,1.5,6,0" Text="qqq" />
@@ -321,6 +325,15 @@
                         <TextBlock Margin="0,1.5,6,0" Text="谷雨" />
                         <TextBlock Margin="0,1.5,6,0" Text="辞七" />
                         <TextBlock Margin="0,1.5,6,0" Text="血狐" />
+                        <TextBlock Margin="0,1.5,6,0" Text="君泽" />
+                        <TextBlock Margin="0,1.5,6,0" Text="歧辰" />
+                        <TextBlock Margin="0,1.5,6,0" Text="嗷嗷" />
+                        <TextBlock Margin="0,1.5,6,0" Text="陌陌" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小王" />
+                        <TextBlock Margin="0,1.5,6,0" Text="小龙" />
+                        <TextBlock Margin="0,1.5,6,0" Text="月桂" />
+                        <TextBlock Margin="0,1.5,6,0" Text="沐槿" />
+                        <TextBlock Margin="0,1.5,6,0" Text="雨润" />
                         <TextBlock Margin="0,1.5,6,0" Text="Alex" />
                         <TextBlock Margin="0,1.5,6,0" Text="JIUZ" />
                         <TextBlock Margin="0,1.5,6,0" Text="hina" />
@@ -359,6 +372,7 @@
                         <TextBlock Margin="0,1.5,6,0" Text="叶子L" />
                         <TextBlock Margin="0,1.5,6,0" Text="lelezi" />
                         <TextBlock Margin="0,1.5,6,0" Text="lucky" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Gd64" />
                         <TextBlock Margin="0,1.5,6,0" Text="bbbb" />
                         <TextBlock Margin="0,1.5,6,0" Text="gugu" />
                         <TextBlock Margin="0,1.5,6,0" Text="Ango" />
@@ -366,6 +380,7 @@
                         <TextBlock Margin="0,1.5,6,0" Text="徐铭h" />
                         <TextBlock Margin="0,1.5,6,0" Text="HKV1" />
                         <TextBlock Margin="0,1.5,6,0" Text="zjunE" />
+                        <TextBlock Margin="0,1.5,6,0" Text="cHEn." />
                         <TextBlock Margin="0,1.5,6,0" Text="少年A" />
                         <TextBlock Margin="0,1.5,6,0" Text="mouy" />
                         <TextBlock Margin="0,1.5,6,0" Text="KSfall" />
@@ -464,6 +479,8 @@
                         <TextBlock Margin="0,1.5,6,0" Text="哦哦哦" />
                         <TextBlock Margin="0,1.5,6,0" Text="咕谷谷" />
                         <TextBlock Margin="0,1.5,6,0" Text="长白山" />
+                        <TextBlock Margin="0,1.5,6,0" Text="杨某某" />
+                        <TextBlock Margin="0,1.5,6,0" Text="云尘眠" />
                         <TextBlock Margin="0,1.5,6,0" Text="UN_41" />
                         <TextBlock Margin="0,1.5,6,0" Text="bguae" />
                         <TextBlock Margin="0,1.5,6,0" Text="yoyal8" />
@@ -507,6 +524,7 @@
                         <TextBlock Margin="0,1.5,6,0" Text="sund3a" />
                         <TextBlock Margin="0,1.5,6,0" Text="Snowill" />
                         <TextBlock Margin="0,1.5,6,0" Text="kvmvvx" />
+                        <TextBlock Margin="0,1.5,6,0" Text="sabrina" />
                         <TextBlock Margin="0,1.5,6,0" Text="ling141" />
                         <TextBlock Margin="0,1.5,6,0" Text="Charile." />
                         <TextBlock Margin="0,1.5,6,0" Text="夜未央S" />
@@ -533,6 +551,7 @@
                         <TextBlock Margin="0,1.5,6,0" Text="weather" />
                         <TextBlock Margin="0,1.5,6,0" Text="qwptpw" />
                         <TextBlock Margin="0,1.5,6,0" Text="RedLink" />
+                        <TextBlock Margin="0,1.5,6,0" Text="SkyArea" />
                         <TextBlock Margin="0,1.5,6,0" Text="Starying" />
                         <TextBlock Margin="0,1.5,6,0" Text="longday" />
                         <TextBlock Margin="0,1.5,6,0" Text="wwwww" />
@@ -552,6 +571,7 @@
                         <TextBlock Margin="0,1.5,6,0" Text="浮世三千" />
                         <TextBlock Margin="0,1.5,6,0" Text="英白拉多" />
                         <TextBlock Margin="0,1.5,6,0" Text="逐兔寻鲸" />
+                        <TextBlock Margin="0,1.5,6,0" Text="红袖添香" />
                         <TextBlock Margin="0,1.5,6,0" Text="氮气炸锅" />
                         <TextBlock Margin="0,1.5,6,0" Text="小小小马" />
                         <TextBlock Margin="0,1.5,6,0" Text="爱莉希雅" />
@@ -619,6 +639,9 @@
                         <TextBlock Margin="0,1.5,6,0" Text="虫草絮语" />
                         <TextBlock Margin="0,1.5,6,0" Text="咸鱼冻肉" />
                         <TextBlock Margin="0,1.5,6,0" Text="六六六折" />
+                        <TextBlock Margin="0,1.5,6,0" Text="摆烂大帝" />
+                        <TextBlock Margin="0,1.5,6,0" Text="念念不忘" />
+                        <TextBlock Margin="0,1.5,6,0" Text="万权之星" />
                         <TextBlock Margin="0,1.5,6,0" Text="(=^x^=)" />
                         <TextBlock Margin="0,1.5,6,0" Text="Milkyink" />
                         <TextBlock Margin="0,1.5,6,0" Text="houteng" />
@@ -650,6 +673,7 @@
                         <TextBlock Margin="0,1.5,6,0" Text="忆恩sama" />
                         <TextBlock Margin="0,1.5,6,0" Text="InertStew" />
                         <TextBlock Margin="0,1.5,6,0" Text="小沉Chen" />
+                        <TextBlock Margin="0,1.5,6,0" Text="QILUOVO" />
                         <TextBlock Margin="0,1.5,6,0" Text="断网没mu" />
                         <TextBlock Margin="0,1.5,6,0" Text="THOPING" />
                         <TextBlock Margin="0,1.5,6,0" Text="EXcloudZ" />
@@ -665,6 +689,7 @@
                         <TextBlock Margin="0,1.5,6,0" Text="执意追风..." />
                         <TextBlock Margin="0,1.5,6,0" Text="ZMMMM" />
                         <TextBlock Margin="0,1.5,6,0" Text="sensei425" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Sariel小懒" />
                         <TextBlock Margin="0,1.5,6,0" Text="aslillusory" />
                         <TextBlock Margin="0,1.5,6,0" Text="androidhi" />
                         <TextBlock Margin="0,1.5,6,0" Text="fjh321008" />
@@ -840,6 +865,7 @@
                         <TextBlock Margin="0,1.5,6,0" Text="照井黎Terui_Rei" />
                         <TextBlock Margin="0,1.5,6,0" Text="CHENDASHUAI" />
                         <TextBlock Margin="0,1.5,6,0" Text="约翰·冯·海格力斯" />
+                        <TextBlock Margin="0,1.5,6,0" Text="星之梦Hoshino_" />
                         <TextBlock Margin="0,1.5,6,0" Text="柚子_grapefruit_" />
                         <TextBlock Margin="0,1.5,6,0" Text="某不知名的GWM" />
                         <TextBlock Margin="0,1.5,6,0" Text="PolarPanda2333" />
@@ -849,6 +875,7 @@
                         <TextBlock Margin="0,1.5,6,0" Text="过年啦(๑ᵔ⌔ᵔ๑)ノ🧨" />
                         <TextBlock Margin="0,1.5,6,0" Text="星ベ空(Xingkong)" />
                         <TextBlock Margin="0,1.5,6,0" Text="WerewolfwolfyXD" />
+                        <TextBlock Margin="0,1.5,6,0" Text="Black_Banana_Cat" />
                         <TextBlock Margin="0,1.5,6,0" Text="All systems normal" />
                         <TextBlock Margin="0,1.5,6,0" Text="传奇幻想乡冰之勇者" />
                         <TextBlock Margin="0,1.5,6,0" Text="山有扶苏,隰有荷华" />
@@ -914,7 +941,10 @@
                         <RowDefinition Height="Auto" />
                         <RowDefinition Height="60" />
                         <RowDefinition Height="Auto" />
+                        <RowDefinition Height="60" />
+                        <RowDefinition Height="Auto" />
                     </Grid.RowDefinitions>
+                    
                     <TextBlock Grid.Row="0" Grid.Column="0" Text="Java Launch Wrapper" TextWrapping="Wrap" FontWeight="Bold" />
                     <TextBlock Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2022 00ll00&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
                     <local:MyButton Grid.Row="1" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
@@ -922,51 +952,58 @@
                     <local:MyButton Grid.Row="1" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/00ll00/java_launch_wrapper?tab=MIT-1-ov-file#readme" />
 
-                    <TextBlock Grid.Row="2" Grid.Column="0" Text="Newtonsoft.Json" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2007 James Newton-King&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
+                    <TextBlock Grid.Row="2" Grid.Column="0" Text="LWJGL Unsafe Agent" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2026 Glavo&#xa;Licensed under the Apache License, Version 2.0." TextWrapping="Wrap" />
                     <local:MyButton Grid.Row="3" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
-                                    local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.newtonsoft.com/json" />
+                                    local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/HMCL-dev/lwjgl-unsafe-agent" />
                     <local:MyButton Grid.Row="3" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.apache.org/licenses/LICENSE-2.0" />
+
+                    <TextBlock Grid.Row="4" Grid.Column="0" Text="Newtonsoft.Json" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2007 James Newton-King&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="5" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                                    local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.newtonsoft.com/json" />
+                    <local:MyButton Grid.Row="5" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://opensource.org/licenses/MIT" />
                     
-                    <TextBlock Grid.Row="4" Grid.Column="0" Text="NAudio" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="4" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2015 Mark Heath ([email protected])&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="5" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                    <TextBlock Grid.Row="6" Grid.Column="0" Text="NAudio" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2015 Mark Heath ([email protected])&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="7" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/naudio/NAudio" />
-                    <local:MyButton Grid.Row="5" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left" 
+                    <local:MyButton Grid.Row="7" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left" 
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/naudio/NAudio/blob/master/license.txt" />
 
-                    <TextBlock Grid.Row="6" Grid.Column="0" Text="Ookii.Dialogs" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="6" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2009 Sven Groot (Ookii.org)" TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="7" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                    <TextBlock Grid.Row="8" Grid.Column="0" Text="Ookii.Dialogs" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="8" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2009 Sven Groot (Ookii.org)" TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="9" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.ookii.org/Software/Dialogs/" />
-                    <local:MyButton Grid.Row="7" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                    <local:MyButton Grid.Row="9" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/caioproiete/ookii-dialogs-wpf/blob/master/LICENSE" />
                     
-                    <TextBlock Grid.Row="8" Grid.Column="0" Text="Iconmonstr" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="8" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2019 iconmonstr (Alexander Kahlkopf)" TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="9" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                    <TextBlock Grid.Row="10" Grid.Column="0" Text="Iconmonstr" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="10" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2019 iconmonstr (Alexander Kahlkopf)" TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="11" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://iconmonstr.com/" />
-                    <local:MyButton Grid.Row="9" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                    <local:MyButton Grid.Row="11" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://iconmonstr.com/license/" />
                     
-                    <TextBlock Grid.Row="10" Grid.Column="0" Text="libwebp wrapper for .NET" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="10" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2012 Imazen&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="11" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                    <TextBlock Grid.Row="12" Grid.Column="0" Text="libwebp wrapper for .NET" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2012 Imazen&#xa;Licensed under the MIT License." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="13" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/imazen/libwebp-net" />
-                    <local:MyButton Grid.Row="11" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                    <local:MyButton Grid.Row="13" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/imazen/libwebp-net/blob/master/LICENSE.txt" />
 
-                    <TextBlock Grid.Row="12" Grid.Column="0" Text="Iconfont" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="12" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © ALIMAMA MUX, powered by alimama THX." TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="13" Grid.Column="2" MinWidth="140" Text="查看原网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                    <TextBlock Grid.Row="14" Grid.Column="0" Text="Iconfont" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="14" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © ALIMAMA MUX, powered by alimama THX." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="15" Grid.Column="2" MinWidth="140" Text="查看原网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://www.iconfont.cn/" />
 
-                    <TextBlock Grid.Row="14" Grid.Column="0" Text="EasyTier" TextWrapping="Wrap" FontWeight="Bold" />
-                    <TextBlock Grid.Row="14" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2024-present Easytier Programme within The Commons Conservancy&#xa;Licensed under the GNU Lesser General Public License." TextWrapping="Wrap" />
-                    <local:MyButton Grid.Row="15" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
+                    <TextBlock Grid.Row="16" Grid.Column="0" Text="EasyTier" TextWrapping="Wrap" FontWeight="Bold" />
+                    <TextBlock Grid.Row="16" Grid.Column="2" Grid.ColumnSpan="2" Text="Copyright © 2024-present Easytier Programme within The Commons Conservancy&#xa;Licensed under the GNU Lesser General Public License." TextWrapping="Wrap" />
+                    <local:MyButton Grid.Row="17" Grid.Column="2" MinWidth="140" Text="查看来源网站" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left"
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://easytier.cn/" />
-                    <local:MyButton Grid.Row="15" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left" 
+                    <local:MyButton Grid.Row="17" Grid.Column="3" MinWidth="140" Text="查看许可文档" Padding="13,0" Margin="0,7,20,18" HorizontalAlignment="Left" 
                                     local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://github.com/EasyTier/EasyTier/blob/main/LICENSE" />
                 </Grid>
             </local:MyCard>

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

@@ -289,7 +289,9 @@
                     </local:MyComboBox>
                     <StackPanel Margin="0,12,0,4" Grid.Row="8" Grid.ColumnSpan="2" HorizontalAlignment="Left">
                         <local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" local:SettingService.Key="LaunchAdvanceDisableJLW"
-                            ToolTipService.Placement="Right" ToolTip="PCL 会使用 Java Launch Wrapper 来修复老版本 Java 在中文路径下无法启动的问题。&#xa;如果这被反作弊拦截,或遇到其他问题,也可以将其关闭。" />
+                            ToolTipService.Placement="Right" ToolTip="是否使用 Java Launch Wrapper 修复 Java 18- 在中文路径下可能无法正常启动的问题。&#xa;详见:https://github.com/00ll00/java_launch_wrapper" />
+                        <local:MyCheckBox Height="28" Text="禁用 LWJGL Unsafe Agent" local:SettingService.Key="LaunchAdvanceDisableLUA"
+                            ToolTipService.Placement="Right" ToolTip="是否使用 LWJGL Unsafe Agent 修复 Java 25+ 的一个性能问题。&#xa;详见:https://github.com/HMCL-dev/lwjgl-unsafe-agent" />
                         <local:MyCheckBox Height="28" Text="使用高性能显卡" local:SettingService.Key="LaunchAdvanceGraphicCard"
                             ToolTipService.Placement="Right" ToolTip="自动在 Windows 设置 → 系统 → 屏幕 → 显示卡 中将 PCL 和 Java 改为使用高性能显卡。&#xa;如果同时有集成显卡和独立显卡,这能确保 MC 使用独立显卡进行渲染,以大幅提高帧率。" />
                     </StackPanel>

+ 2 - 0
Plain Craft Launcher 2/Pages/PageSetup/Settings.vb

@@ -98,6 +98,7 @@
         New Setting("LaunchAdvanceRun", ""),
         New Setting("LaunchAdvanceRunWait", True),
         New Setting("LaunchAdvanceDisableJLW", False),
+        New Setting("LaunchAdvanceDisableLUA", False),
         New Setting("LaunchAdvanceGraphicCard", True, Source:=Sources.Registry),
         New Setting("LaunchAdvanceGC", 4),
         New Setting("LaunchRamType", 0, OnChanged:=AddressOf PageSetupLaunch.UpdateRamType),
@@ -171,6 +172,7 @@
         New Setting("VersionAdvanceRun", "", Source:=Sources.Instance),
         New Setting("VersionAdvanceRunWait", True, Source:=Sources.Instance),
         New Setting("VersionAdvanceDisableJLW", False, Source:=Sources.Instance),
+        New Setting("VersionAdvanceDisableLUA", False, Source:=Sources.Instance),
         New Setting("VersionAdvanceDisableModUpdate", False, Source:=Sources.Instance),
         New Setting("VersionAdvanceGC", 0, Source:=Sources.Instance),
         New Setting("VersionRamType", 2, Source:=Sources.Instance, OnChanged:=AddressOf PageInstanceSetup.OnVersionRamTypeChanged),

+ 1 - 0
Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj

@@ -923,6 +923,7 @@
     <Resource Include="Images\Heads\EasyTier.png" />
   </ItemGroup>
   <ItemGroup>
+    <None Include="Resources\lwjgl-unsafe-agent-1.0.jar" />
     <Content Include="Resources\System.ValueTuple.dll" />
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />

BIN
Plain Craft Launcher 2/Resources/lwjgl-unsafe-agent-1.0.jar