diff --git a/MeloongCore b/MeloongCore
index d3b9ccd..e5c8e65 160000
--- a/MeloongCore
+++ b/MeloongCore
@@ -1 +1 @@
-Subproject commit d3b9ccde9c212ccce552099ada11dad35f9551a4
+Subproject commit e5c8e65e2b4c4c7de5a6a6f56508edf2c0175aff
diff --git a/PCLCS/Java.cs b/PCLCS/Java.cs
index 9d667e5..1cd39b1 100644
--- a/PCLCS/Java.cs
+++ b/PCLCS/Java.cs
@@ -3,7 +3,7 @@ namespace PCLCS;
///
/// 单个 Java 的实例。
///
-[Serializable] public class Java(string folder, Version? version = null) {
+[Serializable] public class Java(string folder, Version? version = null) : IEquatable {
///
/// java.exe 文件所在的文件夹路径,这通常是 bin 文件夹。以 \ 结尾。
@@ -63,6 +63,12 @@ namespace PCLCS;
/// 若已进行过检查,表示该检查是否成功。若未检查,则为 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);
+
/// 用户友好的描述文本。
public override string ToString()
=> $"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 isRightInCandidateFolder = JavaUtils.CandidateFolders.Any(folder => PathUtils.IsParentOf(folder, right.Folder));
if (isLeftInCandidateFolder != isRightInCandidateFolder) return isLeftInCandidateFolder ? -1 : 1;
- // 其次优先使用主版本号接近 25 的 Java
- var leftDistance = left.Version is null ? int.MaxValue : Math.Abs(left.Version.Major - 25);
- var rightDistance = right.Version is null ? int.MaxValue : Math.Abs(right.Version.Major - 25);
+ // 其次优先使用主版本号接近 21 的 Java
+ 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 - 21);
return leftDistance.CompareTo(rightDistance);
});
return javas;
@@ -138,11 +144,10 @@ public static class JavaUtils {
// 将新发现的 Java 排在最前,原有列表保留既有顺序排在后面
var oldJavaList = Configs.JavaList.Get()!;
oldJavaList = await JavaUtils.CheckAllAsync(oldJavaList, c, p?.SplitTo(0.9)).NoCapture(); // 检查原有列表中的 Java
- HashSet oldJavaFolders = new(oldJavaList.Select(j => j.Folder), StringComparer.OrdinalIgnoreCase);
- javaList.RemoveIf(j => oldJavaFolders.Contains(j.Folder)); // 此时 javaList 中只剩下新发现的 Java
+ javaList.RemoveAll(oldJavaList); // 此时 javaList 中只剩下新发现的 Java
javaList = await JavaUtils.SortAsync(javaList, c).NoCapture(); // 将所有新发现的 Java 按优先级排序
javaList.AddRange(oldJavaList);
- javaList = javaList.DistinctBy(j => j.Folder.Lower()).ToList();
+ javaList = javaList.Distinct().ToList();
// 删掉已被移除的 Java
javaList.RemoveIf(j => Configs.JavaRemovedList.Get()!.Contains(j.Folder, StringComparer.OrdinalIgnoreCase));
// 写入设置
diff --git a/Plain Craft Launcher 2/Controls/MyScrollViewer.vb b/Plain Craft Launcher 2/Controls/MyScrollViewer.vb
index b8f476c..5ed2b5e 100644
--- a/Plain Craft Launcher 2/Controls/MyScrollViewer.vb
+++ b/Plain Craft Launcher 2/Controls/MyScrollViewer.vb
@@ -11,7 +11,8 @@ Public Class MyScrollViewer
(GetType(ComboBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, ComboBox).IsDropDownOpen) OrElse
(GetType(TextBox).IsAssignableFrom(SourceType) AndAlso CType(e.Source, TextBox).AcceptsReturn) 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
End If
diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb
index fd04ee7..bcf02d7 100644
--- a/Plain Craft Launcher 2/FormMain.xaml.vb
+++ b/Plain Craft Launcher 2/FormMain.xaml.vb
@@ -11,7 +11,7 @@ Public Class FormMain
Dim FeatureList As New List(Of KeyValuePair(Of Integer, String))
'统计更新日志条目
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)(3, "优化:导出整合包时允许自动导出版本文件夹中的 Java"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:重做弹出提示的样式以及动画,以更符合现代 UI 审美"))
@@ -87,6 +87,16 @@ Public Class FormMain
'3:BUG+ IMP* FEAT-
'2:BUG* IMP-
'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
FeatureList.Add(New KeyValuePair(Of Integer, String)(4, "新增:重做 Java 管理与相关设置,允许调整 Java 优先级、指定 Java 版本范围等"))
FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "优化:导出整合包时允许自动导出版本文件夹中的 Java"))
diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb
index d8e51b2..32b4b5a 100644
--- a/Plain Craft Launcher 2/Modules/Base/ModBase.vb
+++ b/Plain Craft Launcher 2/Modules/Base/ModBase.vb
@@ -6,12 +6,12 @@ Public Module ModBase
#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 自动替换
#If RELEASE Then
Public Const VersionCode As Integer = 406 '正式版
#Else
- Public Const VersionCode As Integer = 405 '快照版
+ Public Const VersionCode As Integer = 407 '快照版
#End If
'版本信息
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
index 19fa681..ee0cb26 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
@@ -948,13 +948,13 @@ NextStack:
Case CrashReason.内存不足
Results.Add("Minecraft 内存不足,导致其无法继续运行。\n这很可能是因为电脑内存不足、游戏分配的内存不足,或是配置要求过高。\n\n你可以尝试在 更多 → 百宝箱 中选择 内存优化,然后再启动游戏。\n如果还是不行,请在启动设置中增加为游戏分配的内存,并删除配置要求较高的材质、Mod、光影。\n如果依然不奏效,请在开始游戏前尽量关闭其他软件,或者……换台电脑?\h")
Case CrashReason.使用OpenJ9
- Results.Add("游戏因为使用 OpenJ9 而崩溃了。\n请在启动设置的 Java 选择一项中改用非 OpenJ9 的 Java,然后再启动游戏。")
+ Results.Add("游戏因为使用 OpenJ9 而崩溃了。\n请在版本设置的 Java 选项中改用非 OpenJ9 的 Java,然后再启动游戏。")
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版本过高
- Results.Add("游戏似乎因为你所使用的 Java 版本过高而崩溃了。\n请在启动设置的 Java 选择一项中改用较低版本的 Java,然后再启动游戏。\n如果没有,可以从网络中下载、安装一个。")
+ Results.Add("游戏似乎因为你所使用的 Java 版本过高而崩溃了。\n请在版本设置的 Java 选项中改用较低版本的 Java,然后再启动游戏。\n如果没有,可以从网络中下载、安装一个。")
Case CrashReason.Java版本不兼容
- Results.Add("游戏不兼容你当前使用的 Java。\n如果没有合适的 Java,可以从网络中下载、安装一个。")
+ Results.Add("游戏不兼容你当前使用的 Java。\n请在版本设置的 Java 选项中改用合适版本的 Java,然后再启动游戏。\n如果你没有安装任何 Mod 并且因此崩溃,请向 PCL 提交反馈。")
Case CrashReason.Mod名称包含特殊字符
Results.Add("由于有 Mod 的名称包含特殊字符,导致游戏崩溃。\n请尝试修改 Mod 文件名,让它只包含英文字母、数字、减号(-)、下划线(_)和小数点,然后再启动游戏。")
Case CrashReason.MixinBootstrap缺失
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb
index ad09add..92a5c6b 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb
@@ -82,7 +82,7 @@ Public Module ModJava
'加入列表顶部
Configs.JavaList.Edit(
Sub(ByRef List)
- List.RemoveIf(Function(j) j.Folder.Equals(NewJava.Folder, StringComparison.OrdinalIgnoreCase))
+ List.Remove(NewJava)
List.Insert(0, NewJava)
End Sub)
Hint($"已将 Java 加入列表:{NewJavaPath}", HintType.Green)
@@ -458,13 +458,11 @@ Public Module ModJava
p?.Set(0.4) : GoTo NoForcedJava
End If
Logger.Info($"将版本独立设置改为老版本中强制指定的 Java:{ForcedJava}")
- Dim Match = Configs.JavaList.Get().FirstOrDefault(Function(j) j.Folder.Equals(ForcedJava.Folder, StringComparison.OrdinalIgnoreCase))
- If Match Is Nothing Then
+ If Not Configs.JavaList.Get().Contains(ForcedJava) Then
Configs.JavaList.Edit(Sub(ByRef List) List.Add(ForcedJava)) '加入列表底部
- Match = ForcedJava
Logger.Info($"已将强制指定的 Java 加入 Java 列表底部:{ForcedJava}")
End If
- Configs.InstanceForcedJava.Set(Match, Instance.Config)
+ Configs.InstanceForcedJava.Set(ForcedJava, Instance.Config)
Settings.Set("VersionArgumentJavaV2", 3, Instance)
UpdateJavaLists()
Configs.InstanceMigratedJava.Set(True, Instance.Config) '完成
diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
index 710b712..67554fb 100644
--- a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
+++ b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
' 方法是按如下所示使用“*”
-
-
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
index 1d736b7..8574314 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
@@ -107,7 +107,7 @@ Public Class PageLaunchRight
Url = "https://qawsedrftgyhujiko.fun/pcl2/Custom.xaml"
Case 17
Logger.Info("Bangumi 番剧主页")
- Url = "https://pbp.kaphia.qzz.io"
+ Url = "https://bangumi.p.kaphia.qzz.io"
End Select
End Select
'联网下载
diff --git a/Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml b/Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml
index 2d58213..a4d465b 100644
--- a/Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml
+++ b/Plain Craft Launcher 2/Pages/PageOther/PageOtherAbout.xaml
@@ -278,6 +278,7 @@
+
@@ -351,6 +352,7 @@
+