From 31aa2e5d62c58b695ff069958e173f8827cf490c Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Sat, 23 May 2026 00:41:37 +0800 Subject: [PATCH 1/8] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=20VisualBasi?= =?UTF-8?q?c.CompilerServices=20=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/Base/ModBase.cs | 40 ++++---- .../Modules/Base/ModLoader.cs | 7 +- .../Modules/Minecraft/ModLaunch.cs | 3 +- .../Modules/Minecraft/ModModpack.cs | 27 +++--- .../Pages/PageDownload/ModDownloadLib.cs | 92 +++++++++---------- .../PageDownload/PageDownloadInstall.xaml.cs | 47 ++++------ .../PageInstance/PageInstanceExport.xaml.cs | 61 +++++++++--- .../PageInstance/PageInstanceInstall.xaml.cs | 49 ++++------ 8 files changed, 162 insertions(+), 164 deletions(-) diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.cs b/Plain Craft Launcher 2/Modules/Base/ModBase.cs index 58e094e94..171ebd566 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModBase.cs +++ b/Plain Craft Launcher 2/Modules/Base/ModBase.cs @@ -19,7 +19,6 @@ using System.Xaml; using System.Xml.Linq; using Microsoft.VisualBasic; -using Microsoft.VisualBasic.CompilerServices; using Microsoft.Win32; using Newtonsoft.Json; using PCL.Core.App; @@ -250,10 +249,10 @@ public MyColor(object obj) } else { - A = Conversions.ToDouble(((dynamic)obj).A); - R = Conversions.ToDouble(((dynamic)obj).R); - G = Conversions.ToDouble(((dynamic)obj).G); - B = Conversions.ToDouble(((dynamic)obj).B); + A = Convert.ToDouble(((dynamic)obj).A); + R = Convert.ToDouble(((dynamic)obj).R); + G = Convert.ToDouble(((dynamic)obj).G); + B = Convert.ToDouble(((dynamic)obj).B); } } @@ -429,7 +428,7 @@ public override string ToString() public override bool Equals(object obj) { - return Operators.ConditionalCompareObjectEqual(this, obj, false); + return obj is MyColor other && A == other.A && R == other.R && G == other.G && B == other.B; } } @@ -562,7 +561,7 @@ public static string RadixConvert(string Input, int FromRadix, int ToRadix) // 转换为十进制 var RealNum = 0L; var Scale = 1L; - foreach (var Digit in Input.Reverse().Select(l => Digits.IndexOfF(Conversions.ToString(l)))) + foreach (var Digit in Input.Reverse().Select(l => Digits.IndexOfF(l.ToString()))) { RealNum += Digit * Scale; Scale *= FromRadix; @@ -1093,7 +1092,7 @@ public static string GetFileMD5(string FilePath) // 获取 MD5 using (var fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { - return Conversions.ToString(GetHexString(MD5Provider.Instance.ComputeHash(fs))); + return (string)GetHexString(MD5Provider.Instance.ComputeHash(fs)); } } catch (Exception ex) @@ -1126,7 +1125,7 @@ public static string GetFileSHA512(string FilePath) // 获取 SHA512 using (var fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { - return Conversions.ToString(GetHexString(SHA512Provider.Instance.ComputeHash(fs))); + return (string)GetHexString(SHA512Provider.Instance.ComputeHash(fs)); } } catch (Exception ex) @@ -1159,7 +1158,7 @@ public static string GetFileSHA256(string FilePath) // 获取 SHA256 using (var fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { - return Conversions.ToString(GetHexString(SHA256Provider.Instance.ComputeHash(fs))); + return (string)GetHexString(SHA256Provider.Instance.ComputeHash(fs)); } } catch (Exception ex) @@ -1190,7 +1189,7 @@ public static string GetFileSHA1(string FilePath) // 获取 SHA1 using (var fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { - return Conversions.ToString(GetHexString(SHA1Provider.Instance.ComputeHash(fs))); + return (string)GetHexString(SHA1Provider.Instance.ComputeHash(fs)); } } catch (Exception ex) @@ -1215,7 +1214,7 @@ public static string GetAuthSHA1(Stream inputStream) { try { - return Conversions.ToString(GetHexString(SHA1Provider.Instance.ComputeHash(inputStream))); + return (string)GetHexString(SHA1Provider.Instance.ComputeHash(inputStream)); } catch (Exception ex) { @@ -1355,7 +1354,7 @@ public static void ExtractFile(string CompressFilePath, string DestDirectory, En Directory.CreateDirectory(DestDirectory); DestDirectory = Path.GetFullPath(DestDirectory); if (!DestDirectory.EndsWith(Path.DirectorySeparatorChar.ToString())) - DestDirectory += Conversions.ToString(Path.DirectorySeparatorChar); + DestDirectory += Path.DirectorySeparatorChar.ToString(); if (CompressFilePath.EndsWithF(".gz", true)) // 以 gz 方式解压 using (var compressedFile = new FileStream(CompressFilePath, FileMode.Open, FileAccess.Read)) @@ -1615,7 +1614,7 @@ public static string StrFill(string Str, string Code, byte Length) { if (Str.Length > Length) return Strings.Mid(Str, 1, Length); - return Strings.Mid(Str.PadRight(Length, Conversions.ToChar(Code)), Str.Length + 1) + Str; + return Strings.Mid(Str.PadRight(Length, Code[0]), Str.Length + 1) + Str; } /// @@ -1634,8 +1633,8 @@ public static object StrTrim(string Str, bool RemoveQuote = true) { if (RemoveQuote) Str = Str.Split("(")[0].Split(":")[0].Split("(")[0].Split(":")[0]; - return Str.Trim('.', '。', '!', ' ', '!', '?', '?', Conversions.ToChar("\r"), - Conversions.ToChar("\n")); + return Str.Trim('.', '。', '!', ' ', '!', '?', '?', '\r', + '\n'); } /// @@ -1685,7 +1684,7 @@ public static ulong GetHash(string Str) /// public static string GetStringMD5(string Str) { - return Conversions.ToString(GetHexString(MD5Provider.Instance.ComputeHash(Str))); + return (string)GetHexString(MD5Provider.Instance.ComputeHash(Str)); } /// @@ -2428,7 +2427,7 @@ public static List GetFullList(IList data) if (data[i] is ICollection) GetFullListRet.AddRange((IEnumerable)data[i]); else - GetFullListRet.Add(Conversions.ToGenericParameter(data[i])); + GetFullListRet.Add((T)data[i]); return GetFullListRet; } @@ -3203,8 +3202,7 @@ public static object GetObjectFromXML(string Str) { if (Reader.Type is not null && BlackListType.IsAssignableFrom(Reader.Type.UnderlyingType)) throw new UnauthorizedAccessException($"不允许使用 {BlackListType.Name} 类型。"); - if (Reader.Value is not null && Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(Reader.Value, BlackListType.Name, false))) + if (Reader.Value is not null && Equals(Reader.Value, BlackListType.Name)) throw new UnauthorizedAccessException($"不允许使用 {BlackListType.Name} 值。"); } @@ -3682,7 +3680,7 @@ public object ConvertBack(object value, Type targetType, object parameter, Cultu if (value is null) return false; return value is Visibility - ? Operators.ConditionalCompareObjectNotEqual(value, Visibility.Visible, false) + ? (Visibility)value != Visibility.Visible : false; } } diff --git a/Plain Craft Launcher 2/Modules/Base/ModLoader.cs b/Plain Craft Launcher 2/Modules/Base/ModLoader.cs index 7b6b9c96d..e7caf818f 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModLoader.cs +++ b/Plain Craft Launcher 2/Modules/Base/ModLoader.cs @@ -1,4 +1,3 @@ -using Microsoft.VisualBasic.CompilerServices; using PCL.Core.App; using PCL.Core.Utils; using System.Collections; @@ -565,7 +564,7 @@ public override bool ShouldStart(ref object? Input, bool IsForceRestart = false, // 获取输入 try { - Input = StartGetInput(Conversions.ToGenericParameter(Input)); + Input = StartGetInput((InputType)Input); } catch (Exception ex) { @@ -600,7 +599,7 @@ public override void Start(object Input = null, bool IsForceRestart = false) // 输入不同或失败,开始加载 if (State == ModBase.LoadState.Loading) TriggerThreadAbort(); - this.Input = Conversions.ToGenericParameter(Input); + this.Input = (InputType)Input; lock (LockState) { State = ModBase.LoadState.Loading; @@ -996,7 +995,7 @@ public LoaderCombo(string Name, IEnumerable Loaders) : base(Name, Lo public override void Start(object Input = null, bool IsForceRestart = false) { - this.Input = Conversions.ToGenericParameter(Input); + this.Input = (InputType)Input; base.Start(this.Input, IsForceRestart); } } diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs index 9a1c387aa..4bfdaa61b 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs @@ -9,7 +9,6 @@ using System.Text.Json.Nodes; using System.Windows; using Microsoft.VisualBasic; -using Microsoft.VisualBasic.CompilerServices; using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.App.Localization; @@ -2544,7 +2543,7 @@ private static string McLaunchArgumentsJvmNew(ModMinecraft.McInstance instance) var Server = McLoginAuthLoader.Input.BaseUrl.Replace("/authserver", ""); try { - var Response = Conversions.ToString(ModNet.NetGetCodeByRequestRetry(Server, Encoding.UTF8)); + var Response = ModNet.NetGetCodeByRequestRetry(Server, Encoding.UTF8)?.ToString(); DataList.Insert(0, "-javaagent:\"" + Path.Combine(ModBase.PathPure, "authlib-injector.jar") + "\"=" + Server + " -Dauthlibinjector.side=client" + " -Dauthlibinjector.yggdrasil.prefetched=" + diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs index afa00dec8..2fdc54804 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs @@ -6,7 +6,6 @@ using System.Text.RegularExpressions; using FluentValidation; using Microsoft.VisualBasic; -using Microsoft.VisualBasic.CompilerServices; using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.UI; @@ -325,13 +324,13 @@ private static void CopyOverrideDirectory(string OverridesFolder, string Version if (File.Exists(OverridesIni)) { ModBase.WriteIni(OverridesIni, "VersionArgumentIndie", 1.ToString()); // 开启版本隔离 - ModBase.WriteIni(OverridesIni, "VersionArgumentIndieV2", Conversions.ToString(true)); + ModBase.WriteIni(OverridesIni, "VersionArgumentIndieV2", true.ToString()); ModBase.CopyFile(OverridesIni, VersionIni); // 覆写已有的 ini } else { ModBase.WriteIni(VersionIni, "VersionArgumentIndie", 1.ToString()); // 开启版本隔离 - ModBase.WriteIni(VersionIni, "VersionArgumentIndieV2", Conversions.ToString(true)); + ModBase.WriteIni(VersionIni, "VersionArgumentIndieV2", true.ToString()); } ModBase.IniClearCache(VersionIni); // 重置缓存,避免被安装过程中写入的 ini 覆盖 @@ -1546,8 +1545,8 @@ private static LoaderCombo InstallPackMMC(string FileAddress, ZipArchive ModBase.WriteFile(MMCSetupFile, Lines.Join("\r\n")); // 读取文件 - if (Conversions.ToBoolean(ModBase.ReadIni(MMCSetupFile, "OverrideCommands", - Conversions.ToString(false)))) + if (Convert.ToBoolean(ModBase.ReadIni(MMCSetupFile, "OverrideCommands", + false.ToString()))) { var PreLaunchCommand = ModBase.ReadIni(MMCSetupFile, "PreLaunchCommand"); if (!string.IsNullOrEmpty(PreLaunchCommand)) @@ -1562,8 +1561,8 @@ private static LoaderCombo InstallPackMMC(string FileAddress, ZipArchive } } - if (Conversions.ToBoolean(ModBase.ReadIni(MMCSetupFile, "JoinServerOnLaunch", - Conversions.ToString(false)))) + if (Convert.ToBoolean(ModBase.ReadIni(MMCSetupFile, "JoinServerOnLaunch", + false.ToString()))) { var ServerAddress = ModBase.ReadIni(MMCSetupFile, "JoinServerOnLaunchAddress") .Replace(@"\""", "\""); @@ -1571,8 +1570,8 @@ private static LoaderCombo InstallPackMMC(string FileAddress, ZipArchive ModBase.Log("[ModPack] 迁移 MultiMC 实例独立设置:自动进入服务器:" + ServerAddress); } - if (Conversions.ToBoolean(ModBase.ReadIni(MMCSetupFile, "IgnoreJavaCompatibility", - Conversions.ToString(false)))) + if (Convert.ToBoolean(ModBase.ReadIni(MMCSetupFile, "IgnoreJavaCompatibility", + false.ToString()))) { Config.Instance.IgnoreJavaCompatibility[VersionFolder] = true; ModBase.Log("[ModPack] 迁移 MultiMC 实例独立设置:忽略 Java 兼容性警告"); @@ -1592,17 +1591,17 @@ private static LoaderCombo InstallPackMMC(string FileAddress, ZipArchive var JvmArgs = ModBase.ReadIni(MMCSetupFile, "JvmArgs"); if (!string.IsNullOrEmpty(JvmArgs)) { - if (Conversions.ToBoolean(ModBase.ReadIni(MMCSetupFile, "OverrideJavaArgs", - Conversions.ToString(false)))) + if (Convert.ToBoolean(ModBase.ReadIni(MMCSetupFile, "OverrideJavaArgs", + false.ToString()))) { Config.Instance.JvmArgs[VersionFolder] = JvmArgs; ModBase.Log("[ModPack] 迁移 MultiMC 实例独立设置:JVM 参数(覆盖):" + JvmArgs); } else { - JvmArgs = Conversions.ToString(JvmArgs + - Operators.ConcatenateObject(" ", - Config.Launch.JvmArgs)); + JvmArgs = JvmArgs + + " " + + Config.Launch.JvmArgs; Config.Instance.JvmArgs[VersionFolder] = JvmArgs; ModBase.Log("[ModPack] 迁移 MultiMC 实例独立设置:JVM 参数(追加):" + JvmArgs); } diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs index 6e7143486..f4c723f54 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs @@ -7,7 +7,6 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; -using Microsoft.VisualBasic.CompilerServices; using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.Minecraft; @@ -168,7 +167,7 @@ public static void McDownloadClientCore(string Id, string JsonUrl, NetPreDownloa if (jsonUrl is null) loaders.Add(new ModLoader.LoaderTask>("获取原版 Json 文件下载地址", task => { - var jsonAddress = Conversions.ToString(ModDownload.DlClientListGet(id)); + var jsonAddress = ModDownload.DlClientListGet(id)?.ToString(); task.Output = new List { new(ModDownload.DlSourceLauncherOrMetaGet(jsonAddress), Path.Combine(instanceFolder, instanceName + ".json")) @@ -191,7 +190,7 @@ public static void McDownloadClientCore(string Id, string JsonUrl, NetPreDownloa { Thread.Sleep(50); // 等待 JSON 文件实际写入硬盘(#3710) ModBase.Log("[Download] 开始分析原版支持库文件:" + instanceFolder); - if (Conversions.ToBoolean(id == "1.16.5" && Config.Download.FixAuthLib != null)) // 1.16.5 Authlib 修复 + if (id == "1.16.5" && Config.Download.FixAuthLib != null) // 1.16.5 Authlib 修复 try { var json = ModBase.ReadFile(Path.Combine(instanceFolder, instanceName + ".json")); @@ -663,8 +662,8 @@ private static void McDownloadOptiFineInstall(string BaseMcFolderHome, string Ta // 添加 Java Wrapper 作为主 Jar string Arguments; - if (Conversions.ToBoolean(UseJavaWrapper && - !(dynamic)Config.Launch.DisableJlw)) // dynamic! + if (UseJavaWrapper && + !(dynamic)Config.Launch.DisableJlw) // dynamic! Arguments = $"-Doolloo.jlw.tmpdir=\"{ModBase.PathPure.TrimEnd('\\')}\" -Duser.home=\"{BaseMcFolderHome.TrimEnd('\\')}\" -cp \"{Target}\" -jar \"{ModLaunch.ExtractJavaWrapper()}\" optifine.Installer"; else @@ -1425,7 +1424,7 @@ public static MyListItem LiteLoaderDownloadListItem(ModDownload.DlLiteLoaderList private static void LiteLoaderSaveContMenuBuild(MyListItem sender, EventArgs e) { - if (Conversions.ToBoolean(((dynamic)sender.Tag).IsLegacy)) + if ((bool)((dynamic)sender.Tag).IsLegacy) { sender.Buttons = Array.Empty(); } @@ -1447,7 +1446,7 @@ private static void LiteLoaderContMenuBuild(MyListItem sender, EventArgs e) ToolTipService.SetVerticalOffset(BtnSave, 30d); ToolTipService.SetHorizontalOffset(BtnSave, 2d); BtnSave.Click += (sender, e) => LiteLoaderSave_Click(sender, (RoutedEventArgs)e); - if (Conversions.ToBoolean(((dynamic)sender.Tag).IsLegacy)) + if ((bool)((dynamic)sender.Tag).IsLegacy) { sender.Buttons = [BtnSave]; } @@ -1592,7 +1591,7 @@ private static void ForgelikeInjector(string Target, ModLoader.LoaderTask= 20d) + if (ForgeType == ModDownload.DlForgelikeEntry.ForgelikeType.NeoForge || Convert.ToDouble(LoaderVersion.BeforeFirst(".")) >= 20d) { ModBase.Log($"[Download] 检测为{(ForgeType == ModDownload.DlForgelikeEntry.ForgelikeType.Forge ? "新版 Forge" : " " + ForgeType)}:" + LoaderVersion); List Libs = null; @@ -1941,7 +1940,7 @@ private static void ForgelikeInjectorLine(string Content, ModLoader.LoaderTask= 20d) || + Convert.ToDouble(Request.ForgeVersion.BeforeFirst(".")) >= 20d) || Request.NeoForgeVersion is not null || Request.FabricVersion is not null || Request.QuiltVersion is not null || Request.CleanroomVersion is not null || Request.LiteLoaderEntry is not null || Request.LabyModCommitRef is not null)) diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs index 0a04c0dc5..32ca2da19 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs @@ -7,7 +7,6 @@ using System.Windows.Media; using System.Windows.Shapes; using FluentValidation; -using Microsoft.VisualBasic.CompilerServices; using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.Utils.Validate; @@ -889,7 +888,7 @@ private void ClearSelected() // 信息栏动画 private void SetPanelVisibility(Grid panel, bool visible) { - if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(panel.Tag, visible.ToString(), false))) + if (Equals(panel.Tag, visible.ToString())) return; panel.Tag = visible.ToString(); if (visible) @@ -1199,8 +1198,7 @@ private string LoadOptiFineGetError() if (LoadOptiFine is null || LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadOptiFine.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadOptiFine.State).Error.Message}"; // 是否有 Cleanroom if (SelectedCleanroom is not null) return "与 Cleanroom 不兼容"; @@ -1223,7 +1221,7 @@ private string LoadOptiFineGetError() HasAny = true; if (SelectedForge is null) return null; // 未选择 Forge - if (Conversions.ToBoolean(IsOptiFineSuitForForge(OptiFineVersion, SelectedForge))) + if ((bool)IsOptiFineSuitForForge(OptiFineVersion, SelectedForge)) return null; // 该版本可用 if (OptiFineVersion.RequiredForgeVersion is not null) HasRequiredVersion = true; @@ -1250,7 +1248,7 @@ private object IsOptiFineSuitForForge(ModDownload.DlOptiFineListEntry OptiFine, return ModMinecraft.CompareVersion(Forge.Version.ToString(), OptiFine.RequiredForgeVersion) == 0; // XXXX - return Forge.Version.Revision == Conversions.ToDouble(OptiFine.RequiredForgeVersion); + return Forge.Version.Revision == Convert.ToDouble(OptiFine.RequiredForgeVersion); } // 限制展开 @@ -1274,8 +1272,8 @@ private void OptiFine_Loaded() var Versions = new List(); foreach (var Version in ModDownload.DlOptiFineListLoader.Output.Value) { - if (Conversions.ToBoolean(SelectedForge is not null && - !(bool)IsOptiFineSuitForForge(Version, SelectedForge))) + if (SelectedForge is not null && + !(bool)IsOptiFineSuitForForge(Version, SelectedForge)) continue; if (Version.DisplayName.StartsWith(_vanillaName + " ")) Versions.Add(Version); @@ -1309,8 +1307,8 @@ private void OptiFine_Loaded() private void OptiFine_Selected(MyListItem sender, EventArgs e) { SelectedOptiFine = (ModDownload.DlOptiFineListEntry)(dynamic)sender.Tag; - if (Conversions.ToBoolean(SelectedForge is not null && - !(bool)IsOptiFineSuitForForge(SelectedOptiFine, SelectedForge))) + if (SelectedForge is not null && + !(bool)IsOptiFineSuitForForge(SelectedOptiFine, SelectedForge)) SelectedForge = null; OptiFabric_Loaded(); Forge_Loaded(); @@ -1431,8 +1429,7 @@ private string LoadForgeGetError() if (SelectedOptiFine is not null && ModMinecraft.CompareVersionGe(_vanillaName, "1.13") && ModMinecraft.CompareVersionGe("1.14.3", _vanillaName)) return "与 OptiFine 不兼容"; // 1.13 ~ 1.14.3 OptiFine 检查 - if (Conversions.ToBoolean( - SelectedOptiFine is not null && !(bool)IsOptiFineSuitForForge(SelectedOptiFine, Version))) + if (SelectedOptiFine is not null && !(bool)IsOptiFineSuitForForge(SelectedOptiFine, Version)) continue; return null; } @@ -1470,8 +1467,8 @@ private void Forge_Loaded() { if (v.Category == "universal" || v.Category == "client") return false; // 跳过无法自动安装的版本 - if (Conversions.ToBoolean(SelectedOptiFine is not null && - !(bool)IsOptiFineSuitForForge(SelectedOptiFine, v))) + if (SelectedOptiFine is not null && + !(bool)IsOptiFineSuitForForge(SelectedOptiFine, v)) return false; return true; }).OrderByDescending(v => v).ToList(); @@ -1493,8 +1490,8 @@ private void Forge_Selected(MyListItem sender, EventArgs e) SelectedForge = (ModDownload.DlForgeVersionEntry)(dynamic)sender.Tag; SelectedLoaderName = "Forge"; CardForge.IsSwapped = true; - if (Conversions.ToBoolean(SelectedOptiFine is not null && - !(bool)IsOptiFineSuitForForge(SelectedOptiFine, SelectedForge))) + if (SelectedOptiFine is not null && + !(bool)IsOptiFineSuitForForge(SelectedOptiFine, SelectedForge)) SelectedOptiFine = null; OptiFine_Loaded(); ReloadSelected(); @@ -1894,8 +1891,7 @@ private string LoadLegacyFabricGetError() if (LoadLegacyFabric is null || LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadLegacyFabric.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadLegacyFabric.State).Error.Message}"; foreach (JObject Version in ModDownload.DlLegacyFabricListLoader.Output.Value["game"]) if ((Version["version"].ToString() ?? "") == (_vanillaName ?? "")) { @@ -1998,8 +1994,7 @@ private string LoadLegacyFabricApiGetError() if (LoadLegacyFabricApi is null || LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadLegacyFabricApi.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadLegacyFabricApi.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "Legacy Fabric API")) return $"与 {SelectedAPIName} 不兼容"; if (ModDownload.DlLegacyFabricApiLoader.Output is null) @@ -2214,8 +2209,7 @@ private string LoadQSLGetError() if (LoadQSL is null || LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Run) return "正在获取版本列表……"; if (LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadQSL.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadQSL.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "QFAPI / QSL")) return $"与 {SelectedAPIName} 不兼容"; if (ModDownload.DlQSLLoader.Output is null) @@ -2457,8 +2451,7 @@ private string LoadLabyModGetError() if (LoadLabyMod is null || LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadLabyMod.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadLabyMod.State).Error.Message}"; // 检查 Loader if (GetLoaderError(LoadLabyMod) is not null) return GetLoaderError(LoadLabyMod); @@ -2577,10 +2570,8 @@ private void BtnStart_Click() { // 确认版本隔离 if (SelectedLoaderName is not null && - (Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(Config.Launch.IndieSolutionV2, 0, false)) || - Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(Config.Launch.IndieSolutionV2, 2, false)))) + (Config.Launch.IndieSolutionV2 == 0 || + Config.Launch.IndieSolutionV2 == 2)) if (ModMain.MyMsgBox( "你尚未开启版本隔离,多个 MC 实例会共用同一个 Mod 文件夹。" + "\r\n" + "因此,游戏可能会因为读取到与当前实例不符的 Mod 而崩溃。" + "\r\n" + "推荐先在 设置 → 启动选项 → 默认版本隔离 中开启版本隔离!", "版本隔离提示", "取消下载", "继续") == 1) diff --git a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs index 02ae521d5..5a76e58cd 100644 --- a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs @@ -1,11 +1,10 @@ using System.IO; using System.IO.Compression; +using System.Text.RegularExpressions; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; -using Microsoft.VisualBasic; -using Microsoft.VisualBasic.CompilerServices; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PCL.Core.App; @@ -242,7 +241,7 @@ bool IsVisible(ExportOption TargetOption) // 检查前两级 try { - if (AllEntries.Any(Entry => LikeOperator.LikeString(Entry, Rule, CompareMethod.Binary))) + if (AllEntries.Any(Entry => LikeString(Entry, Rule))) return true; } catch (Exception ex) @@ -314,18 +313,15 @@ private IEnumerable GetAllOptions(bool IncludeHidden) { foreach (var Element in PanOptions.Children) { - if (!IncludeHidden && - Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual(((UIElement)Element).Visibility, - Visibility.Visible, false))) + if (!IncludeHidden && + ((UIElement)Element).Visibility != Visibility.Visible) continue; if (Element is MyCheckBox) yield return (MyCheckBox)Element; else if (Element is StackPanel) foreach (var SubElement in ((StackPanel)Element).Children) { - if (!IncludeHidden && Conversions.ToBoolean( - Operators.ConditionalCompareObjectNotEqual(((UIElement)SubElement).Visibility, - Visibility.Visible, false))) + if (!IncludeHidden && ((UIElement)SubElement).Visibility != Visibility.Visible) continue; if (SubElement is MyCheckBox) yield return (MyCheckBox)SubElement; @@ -558,13 +554,13 @@ private void ReadConfigFile(string configPath) TextExportName.Text = Ini.GetOrDefault("Name", ""); TextExportVersion.Text = Ini.GetOrDefault("Version", ""); CheckOptionsPcl.Checked = - Convert.ToBoolean(Ini.GetOrDefault("IncludeLauncher", Conversions.ToString(true))); + Convert.ToBoolean(Ini.GetOrDefault("IncludeLauncher", true.ToString())); CheckOptionsPclCustom.Checked = - Convert.ToBoolean(Ini.GetOrDefault("IncludeLauncherCustom", Conversions.ToString(true))); + Convert.ToBoolean(Ini.GetOrDefault("IncludeLauncherCustom", true.ToString())); CheckAdvancedModrinth.Checked = - Convert.ToBoolean(Ini.GetOrDefault("ModrinthUploadMode", Conversions.ToString(false))); + Convert.ToBoolean(Ini.GetOrDefault("ModrinthUploadMode", false.ToString())); CheckAdvancedInclude.Checked = - Convert.ToBoolean(Ini.GetOrDefault("DontCheckHostedAssets", Conversions.ToString(false))); + Convert.ToBoolean(Ini.GetOrDefault("DontCheckHostedAssets", false.ToString())); ConfigPackPath = Ini.GetOrDefault("PackPath"); // === 解析导出内容段 === @@ -625,7 +621,7 @@ private void PanAllBack_DragEnter(object sender, DragEventArgs e) // 验证:仅允许单个.txt文件 if (files.Length == 1 && - files[0].EndsWithF(".txt", Conversions.ToBoolean(StringComparison.OrdinalIgnoreCase))) + files[0].EndsWithF(".txt", true)) e.Effects = DragDropEffects.Copy; // 设置拖放效果为“复制” else e.Effects = DragDropEffects.None; // 不允许拖放 @@ -784,7 +780,7 @@ private void StartExport(object sender, MouseButtonEventArgs e) foreach (var Rule in AllRules) { var Revert = Rule.StartsWith("!"); - if (LikeOperator.LikeString(RelativePath, Rule.TrimStart('!'), CompareMethod.Binary)) + if (LikeString(RelativePath, Rule.TrimStart('!'))) ShouldKeep = !Revert; } @@ -1078,4 +1074,39 @@ private void StartExport(object sender, MouseButtonEventArgs e) } #endregion + + private static bool LikeString(string input, string pattern) + { + var sb = new StringBuilder(); + sb.Append('^'); + for (var i = 0; i < pattern.Length; i++) + { + switch (pattern[i]) + { + case '*': + sb.Append(".*"); + break; + case '?': + sb.Append('.'); + break; + case '#': + sb.Append("[0-9]"); + break; + case '[': + var end = pattern.IndexOf(']', i); + if (end == -1) { sb.Append(Regex.Escape(pattern[i].ToString())); break; } + var charClass = pattern.Substring(i, end - i + 1); + if (charClass.Length > 2 && charClass[1] == '!') + charClass = "[^" + charClass.Substring(2); + sb.Append(charClass); + i = end; + break; + default: + sb.Append(Regex.Escape(pattern[i].ToString())); + break; + } + } + sb.Append('$'); + return Regex.IsMatch(input, sb.ToString(), RegexOptions.None); + } } diff --git a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs index 895aad7f5..4ebf21f2d 100644 --- a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs @@ -6,7 +6,6 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Shapes; -using Microsoft.VisualBasic.CompilerServices; using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.App.Localization; @@ -85,10 +84,8 @@ private void BtnSelectStart_Click(object sender, MouseButtonEventArgs mouseButto { // 确认版本隔离 if (SelectedLoaderName is not null && - (Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(Config.Launch.IndieSolutionV2, 0, false)) || - Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(Config.Launch.IndieSolutionV2, 2, false)))) + (Config.Launch.IndieSolutionV2 == 0 || + Config.Launch.IndieSolutionV2 == 2)) if (ModMain.MyMsgBox( "你尚未开启版本隔离,这会导致多个 MC 共用同一个 Mod 文件夹。" + "\r\n" + "因此在切换 MC 实例时,MC 会因为读取到与当前实例不符的 Mod 而崩溃。" + "\r\n" + @@ -931,7 +928,7 @@ private void ClearSelected() // 信息栏动画 private void SetPanelVisibility(Grid panel, bool visible) { - if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(panel.Tag, visible.ToString(), false))) + if (Equals(panel.Tag, visible.ToString())) return; panel.Tag = visible.ToString(); if (visible) @@ -1392,8 +1389,7 @@ private string LoadOptiFineGetError() if (LoadOptiFine is null || LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadOptiFine.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadOptiFine.State).Error.Message}"; // 是否有 Cleanroom if (SelectedCleanroom is not null) return "与 Cleanroom 不兼容"; @@ -1416,7 +1412,7 @@ private string LoadOptiFineGetError() HasAny = true; if (SelectedForge is null) return null; // 未选择 Forge - if (Conversions.ToBoolean(IsOptiFineSuitForForge(OptiFineVersion, SelectedForge))) + if ((bool)IsOptiFineSuitForForge(OptiFineVersion, SelectedForge)) return null; // 该版本可用 if (OptiFineVersion.RequiredForgeVersion is not null) HasRequiredVersion = true; @@ -1443,7 +1439,7 @@ private object IsOptiFineSuitForForge(ModDownload.DlOptiFineListEntry OptiFine, return ModMinecraft.CompareVersion(Forge.Version.ToString(), OptiFine.RequiredForgeVersion) == 0; // XXXX - return Forge.Version.Revision == Conversions.ToDouble(OptiFine.RequiredForgeVersion); + return Forge.Version.Revision == Convert.ToDouble(OptiFine.RequiredForgeVersion); } // 限制展开 @@ -1467,8 +1463,8 @@ private void OptiFine_Loaded() var Versions = new List(); foreach (var Version in ModDownload.DlOptiFineListLoader.Output.Value) { - if (Conversions.ToBoolean(SelectedForge is not null && - !(bool)IsOptiFineSuitForForge(Version, SelectedForge))) + if (SelectedForge is not null && + !(bool)IsOptiFineSuitForForge(Version, SelectedForge)) continue; if (Version.DisplayName.StartsWith(_vanillaName + " ")) Versions.Add(Version); @@ -1483,7 +1479,7 @@ private void OptiFine_Loaded() return true; if (Left.IsPreview && !Right.IsPreview) return false; - return Conversions.ToBoolean(ModMinecraft.CompareVersion(Left.DisplayName, Right.DisplayName)); + return ModMinecraft.CompareVersion(Left.DisplayName, Right.DisplayName) != 0; }); // 可视化 PanOptiFine.Children.Clear(); @@ -1502,8 +1498,8 @@ private void OptiFine_Loaded() private void OptiFine_Selected(MyListItem sender, EventArgs e) { SelectedOptiFine = (ModDownload.DlOptiFineListEntry)sender.Tag; - if (Conversions.ToBoolean(SelectedForge is not null && - !(bool)IsOptiFineSuitForForge(SelectedOptiFine, SelectedForge))) + if (SelectedForge is not null && + !(bool)IsOptiFineSuitForForge(SelectedOptiFine, SelectedForge)) SelectedForge = null; OptiFabric_Loaded(); Forge_Loaded(); @@ -1626,8 +1622,7 @@ private string LoadForgeGetError() if (SelectedOptiFine is not null && ModMinecraft.CompareVersionGe(_vanillaName, "1.13") && ModMinecraft.CompareVersionGe("1.14.3", _vanillaName)) return "与 OptiFine 不兼容"; // 1.13 ~ 1.14.3 OptiFine 检查 - if (Conversions.ToBoolean( - SelectedOptiFine is not null && !(bool)IsOptiFineSuitForForge(SelectedOptiFine, Version))) + if (SelectedOptiFine is not null && !(bool)IsOptiFineSuitForForge(SelectedOptiFine, Version)) continue; return null; } @@ -1665,8 +1660,8 @@ private void Forge_Loaded() { if (v.Category == "universal" || v.Category == "client") return false; // 跳过无法自动安装的版本 - if (Conversions.ToBoolean(SelectedOptiFine is not null && - !(bool)IsOptiFineSuitForForge(SelectedOptiFine, v))) + if (SelectedOptiFine is not null && + !(bool)IsOptiFineSuitForForge(SelectedOptiFine, v)) return false; return true; }).OrderByDescending(v => v).ToList(); @@ -1688,8 +1683,8 @@ private void Forge_Selected(MyListItem sender, EventArgs e) SelectedForge = (ModDownload.DlForgeVersionEntry)sender.Tag; SelectedLoaderName = "Forge"; CardForge.IsSwapped = true; - if (Conversions.ToBoolean(SelectedOptiFine is not null && - !(bool)IsOptiFineSuitForForge(SelectedOptiFine, SelectedForge))) + if (SelectedOptiFine is not null && + !(bool)IsOptiFineSuitForForge(SelectedOptiFine, SelectedForge)) SelectedOptiFine = null; OptiFine_Loaded(); ReloadSelected(); @@ -2125,8 +2120,7 @@ private string LoadLegacyFabricGetError() if (LoadLegacyFabric is null || LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadLegacyFabric.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadLegacyFabric.State).Error.Message}"; foreach (JObject Version in ModDownload.DlLegacyFabricListLoader.Output.Value["game"]) if ((Version["version"].ToString() ?? "") == (_vanillaName ?? "")) { @@ -2229,8 +2223,7 @@ private string LoadLegacyFabricApiGetError() if (LoadLegacyFabricApi is null || LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadLegacyFabricApi.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadLegacyFabricApi.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "Legacy Fabric API")) return $"与 {SelectedAPIName} 不兼容"; if (ModDownload.DlLegacyFabricApiLoader.Output is null) @@ -2445,8 +2438,7 @@ private string LoadQSLGetError() if (LoadQSL is null || LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Run) return "正在获取版本列表……"; if (LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadQSL.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadQSL.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "QFAPI / QSL")) return $"与 {SelectedAPIName} 不兼容"; if (ModDownload.DlQSLLoader.Output is null) @@ -2688,8 +2680,7 @@ private string LoadLabyModGetError() if (LoadLabyMod is null || LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Error) - return Conversions.ToString(Operators.ConcatenateObject("获取版本列表失败:", - ((dynamic)LoadLabyMod.State).Error.Message)); + return $"获取版本列表失败:{((dynamic)LoadLabyMod.State).Error.Message}"; // 检查 Loader if (GetLoaderError(LoadLabyMod) is not null) return GetLoaderError(LoadLabyMod); From ec2f47e395941a3b9a07c22e533c1dab95158b3e Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Sat, 23 May 2026 00:48:40 +0800 Subject: [PATCH 2/8] fix --- Plain Craft Launcher 2/Modules/Base/ModLoader.cs | 7 ++++--- .../Pages/PageDownload/ModDownloadLib.cs | 2 +- .../Pages/PageInstance/PageInstanceExport.xaml.cs | 1 + 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Plain Craft Launcher 2/Modules/Base/ModLoader.cs b/Plain Craft Launcher 2/Modules/Base/ModLoader.cs index e7caf818f..7b6b9c96d 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModLoader.cs +++ b/Plain Craft Launcher 2/Modules/Base/ModLoader.cs @@ -1,3 +1,4 @@ +using Microsoft.VisualBasic.CompilerServices; using PCL.Core.App; using PCL.Core.Utils; using System.Collections; @@ -564,7 +565,7 @@ public override bool ShouldStart(ref object? Input, bool IsForceRestart = false, // 获取输入 try { - Input = StartGetInput((InputType)Input); + Input = StartGetInput(Conversions.ToGenericParameter(Input)); } catch (Exception ex) { @@ -599,7 +600,7 @@ public override void Start(object Input = null, bool IsForceRestart = false) // 输入不同或失败,开始加载 if (State == ModBase.LoadState.Loading) TriggerThreadAbort(); - this.Input = (InputType)Input; + this.Input = Conversions.ToGenericParameter(Input); lock (LockState) { State = ModBase.LoadState.Loading; @@ -995,7 +996,7 @@ public LoaderCombo(string Name, IEnumerable Loaders) : base(Name, Lo public override void Start(object Input = null, bool IsForceRestart = false) { - this.Input = (InputType)Input; + this.Input = Conversions.ToGenericParameter(Input); base.Start(this.Input, IsForceRestart); } } diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs index f4c723f54..859a37466 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs @@ -3649,7 +3649,7 @@ public static void McInstallState(object Loader) (string)((dynamic)Loader).Input); File.Delete($"{((dynamic)Loader).Input}.pclignore"); ModBase.DeleteDirectory( - $"{((dynamic)Loader).Input}PCLInstallBackups\\")); + $"{((dynamic)Loader).Input}PCLInstallBackups\\"); } else { diff --git a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs index 5a76e58cd..cf507a1a6 100644 --- a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs @@ -1,5 +1,6 @@ using System.IO; using System.IO.Compression; +using System.Text; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Controls; From d872046ec4de2e7babf894456b005d7f34c5b12c Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Sat, 23 May 2026 01:29:43 +0800 Subject: [PATCH 3/8] fk u dynamic --- .../Pages/PageDownload/ModDownloadLib.cs | 50 +++++++++---------- .../PageDownload/PageDownloadInstall.xaml.cs | 10 ++-- .../PageInstance/PageInstanceInstall.xaml.cs | 10 ++-- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs index 859a37466..179c1991c 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs @@ -3573,24 +3573,24 @@ public class McInstallRequest /// public static void LoaderStateChangedHintOnly(object Loader) { - switch (((dynamic)Loader).State) + switch (((ModLoader.LoaderBase)Loader).State) { case var @case when (ModBase.LoadState)@case == ModBase.LoadState.Finished: { - ModMain.Hint($"{((dynamic)Loader).Name}成功!", + ModMain.Hint($"{((ModLoader.LoaderBase)Loader).Name}成功!", ModMain.HintType.Finish); break; } case var case1 when (ModBase.LoadState)case1 == ModBase.LoadState.Failed: { ModMain.Hint( - $"{((dynamic)Loader).Name}失败:{((dynamic)Loader).Error.Message}", + $"{((ModLoader.LoaderBase)Loader).Name}失败:{((ModLoader.LoaderBase)Loader).Error.Message}", ModMain.HintType.Critical); break; } case var case2 when (ModBase.LoadState)case2 == ModBase.LoadState.Aborted: { - ModMain.Hint($"{((dynamic)Loader).Name}已取消!", + ModMain.Hint($"{((ModLoader.LoaderBase)Loader).Name}已取消!", ModMain.HintType.Info); break; } @@ -3602,13 +3602,13 @@ public static void LoaderStateChangedHintOnly(object Loader) /// public static void McInstallState(object Loader) { - switch (((dynamic)Loader).State) + switch (((ModLoader.LoaderBase)Loader).State) { case var @case when (ModBase.LoadState)@case == ModBase.LoadState.Finished: { if (Config.Download.AutoSelectInstance) { - string VersionName = ((dynamic)Loader).Name.ToString(); + string VersionName = ((ModLoader.LoaderBase)Loader).Name.ToString(); ModBase.WriteIni(ModMinecraft.McFolderSelected + "PCL.ini", "Version", VersionName.Remove(VersionName.Length - 3, 3)); } @@ -3616,21 +3616,21 @@ public static void McInstallState(object Loader) ModBase.WriteIni(ModMinecraft.McFolderSelected + "PCL.ini", "InstanceCache", ""); // 清空缓存(合并安装会先生成文件夹,这会在刷新时误判为可以使用缓存) ModBase.DeleteDirectory( - $"{((dynamic)Loader).Input}PCLInstallBackups\\"); - ModMain.Hint($"{((dynamic)Loader).Name}成功!", + $"{((ModLoader.LoaderCombo)Loader).Input}PCLInstallBackups\\"); + ModMain.Hint($"{((ModLoader.LoaderBase)Loader).Name}成功!", ModMain.HintType.Finish); break; } case var case1 when (ModBase.LoadState)case1 == ModBase.LoadState.Failed: { ModMain.Hint( - $"{((dynamic)Loader).Name}失败:{((dynamic)Loader).Error.Message}", + $"{((ModLoader.LoaderBase)Loader).Name}失败:{((ModLoader.LoaderBase)Loader).Error.Message}", ModMain.HintType.Critical); break; } case var case2 when (ModBase.LoadState)case2 == ModBase.LoadState.Aborted: { - ModMain.Hint($"{((dynamic)Loader).Name}已取消!", + ModMain.Hint($"{((ModLoader.LoaderBase)Loader).Name}已取消!", ModMain.HintType.Info); break; } @@ -3640,16 +3640,16 @@ public static void McInstallState(object Loader) } } - if ((ModBase.LoadState)((dynamic)Loader).State != ModBase.LoadState.Finished && + if (((ModLoader.LoaderBase)Loader).State != ModBase.LoadState.Finished && Directory.Exists( - $"{((dynamic)Loader).Input}PCLInstallBackups\\")) // 实例修改失败回滚 + $"{((ModLoader.LoaderCombo)Loader).Input}PCLInstallBackups\\")) // 实例修改失败回滚 { ModBase.CopyDirectory( - $"{((dynamic)Loader).Input}PCLInstallBackups\\", - (string)((dynamic)Loader).Input); - File.Delete($"{((dynamic)Loader).Input}.pclignore"); + $"{((ModLoader.LoaderCombo)Loader).Input}PCLInstallBackups\\", + (string)((ModLoader.LoaderCombo)Loader).Input); + File.Delete($"{((ModLoader.LoaderCombo)Loader).Input}.pclignore"); ModBase.DeleteDirectory( - $"{((dynamic)Loader).Input}PCLInstallBackups\\"); + $"{((ModLoader.LoaderCombo)Loader).Input}PCLInstallBackups\\"); } else { @@ -3665,26 +3665,26 @@ public static void McInstallFailedClearFolder(object Loader) try { Thread.Sleep(1000); // 防止存在尚未完全释放的文件,导致清理失败(例如整合包安装) - if ((ModBase.LoadState)((dynamic)Loader).State == ModBase.LoadState.Failed || - (ModBase.LoadState)((dynamic)Loader).State == ModBase.LoadState.Aborted) + if (((ModLoader.LoaderBase)Loader).State == ModBase.LoadState.Failed || + ((ModLoader.LoaderBase)Loader).State == ModBase.LoadState.Aborted) { // 删除实例文件夹 if (Directory.Exists( - $"{((dynamic)Loader).Input}saves\\") || + $"{((ModLoader.LoaderCombo)Loader).Input}saves\\") || Directory.Exists( - $"{((dynamic)Loader).Input}versions\\") || + $"{((ModLoader.LoaderCombo)Loader).Input}versions\\") || Directory.Exists( - $"{((dynamic)Loader).Input}mods\\") || - File.Exists($"{((dynamic)Loader).Input}server.dat")) + $"{((ModLoader.LoaderCombo)Loader).Input}mods\\") || + File.Exists($"{((ModLoader.LoaderCombo)Loader).Input}server.dat")) { ModBase.Log( - $"[Download] 由于实例已被独立启动,不清理实例文件夹:{((dynamic)Loader).Input}", ModBase.LogLevel.Developer); + $"[Download] 由于实例已被独立启动,不清理实例文件夹:{((ModLoader.LoaderCombo)Loader).Input}", ModBase.LogLevel.Developer); } else { ModBase.Log( - $"[Download] 由于下载失败或取消,清理实例文件夹:{((dynamic)Loader).Input}", ModBase.LogLevel.Developer); - ModBase.DeleteDirectory((string)((dynamic)Loader).Input); + $"[Download] 由于下载失败或取消,清理实例文件夹:{((ModLoader.LoaderCombo)Loader).Input}", ModBase.LogLevel.Developer); + ModBase.DeleteDirectory((string)((ModLoader.LoaderCombo)Loader).Input); } } } diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs index 32ca2da19..703dc47dd 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs @@ -1198,7 +1198,7 @@ private string LoadOptiFineGetError() if (LoadOptiFine is null || LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadOptiFine.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadOptiFine.State).Error.Message}"; // 是否有 Cleanroom if (SelectedCleanroom is not null) return "与 Cleanroom 不兼容"; @@ -1891,7 +1891,7 @@ private string LoadLegacyFabricGetError() if (LoadLegacyFabric is null || LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadLegacyFabric.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadLegacyFabric.State).Error.Message}"; foreach (JObject Version in ModDownload.DlLegacyFabricListLoader.Output.Value["game"]) if ((Version["version"].ToString() ?? "") == (_vanillaName ?? "")) { @@ -1994,7 +1994,7 @@ private string LoadLegacyFabricApiGetError() if (LoadLegacyFabricApi is null || LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadLegacyFabricApi.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadLegacyFabricApi.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "Legacy Fabric API")) return $"与 {SelectedAPIName} 不兼容"; if (ModDownload.DlLegacyFabricApiLoader.Output is null) @@ -2209,7 +2209,7 @@ private string LoadQSLGetError() if (LoadQSL is null || LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Run) return "正在获取版本列表……"; if (LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadQSL.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadQSL.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "QFAPI / QSL")) return $"与 {SelectedAPIName} 不兼容"; if (ModDownload.DlQSLLoader.Output is null) @@ -2451,7 +2451,7 @@ private string LoadLabyModGetError() if (LoadLabyMod is null || LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadLabyMod.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadLabyMod.State).Error.Message}"; // 检查 Loader if (GetLoaderError(LoadLabyMod) is not null) return GetLoaderError(LoadLabyMod); diff --git a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs index 4ebf21f2d..c9459414e 100644 --- a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs @@ -1389,7 +1389,7 @@ private string LoadOptiFineGetError() if (LoadOptiFine is null || LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadOptiFine.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadOptiFine.State).Error.Message}"; // 是否有 Cleanroom if (SelectedCleanroom is not null) return "与 Cleanroom 不兼容"; @@ -2120,7 +2120,7 @@ private string LoadLegacyFabricGetError() if (LoadLegacyFabric is null || LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadLegacyFabric.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadLegacyFabric.State).Error.Message}"; foreach (JObject Version in ModDownload.DlLegacyFabricListLoader.Output.Value["game"]) if ((Version["version"].ToString() ?? "") == (_vanillaName ?? "")) { @@ -2223,7 +2223,7 @@ private string LoadLegacyFabricApiGetError() if (LoadLegacyFabricApi is null || LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadLegacyFabricApi.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadLegacyFabricApi.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "Legacy Fabric API")) return $"与 {SelectedAPIName} 不兼容"; if (ModDownload.DlLegacyFabricApiLoader.Output is null) @@ -2438,7 +2438,7 @@ private string LoadQSLGetError() if (LoadQSL is null || LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Run) return "正在获取版本列表……"; if (LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadQSL.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadQSL.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "QFAPI / QSL")) return $"与 {SelectedAPIName} 不兼容"; if (ModDownload.DlQSLLoader.Output is null) @@ -2680,7 +2680,7 @@ private string LoadLabyModGetError() if (LoadLabyMod is null || LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Run) return "加载中……"; if (LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"获取版本列表失败:{((dynamic)LoadLabyMod.State).Error.Message}"; + return $"获取版本列表失败:{((ModLoader.LoaderBase)LoadLabyMod.State).Error.Message}"; // 检查 Loader if (GetLoaderError(LoadLabyMod) is not null) return GetLoaderError(LoadLabyMod); From a1a4469105ebc4973a4b80a7e92201dff7a45b0c Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Sat, 23 May 2026 01:37:45 +0800 Subject: [PATCH 4/8] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=20LoaderStat?= =?UTF-8?q?eChangedHintOnly=20=E5=92=8C=20McInstallState=20=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E4=B8=AD=E7=9A=84=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pages/PageDownload/ModDownloadLib.cs | 63 ++++++++----------- 1 file changed, 27 insertions(+), 36 deletions(-) diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs index 179c1991c..350bf105e 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs @@ -3573,27 +3573,18 @@ public class McInstallRequest /// public static void LoaderStateChangedHintOnly(object Loader) { - switch (((ModLoader.LoaderBase)Loader).State) + var loader = (ModLoader.LoaderBase)Loader; + switch (loader.State) { - case var @case when (ModBase.LoadState)@case == ModBase.LoadState.Finished: - { - ModMain.Hint($"{((ModLoader.LoaderBase)Loader).Name}成功!", - ModMain.HintType.Finish); + case ModBase.LoadState.Finished: + ModMain.Hint($"{loader.Name}成功!", ModMain.HintType.Finish); break; - } - case var case1 when (ModBase.LoadState)case1 == ModBase.LoadState.Failed: - { - ModMain.Hint( - $"{((ModLoader.LoaderBase)Loader).Name}失败:{((ModLoader.LoaderBase)Loader).Error.Message}", - ModMain.HintType.Critical); + case ModBase.LoadState.Failed: + ModMain.Hint($"{loader.Name}失败:{loader.Error.Message}", ModMain.HintType.Critical); break; - } - case var case2 when (ModBase.LoadState)case2 == ModBase.LoadState.Aborted: - { - ModMain.Hint($"{((ModLoader.LoaderBase)Loader).Name}已取消!", - ModMain.HintType.Info); + case ModBase.LoadState.Aborted: + ModMain.Hint($"{loader.Name}已取消!"); break; - } } } @@ -3602,54 +3593,54 @@ public static void LoaderStateChangedHintOnly(object Loader) /// public static void McInstallState(object Loader) { - switch (((ModLoader.LoaderBase)Loader).State) + var loader = (ModLoader.LoaderBase)Loader; + var combo = (ModLoader.LoaderCombo)Loader; + switch (loader.State) { - case var @case when (ModBase.LoadState)@case == ModBase.LoadState.Finished: + case ModBase.LoadState.Finished: { if (Config.Download.AutoSelectInstance) { - string VersionName = ((ModLoader.LoaderBase)Loader).Name.ToString(); + var versionName = loader.Name; ModBase.WriteIni(ModMinecraft.McFolderSelected + "PCL.ini", "Version", - VersionName.Remove(VersionName.Length - 3, 3)); + versionName.Remove(versionName.Length - 3, 3)); } ModBase.WriteIni(ModMinecraft.McFolderSelected + "PCL.ini", "InstanceCache", ""); // 清空缓存(合并安装会先生成文件夹,这会在刷新时误判为可以使用缓存) - ModBase.DeleteDirectory( - $"{((ModLoader.LoaderCombo)Loader).Input}PCLInstallBackups\\"); - ModMain.Hint($"{((ModLoader.LoaderBase)Loader).Name}成功!", + ModBase.DeleteDirectory($"{combo.Input}PCLInstallBackups\\"); + ModMain.Hint($"{loader.Name}成功!", ModMain.HintType.Finish); break; } - case var case1 when (ModBase.LoadState)case1 == ModBase.LoadState.Failed: + case ModBase.LoadState.Failed: { ModMain.Hint( - $"{((ModLoader.LoaderBase)Loader).Name}失败:{((ModLoader.LoaderBase)Loader).Error.Message}", + $"{loader.Name}失败:{loader.Error.Message}", ModMain.HintType.Critical); break; } - case var case2 when (ModBase.LoadState)case2 == ModBase.LoadState.Aborted: + case ModBase.LoadState.Aborted: { - ModMain.Hint($"{((ModLoader.LoaderBase)Loader).Name}已取消!", - ModMain.HintType.Info); + ModMain.Hint($"{loader.Name}已取消!"); break; } - case var case3 when (ModBase.LoadState)case3 == ModBase.LoadState.Loading: + case ModBase.LoadState.Loading: { return; // 不重新加载实例列表 } } - if (((ModLoader.LoaderBase)Loader).State != ModBase.LoadState.Finished && + if (loader.State != ModBase.LoadState.Finished && Directory.Exists( - $"{((ModLoader.LoaderCombo)Loader).Input}PCLInstallBackups\\")) // 实例修改失败回滚 + $"{combo.Input}PCLInstallBackups\\")) // 实例修改失败回滚 { ModBase.CopyDirectory( - $"{((ModLoader.LoaderCombo)Loader).Input}PCLInstallBackups\\", - (string)((ModLoader.LoaderCombo)Loader).Input); - File.Delete($"{((ModLoader.LoaderCombo)Loader).Input}.pclignore"); + $"{combo.Input}PCLInstallBackups\\", + (string)combo.Input); + File.Delete($"{combo.Input}.pclignore"); ModBase.DeleteDirectory( - $"{((ModLoader.LoaderCombo)Loader).Input}PCLInstallBackups\\"); + $"{combo.Input}PCLInstallBackups\\"); } else { From a7e382400c638f9a2e1eecf2b0fd306bed73dcf5 Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Sat, 23 May 2026 16:10:53 +0800 Subject: [PATCH 5/8] using DotNet.Globbing --- .../PageInstance/PageInstanceExport.xaml.cs | 37 ++----------------- .../Plain Craft Launcher 2.csproj | 1 + 2 files changed, 5 insertions(+), 33 deletions(-) diff --git a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs index cf507a1a6..561f57541 100644 --- a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs @@ -1,11 +1,10 @@ using System.IO; using System.IO.Compression; -using System.Text; -using System.Text.RegularExpressions; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; +using DotNet.Globbing; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PCL.Core.App; @@ -1078,36 +1077,8 @@ private void StartExport(object sender, MouseButtonEventArgs e) private static bool LikeString(string input, string pattern) { - var sb = new StringBuilder(); - sb.Append('^'); - for (var i = 0; i < pattern.Length; i++) - { - switch (pattern[i]) - { - case '*': - sb.Append(".*"); - break; - case '?': - sb.Append('.'); - break; - case '#': - sb.Append("[0-9]"); - break; - case '[': - var end = pattern.IndexOf(']', i); - if (end == -1) { sb.Append(Regex.Escape(pattern[i].ToString())); break; } - var charClass = pattern.Substring(i, end - i + 1); - if (charClass.Length > 2 && charClass[1] == '!') - charClass = "[^" + charClass.Substring(2); - sb.Append(charClass); - i = end; - break; - default: - sb.Append(Regex.Escape(pattern[i].ToString())); - break; - } - } - sb.Append('$'); - return Regex.IsMatch(input, sb.ToString(), RegexOptions.None); + var options = new GlobOptions { Evaluation = { CaseInsensitive = true } }; + var glob = Glob.Parse(pattern, options); + return glob.IsMatch(input); } } diff --git a/Plain Craft Launcher 2/Plain Craft Launcher 2.csproj b/Plain Craft Launcher 2/Plain Craft Launcher 2.csproj index 3b75e7987..9b793bbbc 100644 --- a/Plain Craft Launcher 2/Plain Craft Launcher 2.csproj +++ b/Plain Craft Launcher 2/Plain Craft Launcher 2.csproj @@ -67,6 +67,7 @@ + From d1cec4ae260786c0f7b18afc6a43d5601158e54d Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Sat, 23 May 2026 16:32:12 +0800 Subject: [PATCH 6/8] fix: update pattern handling in LikeString to support numeric wildcard --- .../Pages/PageInstance/PageInstanceExport.xaml.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs index 561f57541..9ef843530 100644 --- a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs @@ -1077,6 +1077,7 @@ private void StartExport(object sender, MouseButtonEventArgs e) private static bool LikeString(string input, string pattern) { + pattern = pattern.Replace("#", "[0-9]"); var options = new GlobOptions { Evaluation = { CaseInsensitive = true } }; var glob = Glob.Parse(pattern, options); return glob.IsMatch(input); From eec32faa3aad8309e2f7b4762d2d946ecac71234 Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Sun, 24 May 2026 13:18:36 +0800 Subject: [PATCH 7/8] refactor: remove unused Newtonsoft.Json references across multiple files --- Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs | 2 -- Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs | 3 --- Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs | 3 --- .../Pages/PageDownload/PageDownloadInstall.xaml.cs | 2 -- .../Pages/PageInstance/PageInstanceExport.xaml.cs | 2 -- .../Pages/PageInstance/PageInstanceInstall.xaml.cs | 1 - 6 files changed, 13 deletions(-) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs index 882d696b0..512270159 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs @@ -9,7 +9,6 @@ using System.Text.Json.Nodes; using System.Windows; using Microsoft.VisualBasic; -using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.App.Localization; using PCL.Core.Minecraft; @@ -19,7 +18,6 @@ using PCL.Core.Utils.Secret; using PCL.Network; using PCL.Core.IO.Net.Http; -using PCL; using PCL.Core.Minecraft.IdentityModel.Yggdrasil; using System.Globalization; diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs index 62a7b1ac7..3ea979038 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs @@ -4,9 +4,6 @@ using System.IO.Compression; using System.Text; using System.Text.RegularExpressions; -using FluentValidation; -using Microsoft.VisualBasic; -using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.UI; using PCL.Core.Utils.Validate; diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs index 9076faaf3..c582bb168 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs @@ -2,12 +2,10 @@ using System.Globalization; using System.IO; using System.IO.Compression; -using System.Net.Http; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; -using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.Minecraft; using PCL.Core.UI; @@ -15,7 +13,6 @@ using PCL.Network; using PCL.Network.Loaders; using PCL.Core.IO.Net.Http; -using PCL; using PCL.Core.App.Localization; namespace PCL; diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs index 90c6727b5..ff28511bd 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs @@ -6,8 +6,6 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Shapes; -using FluentValidation; -using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.Utils.Validate; using PCL.Core.App.Localization; diff --git a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs index 64b37c474..e9eda7a36 100644 --- a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceExport.xaml.cs @@ -5,8 +5,6 @@ using System.Windows.Documents; using System.Windows.Input; using DotNet.Globbing; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.UI; using PCL.Core.App.Localization; diff --git a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs index 35d43ef30..ce2f1f773 100644 --- a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceInstall.xaml.cs @@ -6,7 +6,6 @@ using System.Windows.Input; using System.Windows.Media; using System.Windows.Shapes; -using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.App.Localization; using PCL.Core.UI; From 9e7c8348fddb6859a85f3c86514cec76af8a6711 Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Sun, 24 May 2026 14:38:17 +0800 Subject: [PATCH 8/8] =?UTF-8?q?chore:=20remove=20=EF=BC=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pages/PageDownload/ModDownloadLib.cs | 4 ++-- .../Pages/PageDownload/PageDownloadInstall.xaml.cs | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs index 4ea233a13..afbae8b99 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.cs @@ -3720,7 +3720,7 @@ public static void LoaderStateChangedHintOnly(object Loader) ModMain.Hint($"{loader.Name}{Lang.Text("Common.Status.Success")}", ModMain.HintType.Finish); break; case ModBase.LoadState.Failed: - ModMain.Hint($"{loader.Name}{Lang.Text("Common.Status.Failure")}:{loader.Error.Message}", ModMain.HintType.Critical); + ModMain.Hint($"{loader.Name}{Lang.Text("Common.Status.Failure")}{loader.Error.Message}", ModMain.HintType.Critical); break; case ModBase.LoadState.Aborted: ModMain.Hint($"{loader.Name}{Lang.Text("Common.Status.Cancelled")}"); @@ -3756,7 +3756,7 @@ public static void McInstallState(object Loader) case ModBase.LoadState.Failed: { ModMain.Hint( - $"{loader.Name}{Lang.Text("Common.Status.Failure")}:{loader.Error.Message}", + $"{loader.Name}{Lang.Text("Common.Status.Failure")}{loader.Error.Message}", ModMain.HintType.Critical); break; } diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs index e0b57d3f5..125c7b4a3 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.cs @@ -1160,7 +1160,7 @@ private string LoadOptiFineGetError() if (LoadOptiFine is null || LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Run) return Lang.Text("Download.Install.State.Loading"); if (LoadOptiFine.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}:{((ModLoader.LoaderBase)LoadOptiFine.State).Error.Message}"; + return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}{((ModLoader.LoaderBase)LoadOptiFine.State).Error.Message}"; // 是否有 Cleanroom if (SelectedCleanroom is not null) return Lang.Text("Download.Install.Compat.IncompatibleWithCleanroom"); @@ -1853,7 +1853,7 @@ private string LoadLegacyFabricGetError() if (LoadLegacyFabric is null || LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Run) return Lang.Text("Download.Install.State.Loading"); if (LoadLegacyFabric.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}:{((ModLoader.LoaderBase)LoadLegacyFabric.State).Error.Message}"; + return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}{((ModLoader.LoaderBase)LoadLegacyFabric.State).Error.Message}"; foreach (JsonObject Version in ModDownload.DlLegacyFabricListLoader.Output.Value["game"].AsArray()) if ((Version["version"].ToString() ?? "") == (_vanillaName ?? "")) { @@ -1956,7 +1956,7 @@ private string LoadLegacyFabricApiGetError() if (LoadLegacyFabricApi is null || LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Run) return Lang.Text("Download.Install.State.Loading"); if (LoadLegacyFabricApi.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}:{((ModLoader.LoaderBase)LoadLegacyFabricApi.State).Error.Message}"; + return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}{((ModLoader.LoaderBase)LoadLegacyFabricApi.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "Legacy Fabric API")) return Lang.Text("Download.Install.Compat.IncompatibleWithLoader", SelectedAPIName); if (ModDownload.DlLegacyFabricApiLoader.Output is null) @@ -2171,7 +2171,7 @@ private string LoadQSLGetError() if (LoadQSL is null || LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Run) return Lang.Text("Download.Install.LoadingVersionList"); if (LoadQSL.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}:{((ModLoader.LoaderBase)LoadQSL.State).Error.Message}"; + return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}{((ModLoader.LoaderBase)LoadQSL.State).Error.Message}"; if (SelectedAPIName is not null && !ReferenceEquals(SelectedAPIName, "QFAPI / QSL")) return Lang.Text("Download.Install.Compat.IncompatibleWithLoader", SelectedAPIName); if (ModDownload.DlQSLLoader.Output is null) @@ -2413,7 +2413,7 @@ private string LoadLabyModGetError() if (LoadLabyMod is null || LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Run) return Lang.Text("Download.Install.State.Loading"); if (LoadLabyMod.State.LoadingState == MyLoading.MyLoadingState.Error) - return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}:{((ModLoader.LoaderBase)LoadLabyMod.State).Error.Message}"; + return $"{Lang.Text("Download.Install.State.GetVersionListFailed")}{((ModLoader.LoaderBase)LoadLabyMod.State).Error.Message}"; // 检查 Loader if (GetLoaderError(LoadLabyMod) is not null) return GetLoaderError(LoadLabyMod);