This commit is contained in:
龙腾猫跃
2026-07-03 15:07:59 +08:00
parent c6d0457946
commit 5b05f87067
10 changed files with 40 additions and 24 deletions
+12 -7
View File
@@ -3,7 +3,7 @@ namespace PCLCS;
/// <summary> /// <summary>
/// 单个 Java 的实例。 /// 单个 Java 的实例。
/// </summary> /// </summary>
[Serializable] public class Java(string folder, Version? version = null) { [Serializable] public class Java(string folder, Version? version = null) : IEquatable<Java> {
/// <summary> /// <summary>
/// java.exe 文件所在的文件夹路径,这通常是 bin 文件夹。以 \ 结尾。 /// java.exe 文件所在的文件夹路径,这通常是 bin 文件夹。以 \ 结尾。
@@ -63,6 +63,12 @@ namespace PCLCS;
/// <summary>若已进行过检查,表示该检查是否成功。若未检查,则为 null。</summary> /// <summary>若已进行过检查,表示该检查是否成功。若未检查,则为 null。</summary>
[JsonIgnore] internal bool? available = null; [JsonIgnore] internal bool? available = null;
// 相同检查
public bool Equals(Java? other)
=> other is not null && string.Equals(Folder, other.Folder, StringComparison.OrdinalIgnoreCase);
public override bool Equals(object? obj) => obj is Java other && Equals(other);
public override int GetHashCode() => StringComparer.OrdinalIgnoreCase.GetHashCode(Folder);
/// <summary>用户友好的描述文本。</summary> /// <summary>用户友好的描述文本。</summary>
public override string ToString() public override string ToString()
=> $"Java {Version?.Major.ToString() ?? "尚未检查"} ({Version}):{Folder}"; => $"Java {Version?.Major.ToString() ?? "尚未检查"} ({Version}):{Folder}";
@@ -92,9 +98,9 @@ public static class JavaUtils {
var isLeftInCandidateFolder = JavaUtils.CandidateFolders.Any(folder => PathUtils.IsParentOf(folder, left.Folder)); var isLeftInCandidateFolder = JavaUtils.CandidateFolders.Any(folder => PathUtils.IsParentOf(folder, left.Folder));
var isRightInCandidateFolder = JavaUtils.CandidateFolders.Any(folder => PathUtils.IsParentOf(folder, right.Folder)); var isRightInCandidateFolder = JavaUtils.CandidateFolders.Any(folder => PathUtils.IsParentOf(folder, right.Folder));
if (isLeftInCandidateFolder != isRightInCandidateFolder) return isLeftInCandidateFolder ? -1 : 1; if (isLeftInCandidateFolder != isRightInCandidateFolder) return isLeftInCandidateFolder ? -1 : 1;
// 其次优先使用主版本号接近 25 的 Java // 其次优先使用主版本号接近 21 的 Java
var leftDistance = left.Version is null ? int.MaxValue : Math.Abs(left.Version.Major - 25); var leftDistance = left.Version is null ? int.MaxValue : Math.Abs(left.Version.Major - 21);
var rightDistance = right.Version is null ? int.MaxValue : Math.Abs(right.Version.Major - 25); var rightDistance = right.Version is null ? int.MaxValue : Math.Abs(right.Version.Major - 21);
return leftDistance.CompareTo(rightDistance); return leftDistance.CompareTo(rightDistance);
}); });
return javas; return javas;
@@ -138,11 +144,10 @@ public static class JavaUtils {
// 将新发现的 Java 排在最前,原有列表保留既有顺序排在后面 // 将新发现的 Java 排在最前,原有列表保留既有顺序排在后面
var oldJavaList = Configs.JavaList.Get()!; var oldJavaList = Configs.JavaList.Get()!;
oldJavaList = await JavaUtils.CheckAllAsync(oldJavaList, c, p?.SplitTo(0.9)).NoCapture(); // 检查原有列表中的 Java oldJavaList = await JavaUtils.CheckAllAsync(oldJavaList, c, p?.SplitTo(0.9)).NoCapture(); // 检查原有列表中的 Java
HashSet<string> oldJavaFolders = new(oldJavaList.Select(j => j.Folder), StringComparer.OrdinalIgnoreCase); javaList.RemoveAll(oldJavaList); // 此时 javaList 中只剩下新发现的 Java
javaList.RemoveIf(j => oldJavaFolders.Contains(j.Folder)); // 此时 javaList 中只剩下新发现的 Java
javaList = await JavaUtils.SortAsync(javaList, c).NoCapture(); // 将所有新发现的 Java 按优先级排序 javaList = await JavaUtils.SortAsync(javaList, c).NoCapture(); // 将所有新发现的 Java 按优先级排序
javaList.AddRange(oldJavaList); javaList.AddRange(oldJavaList);
javaList = javaList.DistinctBy(j => j.Folder.Lower()).ToList(); javaList = javaList.Distinct().ToList();
// 删掉已被移除的 Java // 删掉已被移除的 Java
javaList.RemoveIf(j => Configs.JavaRemovedList.Get()!.Contains(j.Folder, StringComparer.OrdinalIgnoreCase)); javaList.RemoveIf(j => Configs.JavaRemovedList.Get()!.Contains(j.Folder, StringComparer.OrdinalIgnoreCase));
// 写入设置 // 写入设置
@@ -11,7 +11,8 @@ Public Class MyScrollViewer
(GetType(ComboBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, ComboBox).IsDropDownOpen) OrElse (GetType(ComboBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, ComboBox).IsDropDownOpen) OrElse
(GetType(TextBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, TextBox).AcceptsReturn) OrElse (GetType(TextBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, TextBox).AcceptsReturn) OrElse
GetType(ComboBoxItem).IsAssignableFrom(SourceType) OrElse GetType(ComboBoxItem).IsAssignableFrom(SourceType) OrElse
PresentationSource.FromVisual(e.Source)?.RootVisual?.GetType().FullName = "System.Windows.Controls.Primitives.PopupRoot") Then (TypeOf e.Source Is Visual AndAlso
PresentationSource.FromVisual(e.Source)?.RootVisual?.GetType().FullName = "System.Windows.Controls.Primitives.PopupRoot")) Then
'如果当前是在对有滚动条的下拉框或文本框执行,则不接管操作 '如果当前是在对有滚动条的下拉框或文本框执行,则不接管操作
Return Return
End If End If
+11 -1
View File
@@ -11,7 +11,7 @@ Public Class FormMain
Dim FeatureList As New List(Of KeyValuePair(Of Integer, String)) Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
'统计更新日志条目 '统计更新日志条目
If BuildType = BuildTypes.Release Then If BuildType = BuildTypes.Release Then
If LastVersion < 406 Then 'Release 2.13.0.0 If LastVersion < 406 Then 'Release 2.13.0.1
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:重做 Java 管理与相关设置,允许调整 Java 优先级、指定 Java 版本范围等")) FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:重做 Java 管理与相关设置,允许调整 Java 优先级、指定 Java 版本范围等"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:导出整合包时允许自动导出版本文件夹中的 Java")) FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:导出整合包时允许自动导出版本文件夹中的 Java"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:重做弹出提示的样式以及动画,以更符合现代 UI 审美")) FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:重做弹出提示的样式以及动画,以更符合现代 UI 审美"))
@@ -87,6 +87,16 @@ Public Class FormMain
'3:BUG+ IMP* FEAT- '3:BUG+ IMP* FEAT-
'2:BUG* IMP- '2:BUG* IMP-
'1:BUG- '1:BUG-
If LastVersion < 407 Then 'Snapshot 2.13.0.1
If LastVersion = 405 Then
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:使用部分主页预设时崩溃"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:无法删除部分文件夹"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复:版本设置中指定的 Java 无法被保存"))
FeatureCount += 1
BugCount += 3
End If
FeatureCount += 2
End If
If LastVersion < 405 Then 'Snapshot 2.13.0.0 If LastVersion < 405 Then 'Snapshot 2.13.0.0
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:重做 Java 管理与相关设置,允许调整 Java 优先级、指定 Java 版本范围等")) FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:重做 Java 管理与相关设置,允许调整 Java 优先级、指定 Java 版本范围等"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:导出整合包时允许自动导出版本文件夹中的 Java")) FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:导出整合包时允许自动导出版本文件夹中的 Java"))
@@ -6,12 +6,12 @@ Public Module ModBase
#Region "声明" #Region "声明"
'下列版本信息由更新器自动修改 '下列版本信息由更新器自动修改
Public Const VersionBaseName As String = "2.13.0.0" '显示用版本名 Public Const VersionBaseName As String = "2.13.0.1" '显示用版本名
Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换 Public Const CommitHash As String = "" 'Commit Hash,由 GitHub Workflow 自动替换
#If RELEASE Then #If RELEASE Then
Public Const VersionCode As Integer = 406 '正式版 Public Const VersionCode As Integer = 406 '正式版
#Else #Else
Public Const VersionCode As Integer = 405 '快照版 Public Const VersionCode As Integer = 407 '快照版
#End If #End If
'版本信息 '版本信息
@@ -948,13 +948,13 @@ NextStack:
Case CrashReason.内存不足 Case CrashReason.内存不足
Results.Add("Minecraft 内存不足,导致其无法继续运行。\n这很可能是因为电脑内存不足、游戏分配的内存不足,或是配置要求过高。\n\n你可以尝试在 更多 → 百宝箱 中选择 内存优化,然后再启动游戏。\n如果还是不行,请在启动设置中增加为游戏分配的内存,并删除配置要求较高的材质、Mod、光影。\n如果依然不奏效,请在开始游戏前尽量关闭其他软件,或者……换台电脑?\h") Results.Add("Minecraft 内存不足,导致其无法继续运行。\n这很可能是因为电脑内存不足、游戏分配的内存不足,或是配置要求过高。\n\n你可以尝试在 更多 → 百宝箱 中选择 内存优化,然后再启动游戏。\n如果还是不行,请在启动设置中增加为游戏分配的内存,并删除配置要求较高的材质、Mod、光影。\n如果依然不奏效,请在开始游戏前尽量关闭其他软件,或者……换台电脑?\h")
Case CrashReason.使用OpenJ9 Case CrashReason.使用OpenJ9
Results.Add("游戏因为使用 OpenJ9 而崩溃了。\n请在启动设置的 Java 选择一项中改用非 OpenJ9 的 Java,然后再启动游戏。") Results.Add("游戏因为使用 OpenJ9 而崩溃了。\n请在版本设置的 Java 选项中改用非 OpenJ9 的 Java,然后再启动游戏。")
Case CrashReason.使用JDK Case CrashReason.使用JDK
Results.Add("游戏似乎因为使用 JDK,或 Java 版本过高而崩溃了。\n请在启动设置的 Java 选择一项中改用 JRE 8(Java 8),然后再启动游戏。\n如果你没有安装 JRE 8,你可以从网络中下载、安装一个。") Results.Add("游戏似乎因为使用 JDK,或 Java 版本过高而崩溃了。\n请在版本设置的 Java 选项中改用 Java 8,然后再启动游戏。\n如果你没有安装 Java 8,可以从网络中下载、安装一个。")
Case CrashReason.Java版本过高 Case CrashReason.Java版本过高
Results.Add("游戏似乎因为你所使用的 Java 版本过高而崩溃了。\n请在启动设置的 Java 选择一项中改用较低版本的 Java,然后再启动游戏。\n如果没有,可以从网络中下载、安装一个。") Results.Add("游戏似乎因为你所使用的 Java 版本过高而崩溃了。\n请在版本设置的 Java 选项中改用较低版本的 Java,然后再启动游戏。\n如果没有,可以从网络中下载、安装一个。")
Case CrashReason.Java版本不兼容 Case CrashReason.Java版本不兼容
Results.Add("游戏不兼容你当前使用的 Java。\n如果没有合适的 Java,可以从网络中下载、安装一个。") Results.Add("游戏不兼容你当前使用的 Java。\n请在版本设置的 Java 选项中改用合适版本的 Java,然后再启动游戏。\n如果你没有安装任何 Mod 并且因此崩溃,请向 PCL 提交反馈。")
Case CrashReason.Mod名称包含特殊字符 Case CrashReason.Mod名称包含特殊字符
Results.Add("由于有 Mod 的名称包含特殊字符,导致游戏崩溃。\n请尝试修改 Mod 文件名,让它只包含英文字母、数字、减号(-)、下划线(_)和小数点,然后再启动游戏。") Results.Add("由于有 Mod 的名称包含特殊字符,导致游戏崩溃。\n请尝试修改 Mod 文件名,让它只包含英文字母、数字、减号(-)、下划线(_)和小数点,然后再启动游戏。")
Case CrashReason.MixinBootstrap缺失 Case CrashReason.MixinBootstrap缺失
@@ -82,7 +82,7 @@ Public Module ModJava
'加入列表顶部 '加入列表顶部
Configs.JavaList.Edit( Configs.JavaList.Edit(
Sub(ByRef List) Sub(ByRef List)
List.RemoveIf(Function(j) j.Folder.Equals(NewJava.Folder, StringComparison.OrdinalIgnoreCase)) List.Remove(NewJava)
List.Insert(0, NewJava) List.Insert(0, NewJava)
End Sub) End Sub)
Hint($"已将 Java 加入列表:{NewJavaPath}", HintType.Green) Hint($"已将 Java 加入列表:{NewJavaPath}", HintType.Green)
@@ -458,13 +458,11 @@ Public Module ModJava
p?.Set(0.4) : GoTo NoForcedJava p?.Set(0.4) : GoTo NoForcedJava
End If End If
Logger.Info($"将版本独立设置改为老版本中强制指定的 Java:{ForcedJava}") Logger.Info($"将版本独立设置改为老版本中强制指定的 Java:{ForcedJava}")
Dim Match = Configs.JavaList.Get().FirstOrDefault(Function(j) j.Folder.Equals(ForcedJava.Folder, StringComparison.OrdinalIgnoreCase)) If Not Configs.JavaList.Get().Contains(ForcedJava) Then
If Match Is Nothing Then
Configs.JavaList.Edit(Sub(ByRef List) List.Add(ForcedJava)) '加入列表底部 Configs.JavaList.Edit(Sub(ByRef List) List.Add(ForcedJava)) '加入列表底部
Match = ForcedJava
Logger.Info($"已将强制指定的 Java 加入 Java 列表底部:{ForcedJava}") Logger.Info($"已将强制指定的 Java 加入 Java 列表底部:{ForcedJava}")
End If End If
Configs.InstanceForcedJava.Set(Match, Instance.Config) Configs.InstanceForcedJava.Set(ForcedJava, Instance.Config)
Settings.Set("VersionArgumentJavaV2", 3, Instance) Settings.Set("VersionArgumentJavaV2", 3, Instance)
UpdateJavaLists() UpdateJavaLists()
Configs.InstanceMigratedJava.Set(True, Instance.Config) '完成 Configs.InstanceMigratedJava.Set(True, Instance.Config) '完成
@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号 ' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
' 方法是按如下所示使用“*” ' 方法是按如下所示使用“*”
<Assembly: AssemblyVersion("2.13.0.0")> <Assembly: AssemblyVersion("2.13.0.1")>
<Assembly: AssemblyFileVersion("2.13.0.0")> <Assembly: AssemblyFileVersion("2.13.0.1")>
<Assembly: NeutralResourcesLanguage("")> <Assembly: NeutralResourcesLanguage("")>
@@ -107,7 +107,7 @@ Public Class PageLaunchRight
Url = "https://qawsedrftgyhujiko.fun/pcl2/Custom.xaml" Url = "https://qawsedrftgyhujiko.fun/pcl2/Custom.xaml"
Case 17 Case 17
Logger.Info("Bangumi 番剧主页") Logger.Info("Bangumi 番剧主页")
Url = "https://pbp.kaphia.qzz.io" Url = "https://bangumi.p.kaphia.qzz.io"
End Select End Select
End Select End Select
'联网下载 '联网下载
@@ -278,6 +278,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="陈知远" />
<TextBlock Margin="0,1.5,6,0" Text="TaLula" /> <TextBlock Margin="0,1.5,6,0" Text="TaLula" />
<TextBlock Margin="0,1.5,6,0" Text="N线🧵" /> <TextBlock Margin="0,1.5,6,0" Text="N线🧵" />
<TextBlock Margin="0,1.5,6,0" Text="秋辞白." /> <TextBlock Margin="0,1.5,6,0" Text="秋辞白." />
@@ -351,6 +352,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="一条鱼瓯" />
<TextBlock Margin="0,1.5,6,0" Text="Kang_XL" /> <TextBlock Margin="0,1.5,6,0" Text="Kang_XL" />
<TextBlock Margin="0,1.5,6,0" Text="Crispykit" /> <TextBlock Margin="0,1.5,6,0" Text="Crispykit" />
<TextBlock Margin="0,1.5,6,0" Text="vorinshe" /> <TextBlock Margin="0,1.5,6,0" Text="vorinshe" />