diff --git a/Plain Craft Launcher 2/Application.xaml.cs b/Plain Craft Launcher 2/Application.xaml.cs index 3d9d10035..c72dee976 100644 --- a/Plain Craft Launcher 2/Application.xaml.cs +++ b/Plain Craft Launcher 2/Application.xaml.cs @@ -102,14 +102,14 @@ private void Application_Startup() // (sender As Object, e As StartupEventArgs) Lang.Text("Application.EnvironmentWarning.IKnow"), IsWarn: true); // 设置初始化 - ModBase.Setup.Load("SystemDebugMode"); - ModBase.Setup.Load("SystemDebugAnim"); - ModBase.Setup.Load("SystemHttpProxy"); - ModBase.Setup.Load("SystemHttpProxyCustomUsername"); - ModBase.Setup.Load("SystemHttpProxyType"); - ModBase.Setup.Load("ToolDownloadThread"); - ModBase.Setup.Load("ToolDownloadSpeed"); - ModBase.Setup.Load("UiFont"); + _ = Config.Debug.Enabled; + _ = Config.Debug.AnimationSpeed; + _ = Config.Network.HttpProxy.CustomAddress; + _ = Config.Network.HttpProxy.CustomUsername; + _ = Config.Network.HttpProxy.Type; + _ = Config.Download.ThreadLimit; + _ = Config.Download.SpeedLimit; + _ = Config.Preference.Font; var updateBranchCfg = Config.Update.UpdateChannelConfig; if (updateBranchCfg.IsDefault()) updateBranchCfg.SetValue(ModBase.VersionBaseName.Contains("beta") diff --git a/Plain Craft Launcher 2/Controls/MyHint.xaml.cs b/Plain Craft Launcher 2/Controls/MyHint.xaml.cs index fccf18002..676516049 100644 --- a/Plain Craft Launcher 2/Controls/MyHint.xaml.cs +++ b/Plain Craft Launcher 2/Controls/MyHint.xaml.cs @@ -2,8 +2,8 @@ using System.Windows.Documents; using System.Windows.Input; using System.Windows.Markup; - using PCL.Core.App; +using PCL.Core.App.Configuration; using PCL.Core.UI.Theme; using System.Windows.Controls; @@ -135,13 +135,14 @@ private void UpdateUI() private void MyHint_Loaded(object sender, RoutedEventArgs e) { ThemeService.ColorModeChanged += (v, theme) => _ThemeChanged(v, theme); - if (CanClose && ModBase.Setup.Get(RelativeSetup) != null) + if (CanClose && ConfigService.TryGetConfigItemNoType(RelativeSetup, out var item) && item.GetValueNoType() != null) Visibility = Visibility.Collapsed; } private void BtnClose_Click(object sender, EventArgs e) { - ModBase.Setup.Set(RelativeSetup, true); + if (ConfigService.TryGetConfigItemNoType(RelativeSetup, out var item)) + item.SetValueNoType(true); ModAnimation.AniDispose(this, false); } diff --git a/Plain Craft Launcher 2/FormMain.xaml.cs b/Plain Craft Launcher 2/FormMain.xaml.cs index 02791518c..4de0f6ed7 100644 --- a/Plain Craft Launcher 2/FormMain.xaml.cs +++ b/Plain Craft Launcher 2/FormMain.xaml.cs @@ -86,18 +86,13 @@ public FormMain() // 触发降级 DowngradeSub(LastVersion); // 版本隔离设置迁移 - if (ModBase.Setup.IsUnset("LaunchArgumentIndieV2")) + if (Config.Launch.IndieSolutionV2Config.IsDefault()) { - if (!ModBase.Setup.IsUnset("LaunchArgumentIndie")) + if (!Config.Launch.IndieSolutionV1Config.IsDefault()) { ModBase.Log("[Start] 从老 PCL 迁移版本隔离"); Config.Launch.IndieSolutionV2 = Config.Launch.IndieSolutionV1; } - else if (!ModBase.Setup.IsUnset("WindowHeight")) - { - ModBase.Log("[Start] 从老 PCL 升级,但此前未调整版本隔离,使用老的版本隔离默认值"); - Config.Launch.IndieSolutionV2Config.Reset(Config.Launch.IndieSolutionV1Config.DefaultValue); - } else { ModBase.Log("[Start] 全新的 PCL,使用新的版本隔离默认值"); @@ -105,7 +100,7 @@ public FormMain() } } - ModBase.Setup.Load("UiLauncherTheme"); + _ = Config.Preference.Theme.ThemeSelected; // 注册拖拽事件(不能直接加 Handles,否则没用;#6340) AddHandler(DragDrop.DragEnterEvent, new DragEventHandler(HandleDrag), true); AddHandler(DragDrop.DragOverEvent, new DragEventHandler(HandleDrag), true); @@ -169,11 +164,14 @@ private void FormMain_Loaded() // (sender As Object, e As RoutedEventArgs) Handl ModBase.ApplicationStartTick = TimeUtils.GetTimeTick(); ModBase.FrmHandle = new WindowInteropHelper(this).Handle; // 读取设置 - ModBase.Setup.Load("UiBackgroundOpacity"); - ModBase.Setup.Load("UiBackgroundBlur"); - ModBase.Setup.Load("UiLogoType"); - ModBase.Setup.Load("UiHiddenPageDownload"); - ModBase.Setup.Load("UiAutoPauseVideo"); // 智能暂停视频背景 + _ = Config.Preference.Background.WallpaperOpacity; + _ = Config.Preference.Background.WallpaperBlurRadius; + _ = Config.Preference.WindowTitleType; + _ = Config.Preference.Hide.PageDownload; + _ = Config.Preference.Background.AutoPauseVideo; // 智能暂停视频背景 + ModSetup.UiLogoType((int)Config.Preference.WindowTitleType); + ModSetup.UiLogoText(Config.Preference.WindowTitleCustomText); + ModSetup.UiLogoLeft(Config.Preference.TopBarLeftAlign); PageSetupUI.HiddenRefresh(); PageSetupUI.BackgroundRefresh(false, true); ModMusic.MusicRefreshPlay(false, true); @@ -375,7 +373,7 @@ private void UpgradeSub(int LastVersionCode) // 迁移旧版用户档案 if (LastVersionCode <= 368) ModBase.RunInNewThread(() => ModProfile.MigrateOldProfile()); // Mod 命名设置迁移 - if (!ModBase.Setup.IsUnset("ToolDownloadTranslate") && ModBase.Setup.IsUnset("ToolDownloadTranslateV2")) + if (!Config.Download.Comp.NameFormatV1Config.IsDefault() && Config.Download.Comp.NameFormatV2Config.IsDefault()) { Config.Download.Comp.NameFormatV2 += 1; ModBase.Log("[Start] 已从老版本迁移 Mod 命名设置"); diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.cs b/Plain Craft Launcher 2/Modules/Base/ModBase.cs index 9a3de4f68..e81c2d6c6 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModBase.cs +++ b/Plain Craft Launcher 2/Modules/Base/ModBase.cs @@ -69,7 +69,7 @@ public static class ModBase /// /// 程序可执行文件所在目录,以“\”结尾。 /// - public static readonly string ExePath = Conversions.ToString(Basics.ExecutableDirectory.EndsWith(@"\") + public static readonly string ExePath = (Basics.ExecutableDirectory.EndsWith(@"\") ? Basics.ExecutableDirectory : Basics.ExecutableDirectory + @"\"); diff --git a/Plain Craft Launcher 2/Modules/Base/ModSetup.cs b/Plain Craft Launcher 2/Modules/Base/ModSetup.cs index 0c9984994..4abc25583 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModSetup.cs +++ b/Plain Craft Launcher 2/Modules/Base/ModSetup.cs @@ -76,78 +76,6 @@ private static ConfigItem GetConfigItem(string key) return result ? item! : throw new KeyNotFoundException($"配置项 '{key}' 不存在"); } - /// - /// 改变某个设置项的值。 - /// - public void Set(string key, object value, bool forceReload = false, ModMinecraft.McInstance? instance = null) - { - GetConfigItem(key).SetValueNoType(value, instance?.PathInstance); - } - - /// - /// 应用某个设置项的值。 - /// - public object Load(string key, bool forceReload = false, ModMinecraft.McInstance? instance = null) - { - var value = Get(key, instance); - InvokeEventMethod(key, () => value); - return value; - } - - /// - /// 写入某个未经加密的设置项。 - /// 若该设置项经过了加密,则会抛出异常。 - /// - public void SetSafe(string key, object value, bool forceReload = false, ModMinecraft.McInstance instance = null) - { - if (!ConfigService.TryGetConfigItemNoType(key, out ConfigItem item)) return; - if (item.Source == ConfigSource.SharedEncrypt) throw new InvalidOperationException("禁止写入加密设置项:" + key); - Set(key, value, forceReload, instance); - } - - /// - /// 获取某个未经加密的设置项的值。 - /// 若该设置项经过了加密,则会抛出异常。 - /// - public object GetSafe(string key, ModMinecraft.McInstance instance = null) - { - if (!ConfigService.TryGetConfigItemNoType(key, out ConfigItem item)) return null; - if (item.Source == ConfigSource.SharedEncrypt) throw new InvalidOperationException("禁止读取加密设置项:" + key); - return Get(key, instance); - } - - /// - /// 获取某个设置项的值。 - /// - public object Get(string key, ModMinecraft.McInstance? instance = null) - { - return GetConfigItem(key).GetValueNoType(instance?.PathInstance); - } - - /// - /// 初始化某个设置项的值。 - /// - public void Reset(string key, bool forceReload = false, ModMinecraft.McInstance? instance = null) - { - GetConfigItem(key).Reset(instance?.PathInstance); - } - - /// - /// 获取某个设置项的默认值。 - /// - public object GetDefault(string key) - { - return GetConfigItem(key).DefaultValueNoType; - } - - /// - /// 某个设置项是否从未被设置过。 - /// - public bool IsUnset(string key, ModMinecraft.McInstance? instance = null) - { - return GetConfigItem(key).IsDefault(instance?.PathInstance); - } - #endregion #region Launch @@ -368,7 +296,7 @@ public void UiFont(string value) } // 主页 - public void UiCustomType(int Value) + public static void UiCustomType(int Value) { if (ModMain.FrmSetupUI is null) return; @@ -448,7 +376,7 @@ public void UiBlurType(int Value) } // 顶部栏 - public void UiLogoType(int Value) + public static void UiLogoType(int Value) { if (ThemeService.CurrentTheme == ColorTheme.HmclBlue) Value = 4; switch (Value) @@ -505,7 +433,7 @@ public void UiLogoType(int Value) ModMain.FrmSetupUI.PanLogoChange.Visibility = Visibility.Collapsed; } - ModBase.Setup.Load("UiLogoText", true); + _ = Config.Preference.WindowTitleCustomText; break; } case 3: // 图片 @@ -551,17 +479,17 @@ public void UiLogoType(int Value) break; } - ModBase.Setup.Load("UiLogoLeft", true); + _ = Config.Preference.TopBarLeftAlign; if (ModMain.FrmSetupUI != null) ModMain.FrmSetupUI.CardLogo.TriggerForceResize(); } - public void UiLogoText(string Value) + public static void UiLogoText(string Value) { ModMain.FrmMain.LabTitleLogo.Text = Value; } - public void UiLogoLeft(bool Value) + public static void UiLogoLeft(bool Value) { ModMain.FrmMain.PanTitleMain.ColumnDefinitions[0].Width = new GridLength( Value && Config.Preference.WindowTitleType == LauncherTitleType.None ? 0 : 1, diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.cs index ecf5cca61..d9908e9df 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.cs @@ -4,7 +4,6 @@ using System.Net.Http; using System.Text; using Microsoft.VisualBasic; -using Microsoft.VisualBasic.CompilerServices; using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.Utils; @@ -82,7 +81,7 @@ public static DownloadFile DlClientAssetIndexGet(ModMinecraft.McInstance Version #region 下载支持库文件 - if (Conversions.ToBoolean(ModMinecraft.ShouldIgnoreFileCheck(Version))) + if (ModMinecraft.ShouldIgnoreFileCheck(Version)) { ModBase.Log("[Download] 已跳过所有 Libraries 检查"); } @@ -103,7 +102,7 @@ public static DownloadFile DlClientAssetIndexGet(ModMinecraft.McInstance Version #region 下载资源文件 - if (Conversions.ToBoolean(ModMinecraft.ShouldIgnoreFileCheck(Version))) + if (ModMinecraft.ShouldIgnoreFileCheck(Version)) { ModBase.Log("[Download] 已跳过所有 Assets 检查"); } @@ -277,7 +276,7 @@ private static void DlClientListMain(ModLoader.LoaderTask, int>> @@ -285,7 +284,7 @@ private static void DlClientListMain(ModLoader.LoaderTask, int>> @@ -372,12 +371,10 @@ private static void DlClientListMojangMain(ModLoader.LoaderTask, int>> @@ -604,7 +599,7 @@ private static void DlOptiFineListMain(ModLoader.LoaderTask, int>> @@ -763,7 +758,7 @@ private static void DlForgeListMain(ModLoader.LoaderTask { switch (Config.Download.VersionListSource) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 0, false): + case 0: { DlSourceLoader(Loader, new List, int>> @@ -771,7 +766,7 @@ private static void DlForgeListMain(ModLoader.LoaderTask Loader.IsForceRestarting); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 1, false): + case 1: { DlSourceLoader(Loader, new List, int>> @@ -799,12 +794,12 @@ private static void DlForgeListMain(ModLoader.LoaderTask private static void DlForgeListOfficialMain(ModLoader.LoaderTask Loader) { - var Result = Conversions.ToString(Requester.FetchJson( + var Result = Requester.FetchJson( "https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.2.4.html", new RequestParam { Encoding = Encoding.Default, UseBrowserUserAgent = true - })); + })?.ToString() ?? ""; if (Result.Length < 200) throw new Exception("获取到的版本列表长度不足(" + Result + ")"); // 获取所有版本信息 @@ -824,11 +819,11 @@ private static void DlForgeListOfficialMain(ModLoader.LoaderTask Loader) { var Result = - Conversions.ToString(Requester.FetchJson("https://bmclapi2.bangbang93.com/forge/minecraft", + Requester.FetchJson("https://bmclapi2.bangbang93.com/forge/minecraft", new RequestParam { Encoding = Encoding.Default, - })); + })?.ToString() ?? ""; if (Result.Length < 200) throw new Exception("获取到的版本列表长度不足(" + Result + ")"); // 获取所有版本信息 @@ -955,7 +950,7 @@ public DlForgeVersionEntry(string Version, string Branch, string Inherit) // 司马版本的特殊处理 if (Version == "11.15.1.2318" || Version == "11.15.1.1902" || Version == "11.15.1.1890") Branch = "1.8.9"; - if (Branch is null && Inherit == "1.7.10" && Conversions.ToDouble(Version.Split(".")[3]) >= 1300d) + if (Branch is null && Inherit == "1.7.10" && double.Parse(Version.Split(".")[3]) >= 1300d) Branch = "1.7.10"; // 为 DlForgelikeEntry 提供所有信息 ForgeType = ForgelikeType.Forge; @@ -979,7 +974,7 @@ public static void DlForgeVersionMain(ModLoader.LoaderTask>, int>> @@ -987,7 +982,7 @@ public static void DlForgeVersionMain(ModLoader.LoaderTask>, int>> @@ -1015,12 +1010,12 @@ public static void DlForgeVersionOfficialMain(ModLoader.LoaderTask, int>> @@ -1293,7 +1288,7 @@ private static void DlNeoForgeListMain(ModLoader.LoaderTask, int>> @@ -1465,14 +1460,14 @@ private static void DlCleanroomListMain(ModLoader.LoaderTask, int>> { new(DlCleanroomListOfficialLoader, 30) }, Loader.IsForceRestarting); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 1, false): + case 1: { DlSourceLoader(Loader, new List, int>> @@ -1610,7 +1605,7 @@ private static void DlLiteLoaderListMain(ModLoader.LoaderTask, int>> @@ -1619,7 +1614,7 @@ private static void DlLiteLoaderListMain(ModLoader.LoaderTask, int>> @@ -1664,7 +1659,7 @@ private static void DlLiteLoaderListOfficialMain(ModLoader.LoaderTask, int>> @@ -1765,7 +1760,7 @@ private static void DlFabricListMain(ModLoader.LoaderTask, int>> @@ -1873,7 +1868,7 @@ private static void DlQuiltListMain(ModLoader.LoaderTask { switch (Config.Download.VersionListSource) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 0, false): + case 0: { DlSourceLoader(Loader, new List, int>> @@ -1881,7 +1876,7 @@ private static void DlQuiltListMain(ModLoader.LoaderTask Loader.IsForceRestarting); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 1, false): + case 1: { DlSourceLoader(Loader, new List, int>> @@ -1966,7 +1961,7 @@ private static void DlLabyModListMain(ModLoader.LoaderTask, int>> @@ -1974,7 +1969,7 @@ private static void DlLabyModListMain(ModLoader.LoaderTask, int>> @@ -2063,14 +2058,14 @@ public static T DlModRequest(string url) if ((McimUrl ?? "") != (url ?? "")) switch (Config.Download.Comp.CompSourceSolution) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 0, false): + case 0: { Urls.Add(new KeyValuePair(McimUrl, 5)); Urls.Add(new KeyValuePair(McimUrl, 10)); Urls.Add(new KeyValuePair(url, 15)); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 1, false): + case 1: { Urls.Add(new KeyValuePair(url, 5)); Urls.Add(new KeyValuePair(McimUrl, 5)); @@ -2129,14 +2124,14 @@ public static T DlModRequest(string url, string method, string data, string c if ((McimUrl ?? "") != (url ?? "")) switch (allowMirror ? Config.Download.Comp.CompSourceSolution : 2) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 0, false): + case 0: { Urls.Add(new KeyValuePair(McimUrl, 5)); Urls.Add(new KeyValuePair(McimUrl, 10)); Urls.Add(new KeyValuePair(url, 15)); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 1, false): + case 1: { Urls.Add(new KeyValuePair(url, 5)); Urls.Add(new KeyValuePair(McimUrl, 5)); @@ -2185,9 +2180,9 @@ public static T DlModRequest(string url, string method, string data, string c /// /// 下载文件(而非获取版本列表)的时候,是否优先使用官方源。 /// - public static bool DlSourcePreferMojang => Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(Config.Download.FileSource, 2, false) || - (Operators.ConditionalCompareObjectEqual(Config.Download.FileSource, 1, false) && DlPreferMojang)); + public static bool DlSourcePreferMojang => + Config.Download.FileSource == 2 || + (Config.Download.FileSource == 1 && DlPreferMojang); /// /// 下载文件(而非获取版本列表)的时候,根据是否优先使用官方源决定使用 Url 的顺序。 @@ -2200,10 +2195,9 @@ public static IEnumerable DlSourceOrder(IEnumerable OfficialUrls /// /// 获取版本列表(而非下载文件)的时候,是否优先使用官方源。 /// - public static bool DlVersionListPreferMojang => Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(Config.Download.VersionListSource, 2, false) || - (Operators.ConditionalCompareObjectEqual(Config.Download.VersionListSource, 1, false) && - DlPreferMojang)); + public static bool DlVersionListPreferMojang => + Config.Download.VersionListSource == 2 || + (Config.Download.VersionListSource == 1 && DlPreferMojang); /// /// 获取版本列表(而非下载文件)的时候,根据是否优先使用官方源决定使用 Url 的顺序。 @@ -2314,19 +2308,19 @@ public static List DlSourceModDownloadGet(string original) // like https://edge.forgecdn.net/files/6767/951/jei-1.21.5-neoforge-21.4.0.27.jar switch (Config.Download.Comp.CompSourceSolution) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 0, false): // 镜像源 + case 0: // 镜像源 { res.Add(mirrorDl); res.Add(mirrorDl); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 1, false): // 平衡 + case 1: // 平衡 { res.Add(original); res.Add(mirrorDl); break; } - case var case2 when Operators.ConditionalCompareObjectEqual(case2, 2, false): // 官方源 + case 2: // 官方源 { res.Add(original); res.Add(original); // 错误 @@ -2335,7 +2329,7 @@ public static List DlSourceModDownloadGet(string original) default: { - ModBase.Setup.Reset("ToolDownloadMod"); + Config.Download.Comp.CompSourceSolution = 1; res.Add(original); break; } @@ -2472,14 +2466,14 @@ private static void DlLegacyFabricListMain(ModLoader.LoaderTask, int>> { new(DlLegacyFabricListOfficialLoader, 30) }, Loader.IsForceRestarting); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 1, false): + case 1: { DlSourceLoader(Loader, new List, int>> diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModJava.cs index 0e12f991b..61402b941 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModJava.cs @@ -290,7 +290,7 @@ public static bool IsGameSet64BitJava(ModMinecraft.McInstance RelatedVersion = n { ModBase.Log(ex, "检查 Java 类别时出错", ModBase.LogLevel.Feedback); if (RelatedVersion is not null) - ModBase.Setup.Reset("VersionArgumentJavaSelect", instance: RelatedVersion); + Config.Instance.SelectedJava[RelatedVersion.PathInstance] = "使用全局设置"; Config.Launch.SelectedJava = ""; } diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs index ff9e7c66b..85ee37e6f 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.cs @@ -33,7 +33,7 @@ public static class ModLaunch private static void McLaunchPrecheck() { - if (Conversions.ToBoolean(Config.Debug.AddRandomDelay)) + if (Config.Debug.AddRandomDelay) Thread.Sleep(RandomUtils.NextInt(100, 2000)); // 检查路径 if (ModMinecraft.McInstanceSelected.PathIndie.Contains("!") || @@ -42,8 +42,8 @@ private static void McLaunchPrecheck() if (ModMinecraft.McInstanceSelected.PathInstance.Contains("!") || ModMinecraft.McInstanceSelected.PathInstance.Contains(";")) throw new Exception(Lang.Text("Minecraft.Launch.Precheck.InvalidPathChars", ModMinecraft.McInstanceSelected.PathInstance)); - if (Conversions.ToBoolean(ModBase.IsUtf8CodePage() && !(bool)States.Hint.NonAsciiGamePath && - !ModMinecraft.McInstanceSelected.PathInstance.IsASCII())) + if (ModBase.IsUtf8CodePage() && !States.Hint.NonAsciiGamePath && + !ModMinecraft.McInstanceSelected.PathInstance.IsASCII()) { var userChoice = ModMain.MyMsgBox( Lang.Text("Minecraft.Launch.Precheck.NonAsciiPath.Message", ModMinecraft.McInstanceSelected.Name), @@ -60,40 +60,31 @@ private static void McLaunchPrecheck() throw new Exception(Lang.Text("Minecraft.Launch.Precheck.InstanceError", ModMinecraft.McInstanceSelected.Desc)); // 检查输入信息 var CheckResult = ""; - ModBase.RunInUiWait(() => CheckResult = Conversions.ToString(ModProfile.IsProfileValid())); + ModBase.RunInUiWait(() => CheckResult = ModProfile.IsProfileValid()); if (ModProfile.SelectedProfile is null) // 没选档案 { CheckResult = Lang.Text("Minecraft.Launch.Precheck.NoProfile"); } - else if (ModMinecraft.McInstanceSelected.Info.HasLabyMod || Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual( - ModBase.Setup.Get("VersionServerLoginRequire", ModMinecraft.McInstanceSelected), 1, - false))) // 要求正版验证 + else if (ModMinecraft.McInstanceSelected.Info.HasLabyMod || + Config.InstanceAuth.LoginRequirementSolution[ModMinecraft.McInstanceSelected?.PathInstance] == 1) // 要求正版验证 { if (!(ModProfile.SelectedProfile.Type == McLoginType.Ms)) CheckResult = Lang.Text("Minecraft.Launch.Precheck.RequireMicrosoft"); } - else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual( - ModBase.Setup.Get("VersionServerLoginRequire", ModMinecraft.McInstanceSelected), 2, - false))) // 要求第三方验证 + else if (Config.InstanceAuth.LoginRequirementSolution[ModMinecraft.McInstanceSelected?.PathInstance] == 2) // 要求第三方验证 { if (!(ModProfile.SelectedProfile.Type == McLoginType.Auth)) CheckResult = Lang.Text("Minecraft.Launch.Precheck.RequireThirdParty"); - else if (Conversions.ToBoolean(!Operators.ConditionalCompareObjectEqual( - ModProfile.SelectedProfile.Server.BeforeLast("/authserver"), - ModBase.Setup.Get("VersionServerAuthServer", ModMinecraft.McInstanceSelected), false))) + else if (ModProfile.SelectedProfile.Server.BeforeLast("/authserver") != + Config.InstanceAuth.AuthServerAddress[ModMinecraft.McInstanceSelected?.PathInstance]) CheckResult = Lang.Text("Minecraft.Launch.Precheck.AuthServerMismatch"); } - else if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual( - ModBase.Setup.Get("VersionServerLoginRequire", ModMinecraft.McInstanceSelected), 3, - false))) // 要求正版验证或第三方验证 + else if (Config.InstanceAuth.LoginRequirementSolution[ModMinecraft.McInstanceSelected?.PathInstance] == 3) // 要求正版验证或第三方验证 { if (ModProfile.SelectedProfile.Type == McLoginType.Legacy) CheckResult = Lang.Text("Minecraft.Launch.Precheck.RequireMicrosoftOrThirdParty"); - else if (Conversions.ToBoolean(ModProfile.SelectedProfile.Type == McLoginType.Auth && - !Operators.ConditionalCompareObjectEqual( - ModProfile.SelectedProfile.Server.BeforeLast("/authserver"), - ModBase.Setup.Get("VersionServerAuthServer", - ModMinecraft.McInstanceSelected), false))) + else if (ModProfile.SelectedProfile.Type == McLoginType.Auth && + ModProfile.SelectedProfile.Server.BeforeLast("/authserver") != + Config.InstanceAuth.AuthServerAddress[ModMinecraft.McInstanceSelected?.PathInstance]) CheckResult = Lang.Text("Minecraft.Launch.Precheck.AuthServerMismatch"); } @@ -626,7 +617,7 @@ private static void McLoginStart(ModLoader.LoaderTask task) internal static void SecretLaunchJvmArgs(ref List DataList) { - var DataJvmCustom = - Conversions.ToString(ModBase.Setup.Get("VersionAdvanceJvm", ModMinecraft.McInstanceSelected)); + var DataJvmCustom = Config.Instance.JvmArgs[ModMinecraft.McInstanceSelected?.PathInstance]; DataList.Insert(0, - Conversions.ToString(string.IsNullOrEmpty(DataJvmCustom) + string.IsNullOrEmpty(DataJvmCustom) ? Config.Launch.JvmArgs - : DataJvmCustom)); // 可变 JVM 参数 + : DataJvmCustom); // 可变 JVM 参数 switch (Config.Launch.PreferredIpStack) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 0, false): + case JvmPreferredIpStack.PreferV4: { DataList.Add("-Djava.net.preferIPv4Stack=true"); DataList.Add("-Djava.net.preferIPv4Addresses=true"); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 2, false): + case JvmPreferredIpStack.PreferV6: { DataList.Add("-Djava.net.preferIPv6Stack=true"); DataList.Add("-Djava.net.preferIPv6Addresses=true"); @@ -2240,10 +2230,10 @@ private static void WriteLinkD(string Path) /// private static bool McLaunchNeedsRetroWrapper(ModMinecraft.McInstance Mc) { - return Conversions.ToBoolean((Mc.ReleaseTime >= new DateTime(2013, 6, 25) && Mc.Info.Drop == 99) || - (Mc.Info.Drop < 60 && Mc.Info.Drop != 99 && - !(bool)Config.Launch.DisableRw && - !(bool)ModBase.Setup.Get("VersionAdvanceDisableRW", Mc))); // <1.6 + return (Mc.ReleaseTime >= new DateTime(2013, 6, 25) && Mc.Info.Drop == 99) || + (Mc.Info.Drop < 60 && Mc.Info.Drop != 99 && + !Config.Launch.DisableRw && + !Config.Instance.DisableRw[Mc.PathInstance]); // <1.6 } /// @@ -2339,17 +2329,14 @@ private static void McLaunchArgumentMain(ModLoader.LoaderTask new DateTime(2023, 4, 4)) @@ -2413,9 +2400,9 @@ private static string McLaunchArgumentsJvmOld(ModMinecraft.McInstance instance) // 输出固定参数 DataList.Add("-XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump"); - var ArgumentJvm = Conversions.ToString(ModBase.Setup.Get("VersionAdvanceJvm", ModMinecraft.McInstanceSelected)); + var ArgumentJvm = Config.Instance.JvmArgs[ModMinecraft.McInstanceSelected?.PathInstance]; if (string.IsNullOrEmpty(ArgumentJvm)) - ArgumentJvm = Conversions.ToString(Config.Launch.JvmArgs); + ArgumentJvm = Config.Launch.JvmArgs; if (!ArgumentJvm.Contains("-Dlog4j2.formatMsgNoLookups=true")) ArgumentJvm += " -Dlog4j2.formatMsgNoLookups=true"; ArgumentJvm = ArgumentJvm.Replace(" -XX:MaxDirectMemorySize=256M", ""); // #3511 的清理 @@ -2465,13 +2452,11 @@ private static string McLaunchArgumentsJvmOld(ModMinecraft.McInstance instance) // 渲染器 var Renderer = 0; - if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual( - ModBase.Setup.Get("VersionAdvanceRenderer", ModMinecraft.McInstanceSelected), 0, false))) - Renderer = Conversions.ToInteger( - Operators.SubtractObject(ModBase.Setup.Get("VersionAdvanceRenderer", ModMinecraft.McInstanceSelected), - 1)); + var instanceRenderer = Config.Instance.Renderer[ModMinecraft.McInstanceSelected?.PathInstance]; + if (instanceRenderer != 0) + Renderer = instanceRenderer - 1; else - Renderer = Conversions.ToInteger(Config.Launch.Renderer); + Renderer = Config.Launch.Renderer; var MesaLoaderWindowsVersion = "25.3.5"; var MesaLoaderWindowsTargetFile = Path.Combine(ModBase.PathPure, "mesa-loader-windows", MesaLoaderWindowsVersion, "Loader.jar"); @@ -2486,7 +2471,7 @@ private static string McLaunchArgumentsJvmOld(ModMinecraft.McInstance instance) !string.IsNullOrWhiteSpace(Config.Network.HttpProxy.CustomAddress)) try { - var ProxyAddress = new Uri(Conversions.ToString(Config.Network.HttpProxy.CustomAddress)); + var ProxyAddress = new Uri(Config.Network.HttpProxy.CustomAddress); DataList.Add( $"-D{(ProxyAddress.Scheme.StartsWithF("https:") ? "https" : "http")}.proxyHost={ProxyAddress.AbsoluteUri}"); DataList.Add( @@ -2498,9 +2483,8 @@ private static string McLaunchArgumentsJvmOld(ModMinecraft.McInstance instance) } // 添加 Java Wrapper 作为主 Jar - if (Conversions.ToBoolean(ModBase.IsUtf8CodePage() && !(bool)Config.Launch.DisableJlw && - !(bool)ModBase.Setup.Get("VersionAdvanceDisableJLW", - ModMinecraft.McInstanceSelected))) + if (ModBase.IsUtf8CodePage() && !Config.Launch.DisableJlw && + !Config.Instance.DisableJlw[ModMinecraft.McInstanceSelected?.PathInstance]) { if (McLaunchJavaSelected.Installation.MajorVersion >= 9) DataList.Add("--add-exports cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED"); @@ -2590,13 +2574,11 @@ private static string McLaunchArgumentsJvmNew(ModMinecraft.McInstance instance) // 渲染器 var Renderer = 0; - if (Conversions.ToBoolean(Operators.ConditionalCompareObjectNotEqual( - ModBase.Setup.Get("VersionAdvanceRenderer", ModMinecraft.McInstanceSelected), 0, false))) - Renderer = Conversions.ToInteger( - Operators.SubtractObject(ModBase.Setup.Get("VersionAdvanceRenderer", ModMinecraft.McInstanceSelected), - 1)); + var instanceRenderer = Config.Instance.Renderer[ModMinecraft.McInstanceSelected?.PathInstance]; + if (instanceRenderer != 0) + Renderer = instanceRenderer - 1; else - Renderer = Conversions.ToInteger(Config.Launch.Renderer); + Renderer = Config.Launch.Renderer; var MesaLoaderWindowsVersion = "25.3.5"; var MesaLoaderWindowsTargetFile = Path.Combine(ModBase.PathPure, "mesa-loader-windows", MesaLoaderWindowsVersion, "Loader.jar"); @@ -2611,7 +2593,7 @@ private static string McLaunchArgumentsJvmNew(ModMinecraft.McInstance instance) !string.IsNullOrWhiteSpace(Config.Network.HttpProxy.CustomAddress)) try { - var ProxyAddress = new Uri(Conversions.ToString(Config.Network.HttpProxy.CustomAddress)); + var ProxyAddress = new Uri(Config.Network.HttpProxy.CustomAddress); DataList.Add( $"-D{(ProxyAddress.Scheme.StartsWithF("https:") ? "https" : "http")}.proxyHost={ProxyAddress.AbsoluteUri}"); DataList.Add( @@ -2627,9 +2609,8 @@ private static string McLaunchArgumentsJvmNew(ModMinecraft.McInstance instance) // https://github.com/NeRdTheNed/RetroWrapper/wiki/RetroWrapper-flags DataList.Add("-Dretrowrapper.doUpdateCheck=false"); // 添加 Java Wrapper 作为主 Jar - if (Conversions.ToBoolean(ModBase.IsUtf8CodePage() && !(bool)Config.Launch.DisableJlw && - !(bool)ModBase.Setup.Get("VersionAdvanceDisableJLW", - ModMinecraft.McInstanceSelected))) + if (ModBase.IsUtf8CodePage() && !Config.Launch.DisableJlw && + !Config.Instance.DisableJlw[ModMinecraft.McInstanceSelected?.PathInstance]) { if (McLaunchJavaSelected.Installation.MajorVersion >= 9) DataList.Add("--add-exports cpw.mods.bootstraplauncher/cpw.mods.bootstraplauncher=ALL-UNNAMED"); @@ -2825,12 +2806,11 @@ private static Dictionary McLaunchArgumentsReplace(ModMinecraft. GameArguments.Add("${launcher_name}", "PCLCE"); GameArguments.Add("${launcher_version}", ModBase.VersionCode.ToString()); GameArguments.Add("${version_name}", instance.Name); - var ArgumentInfo = - Conversions.ToString(ModBase.Setup.Get("VersionArgumentInfo", ModMinecraft.McInstanceSelected)); + var ArgumentInfo = Config.Instance.TypeInfo[ModMinecraft.McInstanceSelected?.PathInstance]; GameArguments.Add("${version_type}", - Conversions.ToString(string.IsNullOrEmpty(ArgumentInfo) + string.IsNullOrEmpty(ArgumentInfo) ? Config.Launch.TypeInfo - : ArgumentInfo)); + : ArgumentInfo); GameArguments.Add("${game_directory}", ModBase.ShortenPath(Strings.Left(ModMinecraft.McInstanceSelected.PathIndie, ModMinecraft.McInstanceSelected.PathIndie.Count() - 1))); @@ -2847,7 +2827,7 @@ private static Dictionary McLaunchArgumentsReplace(ModMinecraft. Size GameSize; switch (Config.Launch.GameWindowMode) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 2, false): // 与启动器尺寸一致 + case GameWindowSizeMode.Launcher: // 与启动器尺寸一致 { Size Result; ModBase.RunInUiWait(() => Result = new Size(ModBase.GetPixelSize(ModMain.FrmMain.PanForm.ActualWidth), @@ -2856,7 +2836,7 @@ private static Dictionary McLaunchArgumentsReplace(ModMinecraft. GameSize.Height -= 29.5d * ModBase.DPI / 96d; // 标题栏高度 break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 3, false): // 自定义 + case GameWindowSizeMode.Custom: // 自定义 { GameSize = new Size(Math.Max(100, (double)Config.Launch.GameWindowWidth), Math.Max(100, (double)Config.Launch.GameWindowHeight)); @@ -3237,12 +3217,12 @@ private static void McLaunchPrerun() // 窗口 switch (Config.Launch.GameWindowMode) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 0, false): // 全屏 + case GameWindowSizeMode.Fullscreen: // 全屏 { ModBase.WriteIni(SetupFileAddress, "fullscreen", "true"); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 1, false): // 默认 + case GameWindowSizeMode.Default: // 默认 // 其他 { break; @@ -3308,11 +3288,10 @@ or LocalizationFontProfile.Japanese private static void McLaunchCustom(ModLoader.LoaderTask Loader) { // 获取自定义命令 - var CustomCommandGlobal = Conversions.ToString(Config.Launch.PreLaunchCommand); + var CustomCommandGlobal = Config.Launch.PreLaunchCommand; if (!string.IsNullOrEmpty(CustomCommandGlobal)) CustomCommandGlobal = ArgumentReplace(CustomCommandGlobal, true); - var CustomCommandVersion = - Conversions.ToString(ModBase.Setup.Get("VersionAdvanceRun", ModMinecraft.McInstanceSelected)); + var CustomCommandVersion = Config.Instance.PreLaunchCommand[ModMinecraft.McInstanceSelected?.PathInstance]; if (!string.IsNullOrEmpty(CustomCommandVersion)) CustomCommandVersion = ArgumentReplace(CustomCommandVersion, true); @@ -3359,7 +3338,7 @@ private static void McLaunchCustom(ModLoader.LoaderTask Loader) CustomProcess.StartInfo.UseShellExecute = false; CustomProcess.StartInfo.CreateNoWindow = true; CustomProcess.Start(); - if (Conversions.ToBoolean(Config.Launch.PreLaunchCommandWait)) + if (Config.Launch.PreLaunchCommandWait) while (!CustomProcess.HasExited && !Loader.IsAborted) Thread.Sleep(10); } @@ -3389,7 +3368,7 @@ private static void McLaunchCustom(ModLoader.LoaderTask Loader) CustomProcess.StartInfo.UseShellExecute = false; CustomProcess.StartInfo.CreateNoWindow = true; CustomProcess.Start(); - if (Conversions.ToBoolean(ModBase.Setup.Get("VersionAdvanceRunWait", ModMinecraft.McInstanceSelected))) + if (Config.Instance.PreLaunchCommandWait[ModMinecraft.McInstanceSelected?.PathInstance]) while (!CustomProcess.HasExited && !Loader.IsAborted) Thread.Sleep(10); } @@ -3410,8 +3389,8 @@ private static void McLaunchCustom(ModLoader.LoaderTask Loader) private static void McLaunchRun(ModLoader.LoaderTask Loader) { - var noJavaw = Conversions.ToBoolean((bool)Config.Launch.NoJavaw && - McLaunchJavaSelected.Installation.JavawExePath is not null); + var noJavaw = Config.Launch.NoJavaw && + McLaunchJavaSelected.Installation.JavawExePath is not null; // 启动信息 var GameProcess = new Process(); @@ -3452,12 +3431,12 @@ private static void McLaunchRun(ModLoader.LoaderTask Loader) GameProcess.PriorityBoostEnabled = true; switch (Config.Launch.ProcessPriority) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 0, false): // 高 + case GameProcessPriority.AboveNormal: // 高 { GameProcess.PriorityClass = ProcessPriorityClass.AboveNormal; break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 2, false): // 低 + case GameProcessPriority.BelowNormal: // 低 { GameProcess.PriorityClass = ProcessPriorityClass.BelowNormal; // 中 break; @@ -3505,10 +3484,10 @@ private static void McLaunchWait(ModLoader.LoaderTask Loader) McLaunchLog(""); // 获取窗口标题 - var WindowTitle = (string?)ModBase.Setup.Get("VersionArgumentTitle", ModMinecraft.McInstanceSelected); + var WindowTitle = Config.Instance.Title[ModMinecraft.McInstanceSelected?.PathInstance]; if (string.IsNullOrEmpty(WindowTitle) && - !(bool)ModBase.Setup.Get("VersionArgumentTitleEmpty", ModMinecraft.McInstanceSelected)) - WindowTitle = Conversions.ToString(Config.Launch.Title); + !Config.Instance.UseGlobalTitle[ModMinecraft.McInstanceSelected?.PathInstance]) + WindowTitle = Config.Launch.Title; WindowTitle = ArgumentReplace(WindowTitle, false); // JStack 路径 @@ -3546,12 +3525,12 @@ private static void McLaunchEnd() McLaunchLog("开始启动结束处理"); // 暂停或开始音乐播放 - if (Conversions.ToBoolean(Config.Preference.Music.StopInGame)) + if (Config.Preference.Music.StopInGame) ModBase.RunInUi(() => { if (ModMusic.MusicPause()) ModBase.Log("[Music] 已根据设置,在启动后暂停音乐播放"); }); - else if (Conversions.ToBoolean(Config.Preference.Music.StartInGame)) + else if (Config.Preference.Music.StartInGame) ModBase.RunInUi(() => { if (ModMusic.MusicResume()) ModBase.Log("[Music] 已根据设置,在启动后开始音乐播放"); @@ -3561,32 +3540,32 @@ private static void McLaunchEnd() ModVideoBack.VideoPause(); // 启动器可见性 McLaunchLog( - Conversions.ToString(Operators.ConcatenateObject("启动器可见性:", Config.Launch.LauncherVisibility))); + "启动器可见性:" + Config.Launch.LauncherVisibility); switch (Config.Launch.LauncherVisibility) { - case var @case when Operators.ConditionalCompareObjectEqual(@case, 0, false): + case LauncherVisibility.ExitImmediately: { // 直接关闭 McLaunchLog("已根据设置,在启动后关闭启动器"); ModBase.RunInUi(() => ModMain.FrmMain.EndProgram(false)); break; } - case var case1 when Operators.ConditionalCompareObjectEqual(case1, 2, false): - case var case2 when Operators.ConditionalCompareObjectEqual(case2, 3, false): + case LauncherVisibility.HideAndExit: + case LauncherVisibility.HideAndReopen: { // 隐藏 McLaunchLog("已根据设置,在启动后隐藏启动器"); ModBase.RunInUi(() => ModMain.FrmMain.Hidden = true); break; } - case var case3 when Operators.ConditionalCompareObjectEqual(case3, 4, false): + case LauncherVisibility.MinimizeAndReopen: { // 最小化 McLaunchLog("已根据设置,在启动后最小化启动器"); ModBase.RunInUi(() => ModMain.FrmMain.WindowState = WindowState.Minimized); break; } - case var case4 when Operators.ConditionalCompareObjectEqual(case4, 5, false): + case LauncherVisibility.DoNothing: { break; } @@ -3596,9 +3575,8 @@ private static void McLaunchEnd() // 启动计数 States.System.LaunchCount += 1; - ModBase.Setup.Set("VersionLaunchCount", - Operators.AddObject(ModBase.Setup.Get("VersionLaunchCount", ModMinecraft.McInstanceSelected), 1), - instance: ModMinecraft.McInstanceSelected); + States.Instance.LaunchCount[ModMinecraft.McInstanceSelected.PathInstance] = + States.Instance.LaunchCount[ModMinecraft.McInstanceSelected.PathInstance] + 1; } /// diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.cs index 174f2e02e..3ff50743e 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.cs @@ -7,7 +7,6 @@ using System.Text.Json.Nodes; using System.Text.RegularExpressions; using Microsoft.VisualBasic; -using Microsoft.VisualBasic.CompilerServices; using Newtonsoft.Json.Linq; using PCL.Core.App; using PCL.Core.UI; @@ -99,16 +98,16 @@ public static int CompareVersion(string left, string right) // 两边均缺失,感觉是一个东西 if (lefts.Count - 1 < i && rights.Count - 1 < i) { - if (Operators.CompareString(left, right, false) > 0) + if (string.CompareOrdinal(left, right) > 0) return 1; - if (Operators.CompareString(left, right, false) < 0) + if (string.CompareOrdinal(left, right) < 0) return -1; return 0; } // 确定两边的数值 - var leftValue = Conversions.ToString(lefts.Count - 1 < i ? 0 : lefts[i]); - var rightValue = Conversions.ToString(rights.Count - 1 < i ? 0 : rights[i]); + var leftValue = lefts.Count - 1 < i ? "0" : lefts[i]; + var rightValue = rights.Count - 1 < i ? "0" : rights[i]; if ((leftValue ?? "") == (rightValue ?? "")) goto NextEntry; if (leftValue == "rc") @@ -132,9 +131,9 @@ public static int CompareVersion(string left, string right) if (leftValValue == 0d && rightValValue == 0d) { // 如果没有数值则直接比较字符串 - if (Operators.CompareString(leftValue, rightValue, false) > 0) return 1; + if (string.CompareOrdinal(leftValue, rightValue) > 0) return 1; - if (Operators.CompareString(leftValue, rightValue, false) < 0) return -1; + if (string.CompareOrdinal(leftValue, rightValue) < 0) return -1; } // 如果有数值则比较数值 // 这会使得一边是数字一边是字母时数字方更大 @@ -360,7 +359,7 @@ private static void McFolderListLoadSub() } foreach (var Folder in cacheMcFolderList) McFolderLauncherProfilesJsonCreate(Folder.Location); - if (Conversions.ToBoolean(Config.Debug.AddRandomDelay)) + if (Config.Debug.AddRandomDelay) Thread.Sleep(RandomUtils.NextInt(200, 2000)); // 回设 @@ -910,8 +909,7 @@ public JObject JsonObject inheritInstanceName = _jsonObject["inheritsFrom"] is null ? "" : _jsonObject["inheritsFrom"].ToString(); - if (Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(inheritInstanceName, Name, false))) + if (Equals(inheritInstanceName, Name)) { ModBase.Log("[Minecraft] 自引用的继承实例:" + Name, ModBase.LogLevel.Debug); inheritInstanceName = ""; @@ -920,16 +918,13 @@ public JObject JsonObject Recheck: ; - if (Conversions.ToBoolean( - Operators.ConditionalCompareObjectNotEqual(inheritInstanceName, "", false))) + if (!Equals(inheritInstanceName, "")) { - var inheritInstance = new McInstance(Conversions.ToString(inheritInstanceName)); + var inheritInstance = new McInstance(inheritInstanceName?.ToString() ?? ""); // 继续循环 - if (Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(inheritInstance.InheritInstanceName, - inheritInstanceName, false))) - throw new Exception(Conversions.ToString( - Operators.ConcatenateObject("版本依赖项出现嵌套:", inheritInstanceName))); + if (Equals(inheritInstance.InheritInstanceName, + inheritInstanceName)) + throw new Exception("版本依赖项出现嵌套:" + inheritInstanceName); inheritInstanceName = inheritInstance.InheritInstanceName; // 合并 inheritInstance.JsonObject.Merge(_jsonObject); @@ -1312,7 +1307,7 @@ public McInstance Load() // 确定实例收藏状态 IsStar = States.Instance.Starred[PathInstance]; // 确定实例显示种类 - DisplayType = (McInstanceCardType)Conversions.ToInteger(States.Instance.CardType[PathInstance]); + DisplayType = (McInstanceCardType)States.Instance.CardType[PathInstance]; // 写入缓存 if (Directory.Exists(PathInstance)) { @@ -1970,14 +1965,14 @@ private static Dictionary> InitMcInstanceLi var results = new Dictionary>(); try { - var cardCount = Conversions.ToInteger(ModBase.ReadIni(path + "PCL.ini", "CardCount", (-1).ToString())); + var cardCount = int.Parse(ModBase.ReadIni(path + "PCL.ini", "CardCount", (-1).ToString())); if (cardCount == -1) return null; for (int i = 0, loopTo = cardCount - 1; i <= loopTo; i++) { var cardType = - (McInstanceCardType)Conversions.ToInteger(ModBase.ReadIni(path + "PCL.ini", "CardKey" + (i + 1), - ":")); + (McInstanceCardType)int.Parse(ModBase.ReadIni(path + "PCL.ini", "CardKey" + (i + 1), + "0")); var instanceList = new List(); // 循环读取实例 @@ -2016,10 +2011,10 @@ private static Dictionary> InitMcInstanceLi instance.ReleaseTime = DateTime.Parse(instanceCfg.ReleaseTime[instance.PathInstance]); if (!instanceCfg.StateConfig.IsDefault(instance.PathInstance)) instance.State = - (McInstanceState)Conversions.ToInteger(instanceCfg.State[instance.PathInstance]); + (McInstanceState)(int)instanceCfg.State[instance.PathInstance]; instance.IsStar = instanceCfg.Starred[instance.PathInstance]; instance.DisplayType = - (McInstanceCardType)Conversions.ToInteger(instanceCfg.CardType[instance.PathInstance]); + (McInstanceCardType)(int)instanceCfg.CardType[instance.PathInstance]; if (instance.State != McInstanceState.Error && !instanceCfg.VanillaVersionNameConfig.IsDefault(instance.PathInstance) && !instanceCfg.VanillaVersionConfig @@ -2298,9 +2293,9 @@ private static Dictionary> InitMcInstanceLi McInstanceCardType.Rubbish, McInstanceCardType.Fool, McInstanceCardType.Error, McInstanceCardType.Hidden }) - if (results.ContainsKey((McInstanceCardType)Conversions.ToInteger(sortRule))) - sortedInstanceList.Add((McInstanceCardType)Conversions.ToInteger(sortRule), - results[(McInstanceCardType)Conversions.ToInteger(sortRule)]); + if (results.ContainsKey(sortRule)) + sortedInstanceList.Add(sortRule, + results[sortRule]); results = sortedInstanceList; // 版本排序 @@ -2352,7 +2347,7 @@ int getComponentCode(McInstance instance) if (getComponentCode(left) != getComponentCode(right)) return getComponentCode(left) > getComponentCode(right); // 名称 - return Operators.CompareString(left.Name, right.Name, false) > 0; + return string.CompareOrdinal(left.Name, right.Name) > 0; }); } @@ -2578,11 +2573,11 @@ public static string McSkinSex(string Uuid) { if (!(Uuid.Length == 32)) return "Steve"; - var a = int.Parse(Conversions.ToString(Uuid[7]), NumberStyles.AllowHexSpecifier); - var b = int.Parse(Conversions.ToString(Uuid[15]), NumberStyles.AllowHexSpecifier); - var c = int.Parse(Conversions.ToString(Uuid[23]), NumberStyles.AllowHexSpecifier); - var d = int.Parse(Conversions.ToString(Uuid[31]), NumberStyles.AllowHexSpecifier); - return Conversions.ToBoolean((a ^ b ^ c ^ d) % 2) ? "Alex" : "Steve"; + var a = int.Parse(Uuid[7].ToString(), NumberStyles.AllowHexSpecifier); + var b = int.Parse(Uuid[15].ToString(), NumberStyles.AllowHexSpecifier); + var c = int.Parse(Uuid[23].ToString(), NumberStyles.AllowHexSpecifier); + var d = int.Parse(Uuid[31].ToString(), NumberStyles.AllowHexSpecifier); + return ((a ^ b ^ c ^ d) % 2) != 0 ? "Alex" : "Steve"; // Math.floorMod(uuid.hashCode(), 18) // Public Function hashCode(ByVal str As String) As Integer @@ -3042,9 +3037,8 @@ public static List McLibNetFilesFromInstance(McInstance instance) Path.Combine(ModBase.PathPure, "mesa-loader-windows", mesaLoaderWindowsVersion, "Loader.jar"); var renderer = -1; if (McInstanceSelected is not null) - renderer = Conversions.ToInteger( - Operators.SubtractObject(ModBase.Setup.Get("VersionAdvanceRenderer", McInstanceSelected), 1)); - if (renderer == -1) renderer = Conversions.ToInteger(Config.Launch.Renderer); + renderer = Config.Instance.Renderer[McInstanceSelected?.PathInstance] - 1; + if (renderer == -1) renderer = Config.Launch.Renderer; if (renderer != 0 && !File.Exists(mesaLoaderWindowsTargetFile)) { @@ -3095,7 +3089,7 @@ public static List McLibNetFilesFromInstance(McInstance instance) } // 跳过校验 - if (Conversions.ToBoolean(ShouldIgnoreFileCheck(instance))) + if (ShouldIgnoreFileCheck(instance)) { ModBase.Log("[Minecraft] 用户要求尽量忽略文件检查,这可能会保留有误的文件"); result = result.Where(f => @@ -3237,10 +3231,10 @@ public static string McLibGet(string original, bool withHead = true, bool ignore /// /// 检查设置,是否应当忽略文件检查? /// - public static object ShouldIgnoreFileCheck(McInstance Version) + public static bool ShouldIgnoreFileCheck(McInstance Version) { - return (bool)ModBase.Setup.Get("VersionAdvanceAssetsV2", Version) || - Operators.ConditionalCompareObjectEqual(ModBase.Setup.Get("VersionAdvanceAssets", Version), 2, false); + return Config.Instance.DisableAssetVerifyV2[Version.PathInstance] || + Config.Instance.AssetVerifySolutionV1[Version.PathInstance] == 2; } #endregion @@ -3387,7 +3381,7 @@ private static List McAssetsListGet(McInstance instance) LocalPath = localPath, SourcePath = file.Key, Hash = file.Value["hash"].ToString(), - Size = Conversions.ToLong(file.Value["size"].ToString()) + Size = long.Parse(file.Value["size"].ToString()) }); } diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModProfile.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModProfile.cs index d8e746a20..86a02b8c5 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModProfile.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModProfile.cs @@ -6,7 +6,6 @@ using System.Text.Json; using FluentValidation; using Microsoft.VisualBasic; -using Microsoft.VisualBasic.CompilerServices; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PCL.Core.App; @@ -59,16 +58,15 @@ public static void MigrateOldProfile() ProfileLog("开始从旧版配置迁移档案"); var profileCount = 0; // 正版档案 - if (Conversions.ToBoolean( - !Operators.ConditionalCompareObjectEqual(States.Game.LegacyProfile.LoginMsJson, "{}", false))) + if (States.Game.LegacyProfile.LoginMsJson != "{}") { - var oldMsJson = (JObject)ModBase.GetJson(Conversions.ToString(States.Game.LegacyProfile.LoginMsJson)); + var oldMsJson = (JObject)ModBase.GetJson(States.Game.LegacyProfile.LoginMsJson); ProfileLog($"找到 {oldMsJson.Count} 个旧版正版档案信息"); foreach (var Profile in oldMsJson) { var newProfile = new McProfile { - Username = Profile.Key, Uuid = Conversions.ToString(McLoginMojangUuid(Profile.Key, false)), + Username = Profile.Key, Uuid = McLoginMojangUuid(Profile.Key, false)?.ToString() ?? "", Type = ModLaunch.McLoginType.Ms }; ProfileList.Add(newProfile); @@ -77,7 +75,7 @@ public static void MigrateOldProfile() SaveProfile(); ProfileLog("旧版正版档案迁移完成"); - ModBase.Setup.Reset("LoginMsJson"); + States.Game.LegacyProfile.LoginMsJson = "{}"; } else { @@ -85,7 +83,7 @@ public static void MigrateOldProfile() } // 离线档案 - if (!string.IsNullOrWhiteSpace(Conversions.ToString(States.Game.LegacyProfile.LoginLegacyName))) + if (!string.IsNullOrWhiteSpace(States.Game.LegacyProfile.LoginLegacyName)) { var oldOfflineInfo = (string[])((dynamic)States.Game.LegacyProfile.LoginLegacyName).Split("¨"); ProfileLog($"找到 {oldOfflineInfo.Count()} 个旧版离线档案信息"); @@ -102,7 +100,7 @@ public static void MigrateOldProfile() SaveProfile(); ProfileLog("旧版离线档案迁移完成"); - ModBase.Setup.Reset("LoginLegacyName"); + States.Game.LegacyProfile.LoginLegacyName = ""; } else { @@ -110,32 +108,31 @@ public static void MigrateOldProfile() } // 第三方验证档案 - if (!(string.IsNullOrWhiteSpace(Conversions.ToString(States.Game.LegacyProfile.AuthUserName)) || - string.IsNullOrWhiteSpace(Conversions.ToString(States.Game.LegacyProfile.AuthUuid)) || - string.IsNullOrWhiteSpace(Conversions.ToString(States.Game.LegacyProfile.AuthServerAddress)) || - string.IsNullOrWhiteSpace(Conversions.ToString(States.Game.LegacyProfile.AuthThirdPartyUserName)) || - string.IsNullOrWhiteSpace(Conversions.ToString(States.Game.LegacyProfile.AuthPassword)))) + if (!(string.IsNullOrWhiteSpace(States.Game.LegacyProfile.AuthUserName) || + string.IsNullOrWhiteSpace(States.Game.LegacyProfile.AuthUuid) || + string.IsNullOrWhiteSpace(States.Game.LegacyProfile.AuthServerAddress) || + string.IsNullOrWhiteSpace(States.Game.LegacyProfile.AuthThirdPartyUserName) || + string.IsNullOrWhiteSpace(States.Game.LegacyProfile.AuthPassword))) { ProfileLog("找到旧版第三方验证档案信息"); var newProfile = new McProfile { - Username = Conversions.ToString(States.Game.LegacyProfile.AuthUserName), - Uuid = Conversions.ToString(States.Game.LegacyProfile.AuthUuid), - Name = Conversions.ToString(States.Game.LegacyProfile.AuthThirdPartyUserName), - Password = Conversions.ToString(States.Game.LegacyProfile.AuthPassword), - Server = Conversions.ToString(Operators.ConcatenateObject(States.Game.LegacyProfile.AuthServerAddress, - "/authserver")), + Username = States.Game.LegacyProfile.AuthUserName, + Uuid = States.Game.LegacyProfile.AuthUuid, + Name = States.Game.LegacyProfile.AuthThirdPartyUserName, + Password = States.Game.LegacyProfile.AuthPassword, + Server = States.Game.LegacyProfile.AuthServerAddress + "/authserver", Type = ModLaunch.McLoginType.Auth }; ProfileList.Add(newProfile); SaveProfile(); ProfileLog("旧版第三方验证档案迁移完成"); profileCount += 1; - ModBase.Setup.Reset("CacheAuthName"); - ModBase.Setup.Reset("CacheAuthUuid"); - ModBase.Setup.Reset("CacheAuthServerServer"); - ModBase.Setup.Reset("CacheAuthUsername"); - ModBase.Setup.Reset("CacheAuthPass"); + States.Game.LegacyProfile.AuthUserName = ""; + States.Game.LegacyProfile.AuthUuid = ""; + States.Game.LegacyProfile.AuthServerAddress = ""; + States.Game.LegacyProfile.AuthThirdPartyUserName = ""; + States.Game.LegacyProfile.AuthPassword = ""; } else { @@ -950,15 +947,7 @@ private static string ToUuidString(byte[] bytes) msb = (msb << 8) | (bytes[i] & 0xFF); for (var i = 8; i <= 15; i++) lsb = (lsb << 8) | (bytes[i] & 0xFF); - return Conversions.ToString(Operators.AddObject( - Operators.AddObject( - Operators.AddObject( - Operators.AddObject( - Operators.AddObject( - Operators.AddObject( - Operators.AddObject(Operators.AddObject(Digits(msb >> 32, 8), "-"), - Digits(msb >> 16, 4)), "-"), Digits(msb, 4)), "-"), Digits(lsb >> 48, 4)), "-"), - Digits(lsb, 12))); + return $"{Digits(msb >> 32, 8)}-{Digits(msb >> 16, 4)}-{Digits(msb, 4)}-{Digits(lsb >> 48, 4)}-{Digits(lsb, 12)}"; } private static object Digits(long val, int digs) @@ -1061,7 +1050,7 @@ public static ModLaunch.McLoginData GetLoginData(ModLaunch.McLoginType targetAut /// 检查当前档案是否有效 /// /// 若档案验证有效,则返回空字符串,否则返回错误原因 - public static object IsProfileValid() + public static string IsProfileValid() { switch (SelectedProfile.Type) { @@ -1164,8 +1153,7 @@ public static void ChangeSkinMs() if (res.Contains("\"error\"")) { ModMain.Hint( - Conversions.ToString(Operators.ConcatenateObject("更改皮肤失败:", - ((JObject)ModBase.GetJson(res))["error"])), + $"更改皮肤失败:{((JObject)ModBase.GetJson(res))["error"]}", ModMain.HintType.Critical); return; } diff --git a/Plain Craft Launcher 2/Modules/ModEvent.cs b/Plain Craft Launcher 2/Modules/ModEvent.cs index 99f8ffece..db255be4e 100644 --- a/Plain Craft Launcher 2/Modules/ModEvent.cs +++ b/Plain Craft Launcher 2/Modules/ModEvent.cs @@ -9,6 +9,7 @@ using System.Windows; using System.Windows.Markup; using PCL.Core.App; +using PCL.Core.App.Configuration; using PCL.Core.Utils; using PCL.Core.Utils.Exts; using PCL.Core.Utils.OS; @@ -318,7 +319,8 @@ public static void Raise(EventType type, string arg) case EventType.写入设置: if (args.Length == 1) throw new Exception($"EventType {type} 需要至少 2 个以 | 分割的参数,例如 UiLauncherTransparent|400"); - ModBase.Setup.SetSafe(args[0], args[1], instance: ModMinecraft.McInstanceSelected); + if (ConfigService.TryGetConfigItemNoType(args[0], out var item) && item.Source != ConfigSource.SharedEncrypt) + item.SetValueNoType(args[1], ModMinecraft.McInstanceSelected?.PathInstance); if (args.Length == 2) ModMain.Hint($"已写入设置:{args[0]} → {args[1]}", ModMain.HintType.Finish); break; @@ -429,7 +431,7 @@ public static string[] GetAbsoluteUrls(string relativeUrl, EventType type) private static bool EventSafetyConfirm(string message) { - if (ModBase.Setup.Get("HintCustomCommand") == "True") + if (States.Hint.HomepageCommand) return true; switch (ModMain.MyMsgBox( @@ -442,7 +444,7 @@ private static bool EventSafetyConfirm(string message) case 1: return true; case 2: - ModBase.Setup.Set("HintCustomCommand", "True"); + States.Hint.HomepageCommand = true; return true; default: return false; diff --git a/Plain Craft Launcher 2/Modules/ModMain.cs b/Plain Craft Launcher 2/Modules/ModMain.cs index 4433f0a9c..6a134ac17 100644 --- a/Plain Craft Launcher 2/Modules/ModMain.cs +++ b/Plain Craft Launcher 2/Modules/ModMain.cs @@ -13,6 +13,7 @@ using Microsoft.Win32; using Newtonsoft.Json.Linq; using PCL.Core.App; +using PCL.Core.App.Configuration; using PCL.Core.App.Localization; using PCL.Core.UI; using PCL.Core.Utils; @@ -1542,7 +1543,12 @@ public static string ArgumentReplace(string text, Func escapeHan // 高级 text = ModBase.RegexReplaceEach(text, @"\{hint\}", m => replacer(PageToolsTest.GetRandomHint())); text = ModBase.RegexReplaceEach(text, @"\{cave\}", m => replacer(PageToolsTest.GetRandomCave())); - text = ModBase.RegexReplaceEach(text, @"\{setup:([a-zA-Z0-9]+)\}", m => replacer(ModBase.Setup.GetSafe(m.Groups[1].Value, ModMinecraft.McInstanceSelected)?.ToString() ?? "")); + text = ModBase.RegexReplaceEach(text, @"\{setup:([a-zA-Z0-9]+)\}", m => + { + if (ConfigService.TryGetConfigItemNoType(m.Groups[1].Value, out var item) && item.Source != ConfigSource.SharedEncrypt) + return replacer(item.GetValueNoType(ModMinecraft.McInstanceSelected?.PathInstance)?.ToString() ?? ""); + return replacer(""); + }); text = ModBase.RegexReplaceEach(text, @"\{varible:([^:\}]+)(?::([^\}]+))?\}", m => replacer(CustomEvent.GetCustomVariable(m.Groups[1].Value, m.Groups[2].Value))); text = ModBase.RegexReplaceEach(text, @"\{variable:([^:\}]+)(?::([^\}]+))?\}", m => replacer(CustomEvent.GetCustomVariable(m.Groups[1].Value, m.Groups[2].Value))); diff --git a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml.cs b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml.cs index a5aa11b92..632667954 100644 --- a/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageInstance/PageInstanceSetup.xaml.cs @@ -4,8 +4,6 @@ using System.Windows.Controls; using System.Windows.Input; using System.Windows.Threading; -using Microsoft.VisualBasic; -using Microsoft.VisualBasic.CompilerServices; using PCL.Core.App; using PCL.Core.App.Configuration; using PCL.Core.IO; @@ -105,8 +103,8 @@ public void Reload() RefreshJavaComboBox(); // 游戏内存 - ((MyRadioBox)FindName(Conversions.ToString(Operators.ConcatenateObject("RadioRamType", - ModBase.Setup.Load("VersionRamType", instance: PageInstanceLeft.Instance))))).Checked = true; + var ramType = Config.Instance.MemorySolution[PageInstanceLeft.Instance.PathInstance]; + ((MyRadioBox)FindName("RadioRamType" + ramType)).Checked = true; SliderRamCustom.Value = Config.Instance.CustomMemorySize[PageInstanceLeft.Instance.PathInstance]; // 服务器 @@ -126,12 +124,10 @@ public void Reload() TextAdvanceRun.Text = Config.Instance.PreLaunchCommand[PageInstanceLeft.Instance.PathInstance]; CheckAdvanceRunWait.Checked = Config.Instance.PreLaunchCommandWait[PageInstanceLeft.Instance.PathInstance]; CheckAdvanceDisableLwjglUnsafeAgent.Checked = Config.Instance.DisableLwjglUnsafeAgent[PageInstanceLeft.Instance.PathInstance]; - if (Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual( - ModBase.Setup.Get("VersionAdvanceAssets", PageInstanceLeft.Instance), 2, false))) + if (Config.Instance.AssetVerifySolutionV1[PageInstanceLeft.Instance.PathInstance] == 2) { ModBase.Log("[Setup] 已迁移老版本的关闭文件校验设置"); - ModBase.Setup.Reset("VersionAdvanceAssets", instance: PageInstanceLeft.Instance); + Config.Instance.AssetVerifySolutionV1Config.Reset(PageInstanceLeft.Instance.PathInstance); Config.Instance.DisableAssetVerifyV2[PageInstanceLeft.Instance.PathInstance] = true; } @@ -185,7 +181,7 @@ private void RadioBoxChange(object o, ModBase.RouteEventArgs routeEventArgs) var sender = (MyRadioBox)o; var gotCfg = sender.Tag.ToString().Split("/"); if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(gotCfg[0], int.Parse(gotCfg[1]), instance: PageInstanceLeft.Instance); + SetInstanceByTag(gotCfg[0], int.Parse(gotCfg[1])); } private void TextBoxChange(object o, TextChangedEventArgs textChangedEventArgs) @@ -194,8 +190,7 @@ private void TextBoxChange(object o, TextChangedEventArgs textChangedEventArgs) return; if (o is not MyTextBox textBox) return; - // 使用新配置系统保存 - var tag = Conversions.ToString(textBox.Tag); + var tag = textBox.Tag?.ToString(); var value = textBox.Text; ArgConfig setting = tag switch { @@ -218,14 +213,24 @@ private void SliderChange(object o, bool user) { var sender = (MySlider)o; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(Conversions.ToString(sender.Tag), sender.Value, instance: PageInstanceLeft.Instance); + SetInstanceByTag(sender.Tag?.ToString(), sender.Value); } private static void ComboChange(MyComboBox sender, object e) { if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(Conversions.ToString(sender.Tag), sender.SelectedIndex, - instance: PageInstanceLeft.Instance); + SetInstanceByTag(sender.Tag?.ToString(), sender.SelectedIndex); + } + + private static void SetInstanceByTag(string tag, object value) + { + var path = PageInstanceLeft.Instance.PathInstance; + switch (tag) + { + case "VersionRamType": Config.Instance.MemorySolution[path] = (int)value; break; + case "VersionRamCustom": Config.Instance.CustomMemorySize[path] = (int)value; break; + case "VersionServerLoginRequire": Config.InstanceAuth.LoginRequirementSolution[path] = (int)value; break; + } } private void CheckBoxChange(object sender, bool user) @@ -234,7 +239,7 @@ private void CheckBoxChange(object sender, bool user) return; if (sender is not MyCheckBox checkBox) return; - var tag = Conversions.ToString(checkBox.Tag); + var tag = checkBox.Tag?.ToString(); var value = checkBox.Checked.GetValueOrDefault(); ArgConfig setting = tag switch { @@ -456,9 +461,9 @@ private void RefreshRamText() /// public static double GetRam(ModMinecraft.McInstance Version, bool? Is32BitJava = default) { + var instancePath = Version?.PathInstance; // 跟随全局设置 - if (Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(ModBase.Setup.Get("VersionRamType", Version), 2, false))) + if (Config.Instance.MemorySolution[instancePath] == 2) return PageSetupLaunch.GetRam(Version, true, Is32BitJava); // ------------------------------------------ @@ -467,8 +472,7 @@ public static double GetRam(ModMinecraft.McInstance Version, bool? Is32BitJava = // 使用当前实例的设置 var RamGive = default(double); - if (Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(ModBase.Setup.Get("VersionRamType", Version), 0, false))) + if (Config.Instance.MemorySolution[instancePath] == 0) { // 自动配置 var RamAvailable = @@ -540,7 +544,7 @@ public static double GetRam(ModMinecraft.McInstance Version, bool? Is32BitJava = else { // 手动配置 - var Value = Conversions.ToInteger(ModBase.Setup.Get("VersionRamCustom", Version)); + var Value = Config.Instance.CustomMemorySize[instancePath]; if (Value <= 12) RamGive = Value * 0.1d + 0.3d; else if (Value <= 25) @@ -625,7 +629,7 @@ public void ServerLogin(int Type) BtnServerAuthLock.Visibility = Visibility.Collapsed; else BtnServerAuthLock.Visibility = Visibility.Visible; - if (Conversions.ToBoolean(ModBase.Setup.Get("VersionServerLoginLock", PageInstanceLeft.Instance))) + if (Config.InstanceAuth.AuthLocked[PageInstanceLeft.Instance.PathInstance]) { HintServerLoginLock.Visibility = Visibility.Visible; ComboServerLoginRequire.IsEnabled = false; @@ -891,9 +895,8 @@ private void ComboArgumentJava_DropDownOpened(object? sender, EventArgs e) var firstItem = ComboArgumentJava.Items[0] as MyComboBoxItem; if (firstItem is not null && - (Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(firstItem.Content, "未检测到可用的 Java 运行时", false)) || - Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(firstItem.Content, "列表加载失败,请重试", false)))) + ((string)firstItem.Content == "未检测到可用的 Java 运行时" || + (string)firstItem.Content == "列表加载失败,请重试")) ComboArgumentJava.IsDropDownOpen = false; } @@ -907,9 +910,7 @@ private void JavaSelectionUpdate(object sender, SelectionChangedEventArgs e) var selectedItem = ComboArgumentJava.SelectedItem as MyComboBoxItem; if (selectedItem is null || (selectedItem.Tag is null && - Conversions.ToBoolean( - Operators.ConditionalCompareObjectNotEqual(selectedItem.Content, - "自动选择合适的 Java", false)))) + (string)selectedItem.Content != "自动选择合适的 Java")) return; JavaPreference preference = default; @@ -1025,7 +1026,7 @@ private void ComboAdvanceRenderer_SelectionChanged(object sender, SelectionChang var args = (SelectionChangedEventArgs)e; // 转换事件参数 - if (Conversions.ToBoolean(!(bool)States.Hint.Renderer && ComboAdvanceRenderer.SelectedIndex != 0)) + if (!States.Hint.Renderer && ComboAdvanceRenderer.SelectedIndex != 0) { if (ModMain.MyMsgBox(""" 修改此项会严重影响游戏的稳定性与性能。如果你不知道你在做什么,不要修改此选项! diff --git a/Plain Craft Launcher 2/Pages/PageLogRight.xaml.cs b/Plain Craft Launcher 2/Pages/PageLogRight.xaml.cs index 5c7a9504a..bc9ad6f85 100644 --- a/Plain Craft Launcher 2/Pages/PageLogRight.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageLogRight.xaml.cs @@ -126,7 +126,7 @@ private void OnLogOutput(ModWatcher.Watcher sender, ModWatcher.LogOutputEventArg private void SliderMaxLog_ValueChanged(object o, bool user) { var sender = (MySlider)o; - ModBase.Setup.Set(sender.Tag.ToString(), sender.Value); + Config.System.MaxGameLog = sender.Value; if (ModMain.FrmSetupLauncherMisc is null) return; ModMain.FrmSetupLauncherMisc.SliderMaxLog.Value = sender.Value; diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameLink.xaml.cs b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameLink.xaml.cs index 1edb04811..9657edaf5 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameLink.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameLink.xaml.cs @@ -96,7 +96,7 @@ private void TextBoxChange(object senderRaw, TextChangedEventArgs e) // , TextLi { var sender = (MyTextBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Text); + SetGameLinkByTag(sender.Tag?.ToString(), sender.Text); } private static void @@ -104,14 +104,30 @@ private static void object e) // Handles ComboRelayType.SelectionChanged, ComboServerType.SelectionChanged { if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.SelectedIndex); + SetGameLinkByTag(sender.Tag?.ToString(), sender.SelectedIndex); } private void CheckBoxChange(object senderRaw, bool user) { var sender = (MyCheckBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Checked); + SetGameLinkByTag(sender.Tag?.ToString(), sender.Checked); + } + + private static void SetGameLinkByTag(string tag, object value) + { + switch (tag) + { + case "LinkUsername": Config.Link.Username = (string)value; break; + case "LinkRelayServer": Config.Link.CustomRelayServer = (string)value; break; + case "LinkRelayType": Config.Link.RelayType = (LinkRelayBehavior)(int)value; break; + case "LinkServerType": Config.Link.ServerType = (int)value; break; + case "LinkProtocolPreference": Config.Link.ProtocolPreference = (LinkProtocolPreference)(int)value; break; + case "LinkLatencyFirstMode": Config.Link.UseLatencyFirstMode = (bool)value; break; + case "LinkTryPunchSym": Config.Link.TryPunchSym = (bool)value; break; + case "LinkEnableIPv6": Config.Link.EnableIPv6 = (bool)value; break; + case "LinkEnableCliOutput": Config.Link.EnableCliOutput = (bool)value; break; + } } private void LinkProtocolPerferenceChange(object sender, SelectionChangedEventArgs e) diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameManage.xaml.cs b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameManage.xaml.cs index fc89fd3ec..b0e07e154 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameManage.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupGameManage.xaml.cs @@ -38,19 +38,19 @@ public void Reload() SliderDownloadSpeed.Value = Config.Download.SpeedLimit; ComboDownloadSource.SelectedIndex = Config.Download.FileSource; ComboDownloadVersion.SelectedIndex = Config.Download.VersionListSource; - CheckDownloadAutoSelectVersion.Checked = (bool?)Config.Download.AutoSelectInstance; - CheckFixAuthlib.Checked = (bool?)Config.Download.FixAuthLib; + CheckDownloadAutoSelectVersion.Checked = Config.Download.AutoSelectInstance; + CheckFixAuthlib.Checked = Config.Download.FixAuthLib; // Mod 与整合包 ComboDownloadTranslateV2.SelectedIndex = Config.Download.Comp.NameFormatV2; ComboDownloadMod.SelectedIndex = Config.Download.Comp.CompSourceSolution; ComboModLocalNameStyle.SelectedIndex = Config.Download.Comp.UiCompNameSolution; - CheckDownloadIgnoreQuilt.Checked = (bool?)Config.Download.Comp.IgnoreQuilt; - CheckDownloadClipboard.Checked = (bool?)Config.Download.Comp.ReadClipboard; + CheckDownloadIgnoreQuilt.Checked = Config.Download.Comp.IgnoreQuilt; + CheckDownloadClipboard.Checked = Config.Download.Comp.ReadClipboard; // Minecraft 更新提示 - CheckUpdateRelease.Checked = (bool?)Config.Tool.ReleaseNotification; - CheckUpdateSnapshot.Checked = (bool?)Config.Tool.SnapshotNotification; + CheckUpdateRelease.Checked = Config.Tool.ReleaseNotification; + CheckUpdateSnapshot.Checked = Config.Tool.SnapshotNotification; // 辅助设置 CheckHelpLauncherLanguage.Checked = Config.Tool.AutoChangeLanguage; @@ -79,21 +79,42 @@ private void CheckBoxChange(object senderRaw, bool user) { var sender = (MyCheckBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Checked); + SetGameManageByTag(sender.Tag?.ToString(), sender.Checked); } private void SliderChange(object senderRaw, bool user) { var sender = (MySlider)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Value); + SetGameManageByTag(sender.Tag?.ToString(), sender.Value); } private void ComboChange(object senderRaw, SelectionChangedEventArgs e) { var sender = (MyComboBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.SelectedIndex); + SetGameManageByTag(sender.Tag?.ToString(), sender.SelectedIndex); + } + + private static void SetGameManageByTag(string tag, object value) + { + switch (tag) + { + case "ToolDownloadThread": Config.Download.ThreadLimit = (int)value; break; + case "ToolDownloadSpeed": Config.Download.SpeedLimit = (int)value; break; + case "ToolDownloadSource": Config.Download.FileSource = (int)value; break; + case "ToolDownloadVersion": Config.Download.VersionListSource = (int)value; break; + case "ToolDownloadAutoSelectVersion": Config.Download.AutoSelectInstance = (bool)value; break; + case "ToolFixAuthlib": Config.Download.FixAuthLib = (bool)value; break; + case "ToolDownloadTranslateV2": Config.Download.Comp.NameFormatV2 = (int)value; break; + case "ToolDownloadMod": Config.Download.Comp.CompSourceSolution = (int)value; break; + case "ToolModLocalNameStyle": Config.Download.Comp.UiCompNameSolution = (int)value; break; + case "ToolDownloadIgnoreQuilt": Config.Download.Comp.IgnoreQuilt = (bool)value; break; + case "ToolDownloadClipboard": Config.Download.Comp.ReadClipboard = (bool)value; break; + case "ToolUpdateRelease": Config.Tool.ReleaseNotification = (bool)value; break; + case "ToolUpdateSnapshot": Config.Tool.SnapshotNotification = (bool)value; break; + case "ToolHelpChinese": Config.Tool.AutoChangeLanguage = (bool)value; break; + } } // 滑动条 @@ -121,7 +142,7 @@ private void SliderDownloadThread_PreviewChange(object sender, ModBase.RouteEven { if (SliderDownloadThread.Value < 100) return; - if (!(States.Hint.LargeDownloadThread as bool? ?? false)) + if (!States.Hint.LargeDownloadThread) { States.Hint.LargeDownloadThread = true; ModMain.MyMsgBox( diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.cs b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.cs index 05f77b7ec..b7bf6be6e 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml.cs @@ -60,10 +60,9 @@ public void Reload() TextArgumentWindowHeight.Text = Config.Launch.GameWindowHeight.ToString(); ComboMsAuthType.SelectedIndex = Config.Launch.LoginMsAuthType; ComboPreferredIpStack.SelectedIndex = (int)Config.Launch.PreferredIpStack; - // CheckArgumentJavaTraversal.Checked = Setup.Get("LaunchArgumentJavaTraversal") // 游戏内存 - ((MyRadioBox)FindName("RadioRamType" + ModBase.Setup.Load("LaunchRamType"))).Checked = true; + ((MyRadioBox)FindName("RadioRamType" + Config.Launch.MemoryAllocationMode)).Checked = true; SliderRamCustom.Value = Config.Launch.CustomMemorySize; // 高级设置 @@ -122,42 +121,69 @@ private void RadioBoxChange(object senderRaw, ModBase.RouteEventArgs e) var sender = (MyRadioBox)senderRaw; var gotCfg = sender.Tag?.ToString()?.Split("/") ?? Array.Empty(); if (ModAnimation.AniControlEnabled == 0 && gotCfg.Length >= 2) - ModBase.Setup.Set(gotCfg[0], int.Parse(gotCfg[1])); + SetLaunchByTag(gotCfg[0], int.Parse(gotCfg[1])); } private void TextBoxChange(object senderRaw, RoutedEventArgs e) { var sender = (MyTextBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Text); + SetLaunchByTag(sender.Tag?.ToString(), sender.Text); } private void TextArgumentTitle_OnTextChanged(object senderRaw, TextChangedEventArgs e) { var sender = (MyTextBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Text); + SetLaunchByTag(sender.Tag?.ToString(), sender.Text); } private void SliderChange(object senderRaw, bool user) { var sender = (MySlider)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Value); + SetLaunchByTag(sender.Tag?.ToString(), sender.Value); } private void ComboChange(object senderRaw, SelectionChangedEventArgs e) { var sender = (MyComboBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.SelectedIndex); + SetLaunchByTag(sender.Tag?.ToString(), sender.SelectedIndex); } private void CheckBoxChange(object senderRaw, bool user) { var sender = (MyCheckBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Checked); + SetLaunchByTag(sender.Tag?.ToString(), sender.Checked); + } + + private static void SetLaunchByTag(string tag, object value) + { + switch (tag) + { + case "LaunchRamType": Config.Launch.MemoryAllocationMode = (int)value; break; + case "LaunchRamCustom": Config.Launch.CustomMemorySize = (int)value; break; + case "LaunchArgumentTitle": Config.Launch.Title = (string)value; break; + case "LaunchArgumentInfo": Config.Launch.TypeInfo = (string)value; break; + case "LaunchArgumentIndieV2": Config.Launch.IndieSolutionV2 = (int)value; break; + case "LaunchArgumentVisible": Config.Launch.LauncherVisibility = (LauncherVisibility)(int)value; break; + case "LaunchArgumentPriority": Config.Launch.ProcessPriority = (GameProcessPriority)(int)value; break; + case "LaunchArgumentWindowType": Config.Launch.GameWindowMode = (GameWindowSizeMode)(int)value; break; + case "LoginMsAuthType": Config.Launch.LoginMsAuthType = (int)value; break; + case "LaunchPreferredIpStack": Config.Launch.PreferredIpStack = (JvmPreferredIpStack)(int)value; break; + case "LaunchAdvanceRenderer": Config.Launch.Renderer = (int)value; break; + case "LaunchAdvanceJvm": Config.Launch.JvmArgs = (string)value; break; + case "LaunchAdvanceGame": Config.Launch.GameArgs = (string)value; break; + case "LaunchAdvanceRun": Config.Launch.PreLaunchCommand = (string)value; break; + case "LaunchAdvanceRunWait": Config.Launch.PreLaunchCommandWait = (bool)value; break; + case "LaunchAdvanceDisableJLW": Config.Launch.DisableJlw = (bool)value; break; + case "LaunchAdvanceDisableRW": Config.Launch.DisableRw = (bool)value; break; + case "LaunchAdvanceGraphicCard": Config.Launch.SetGpuPreference = (bool)value; break; + case "LaunchAdvanceNoJavaw": Config.Launch.NoJavaw = (bool)value; break; + case "LaunchAdvanceDisableLwjglUnsafeAgent": Config.Launch.DisableLwjglUnsafeAgent = (bool)value; break; + } } // 切换到实例独立设置 @@ -533,14 +559,14 @@ private void TextAdvanceRun_TextChanged(object sender, TextChangedEventArgs e) private void TextAdvanceJvm_TextChanged(object sender, TextChangedEventArgs e) { BtnAdvanceJvmReset.Visibility = - TextAdvanceJvm.Text == (string)ModBase.Setup.GetDefault("LaunchAdvanceJvm") + TextAdvanceJvm.Text == Config.Launch.JvmArgsConfig.DefaultValue ? Visibility.Hidden : Visibility.Visible; } private void BtnAdvanceJvmReset_Click(object sender, EventArgs e) { - ModBase.Setup.Reset("LaunchAdvanceJvm"); + Config.Launch.JvmArgsConfig.Reset(); Reload(); } @@ -559,13 +585,13 @@ private void ComboAdvanceRenderer_SelectionChanged(MyComboBox sender, object e) } else { - ModBase.Setup.Set((string)sender.Tag, sender.SelectedIndex); + Config.Launch.Renderer = sender.SelectedIndex; States.Hint.Renderer = true; } } else { - ModBase.Setup.Set((string)sender.Tag, sender.SelectedIndex); + Config.Launch.Renderer = sender.SelectedIndex; } } diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLauncherMisc.xaml.cs b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLauncherMisc.xaml.cs index 2e5153225..d8a805618 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLauncherMisc.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLauncherMisc.xaml.cs @@ -86,7 +86,7 @@ private void ComboChange(object senderRaw, SelectionChangedEventArgs e) { var sender = (MyComboBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.SelectedIndex); + SetMiscByTag(sender.Tag?.ToString(), sender.SelectedIndex); } private void RadioBoxChange(object senderRaw, ModBase.RouteEventArgs e) @@ -94,21 +94,38 @@ private void RadioBoxChange(object senderRaw, ModBase.RouteEventArgs e) var sender = (MyRadioBox)senderRaw; var gotCfg = sender.Tag?.ToString()?.Split("/") ?? Array.Empty(); if (ModAnimation.AniControlEnabled == 0 && gotCfg.Length >= 2) - ModBase.Setup.Set(gotCfg[0], int.Parse(gotCfg[1])); + SetMiscByTag(gotCfg[0], int.Parse(gotCfg[1])); } private void CheckBoxChange(object senderRaw, bool user) { var sender = (MyCheckBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Checked); + SetMiscByTag(sender.Tag?.ToString(), sender.Checked); } private void SliderChange(object senderRaw, bool user) { var sender = (MySlider)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Value); + SetMiscByTag(sender.Tag?.ToString(), sender.Value); + } + + private static void SetMiscByTag(string tag, object value) + { + switch (tag) + { + case "SystemMaxLog": Config.System.MaxGameLog = (int)value; break; + case "SystemDebugMode": Config.Debug.Enabled = (bool)value; break; + case "SystemDebugAnim": Config.Debug.AnimationSpeed = (int)value; break; + case "SystemDebugDelay": Config.Debug.AddRandomDelay = (bool)value; break; + case "SystemDebugSkipCopy": Config.Debug.DontCopy = (bool)value; break; + case "SystemDisableHardwareAcceleration": Config.System.DisableHardwareAcceleration = (bool)value; break; + case "SystemHttpProxyType": Config.Network.HttpProxy.Type = (int)value; break; + case "SystemNetEnableDoH": Config.Network.EnableDoH = (bool)value; break; + case "SystemTelemetry": Config.System.Telemetry = (bool)value; break; + case "UiAniFPS": Config.System.AnimationFpsLimit = (int)value; break; + } } // 网络 diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.cs b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.cs index 03a3cce90..49aba17ac 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.cs +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.cs @@ -2,8 +2,6 @@ using System.Windows; using System.Windows.Controls; using System.Windows.Input; -using Microsoft.VisualBasic; -using Microsoft.VisualBasic.CompilerServices; using PCL.Core.App; using PCL.Core.UI; using PCL.Core.Utils; @@ -50,70 +48,68 @@ public void Reload() try { // 启动器 - SliderLauncherOpacity.Value = Conversions.ToInteger(Config.Preference.Theme.WindowOpacity); - CheckLauncherLogo.Checked = (bool?)Config.Preference.ShowStartupLogo; - ComboDarkMode.SelectedIndex = Conversions.ToInteger(Config.Preference.Theme.ColorMode); - ComboDarkColor.SelectedIndex = Conversions.ToInteger(Config.Preference.Theme.DarkColor); - ComboLightColor.SelectedIndex = Conversions.ToInteger(Config.Preference.Theme.LightColor); - CheckShowLaunchingHint.Checked = (bool?)Config.Preference.ShowLaunchingHint; + SliderLauncherOpacity.Value = Config.Preference.Theme.WindowOpacity; + CheckLauncherLogo.Checked = Config.Preference.ShowStartupLogo; + ComboDarkMode.SelectedIndex = (int)Config.Preference.Theme.ColorMode; + ComboDarkColor.SelectedIndex = (int)Config.Preference.Theme.DarkColor; + ComboLightColor.SelectedIndex = (int)Config.Preference.Theme.LightColor; + CheckShowLaunchingHint.Checked = Config.Preference.ShowLaunchingHint; // 字体设置 - ComboUiFont.SelectedFontTag = Conversions.ToString(Config.Preference.Font); - ComboUiMotdFont.SelectedFontTag = Conversions.ToString(Config.Preference.MotdFont); + ComboUiFont.SelectedFontTag = Config.Preference.Font; + ComboUiMotdFont.SelectedFontTag = Config.Preference.MotdFont; - CheckBlur.Checked = (bool?)Config.Preference.Blur.IsEnabled; - SliderBlurValue.Value = Conversions.ToInteger(Config.Preference.Blur.Radius); - SliderBlurSamplingRate.Value = Conversions.ToInteger(Config.Preference.Blur.SamplingRate); - ComboBlurType.SelectedIndex = Conversions.ToInteger(Config.Preference.Blur.KernelType); + CheckBlur.Checked = Config.Preference.Blur.IsEnabled; + SliderBlurValue.Value = Config.Preference.Blur.Radius; + SliderBlurSamplingRate.Value = Config.Preference.Blur.SamplingRate; + ComboBlurType.SelectedIndex = Config.Preference.Blur.KernelType; PanBlurValue.Visibility = CheckBlur.Checked == true ? Visibility.Visible : Visibility.Collapsed; - CheckLockWindowSize.Checked = (bool?)Config.Preference.LockWindowSize; + CheckLockWindowSize.Checked = Config.Preference.LockWindowSize; // 背景图片 - SliderBackgroundOpacity.Value = Conversions.ToInteger(Config.Preference.Background.WallpaperOpacity); - SliderBackgroundBlur.Value = Conversions.ToInteger(Config.Preference.Background.WallpaperBlurRadius); - ComboBackgroundSuit.SelectedIndex = Conversions.ToInteger(Config.Preference.Background.WallpaperSuitMode); - CheckBackgroundColorful.Checked = (bool?)Config.Preference.Background.BackgroundColorful; + SliderBackgroundOpacity.Value = Config.Preference.Background.WallpaperOpacity; + SliderBackgroundBlur.Value = Config.Preference.Background.WallpaperBlurRadius; + ComboBackgroundSuit.SelectedIndex = Config.Preference.Background.WallpaperSuitMode; + CheckBackgroundColorful.Checked = Config.Preference.Background.BackgroundColorful; var autoPauseVideo = Config.Preference.Background.AutoPauseVideo; - CheckAutoPauseVideo.Checked = (bool?)autoPauseVideo; + CheckAutoPauseVideo.Checked = autoPauseVideo; if (ModVideoBack.IsGaming) - if (Conversions.ToBoolean(Operators.ConditionalCompareObjectEqual(autoPauseVideo, true, false))) + if (autoPauseVideo) BtnBackgroundRefresh.IsEnabled = false; BackgroundRefresh(false, false); // 标题栏 - ((MyRadioBox)FindName( - Conversions.ToString(Operators.ConcatenateObject("RadioLogoType", - Config.Preference.WindowTitleType)))) + ((MyRadioBox)FindName("RadioLogoType" + (int)Config.Preference.WindowTitleType)) .Checked = true; CheckLogoLeft.Visibility = RadioLogoType0.Checked ? Visibility.Visible : Visibility.Collapsed; PanLogoText.Visibility = RadioLogoType2.Checked ? Visibility.Visible : Visibility.Collapsed; PanLogoChange.Visibility = RadioLogoType3.Checked ? Visibility.Visible : Visibility.Collapsed; - TextLogoText.Text = Conversions.ToString(Config.Preference.WindowTitleCustomText); - CheckLogoLeft.Checked = (bool?)Config.Preference.TopBarLeftAlign; + TextLogoText.Text = Config.Preference.WindowTitleCustomText; + CheckLogoLeft.Checked = Config.Preference.TopBarLeftAlign; // 背景音乐 - CheckMusicRandom.Checked = (bool?)Config.Preference.Music.ShufflePlayback; - CheckMusicAuto.Checked = (bool?)Config.Preference.Music.StartOnStartup; - CheckMusicStop.Checked = (bool?)Config.Preference.Music.StopInGame; - CheckMusicStart.Checked = (bool?)Config.Preference.Music.StartInGame; - CheckMusicSMTC.Checked = (bool?)Config.Preference.Music.EnableSMTC; - SliderMusicVolume.Value = Conversions.ToInteger(Config.Preference.Music.Volume); + CheckMusicRandom.Checked = Config.Preference.Music.ShufflePlayback; + CheckMusicAuto.Checked = Config.Preference.Music.StartOnStartup; + CheckMusicStop.Checked = Config.Preference.Music.StopInGame; + CheckMusicStart.Checked = Config.Preference.Music.StartInGame; + CheckMusicSMTC.Checked = Config.Preference.Music.EnableSMTC; + SliderMusicVolume.Value = Config.Preference.Music.Volume; MusicRefreshUI(); // 主页 try { - ComboCustomPreset.SelectedIndex = Conversions.ToInteger(Config.Preference.Homepage.SelectedPreset); + ComboCustomPreset.SelectedIndex = Config.Preference.Homepage.SelectedPreset; } catch { - ModBase.Setup.Reset("UiCustomPreset"); + Config.Preference.Homepage.SelectedPresetConfig.Reset(); } - ((MyRadioBox)FindName(Conversions.ToString(Operators.ConcatenateObject("RadioCustomType", - ModBase.Setup.Load("UiCustomType", true))))).Checked = true; - TextCustomNet.Text = Conversions.ToString(Config.Preference.Homepage.CustomUrl); + ((MyRadioBox)FindName("RadioCustomType" + Config.Preference.Homepage.Type)).Checked = true; + TextCustomNet.Text = Config.Preference.Homepage.CustomUrl; + ModSetup.UiCustomType(Config.Preference.Homepage.Type); // 功能隐藏 // 获取配置组引用 @@ -191,28 +187,28 @@ private void SliderChange(object senderRaw, bool user) { var sender = (MySlider)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Value); + SetByTag(sender.Tag?.ToString(), sender.Value); } private void ComboChange(object senderRaw, SelectionChangedEventArgs e) { var sender = (MyComboBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.SelectedIndex); + SetByTag(sender.Tag?.ToString(), sender.SelectedIndex); } private void CheckBoxChange(object senderRaw, bool user) { var sender = (MyCheckBox)senderRaw; - // 仅在动画未运行或初始化完成时保存设置,防止初始化时的触发导致重复写入 - if (ModAnimation.AniControlEnabled == 0) ModBase.Setup.Set(sender.Tag?.ToString(), sender.Checked); + if (ModAnimation.AniControlEnabled == 0) + SetByTag(sender.Tag?.ToString(), sender.Checked); } private void TextBoxChange(object senderRaw, RoutedEventArgs e) { var sender = (MyTextBox)senderRaw; if (ModAnimation.AniControlEnabled == 0) - ModBase.Setup.Set(sender.Tag?.ToString(), sender.Text); + SetByTag(sender.Tag?.ToString(), sender.Text); } private void RadioBoxChange(object senderRaw, ModBase.RouteEventArgs e) @@ -220,7 +216,73 @@ private void RadioBoxChange(object senderRaw, ModBase.RouteEventArgs e) var sender = (MyRadioBox)senderRaw; var gotCfg = sender.Tag?.ToString()?.Split("/") ?? Array.Empty(); if (ModAnimation.AniControlEnabled == 0 && gotCfg.Length >= 2) - ModBase.Setup.Set(gotCfg[0], int.Parse(gotCfg[1])); + SetByTag(gotCfg[0], int.Parse(gotCfg[1])); + } + + private static void SetByTag(string tag, object value) + { + switch (tag) + { + case "UiLauncherTransparent": Config.Preference.Theme.WindowOpacity = (int)value; break; + case "UiBackgroundOpacity": Config.Preference.Background.WallpaperOpacity = (int)value; break; + case "UiBackgroundBlur": Config.Preference.Background.WallpaperBlurRadius = (int)value; break; + case "UiBlurValue": Config.Preference.Blur.Radius = (int)value; break; + case "UiBlurSamplingRate": Config.Preference.Blur.SamplingRate = (int)value; break; + case "UiMusicVolume": Config.Preference.Music.Volume = (int)value; break; + + case "UiLauncherLogo": Config.Preference.ShowStartupLogo = (bool)value; break; + case "UiShowLaunchingHint": Config.Preference.ShowLaunchingHint = (bool)value; break; + case "UiLockWindowSize": Config.Preference.LockWindowSize = (bool)value; break; + case "UiBlur": Config.Preference.Blur.IsEnabled = (bool)value; break; + case "UiAutoPauseVideo": Config.Preference.Background.AutoPauseVideo = (bool)value; break; + case "UiBackgroundColorful": Config.Preference.Background.BackgroundColorful = (bool)value; break; + case "UiMusicRandom": Config.Preference.Music.ShufflePlayback = (bool)value; break; + case "UiMusicAuto": Config.Preference.Music.StartOnStartup = (bool)value; break; + case "UiMusicStart": Config.Preference.Music.StartInGame = (bool)value; break; + case "UiMusicStop": Config.Preference.Music.StopInGame = (bool)value; break; + case "UiMusicSMTC": Config.Preference.Music.EnableSMTC = (bool)value; break; + case "UiLogoLeft": Config.Preference.TopBarLeftAlign = (bool)value; break; + + case "UiDarkMode": Config.Preference.Theme.ColorMode = (ColorMode)(int)value; break; + case "UiDarkColor": Config.Preference.Theme.DarkColor = (ColorTheme)(int)value; break; + case "UiLightColor": Config.Preference.Theme.LightColor = (ColorTheme)(int)value; break; + case "UiBlurType": Config.Preference.Blur.KernelType = (int)value; break; + case "UiBackgroundSuit": Config.Preference.Background.WallpaperSuitMode = (int)value; break; + case "UiCustomPreset": Config.Preference.Homepage.SelectedPreset = (int)value; break; + case "UiLogoType": Config.Preference.WindowTitleType = (LauncherTitleType)(int)value; break; + case "UiLogoText": Config.Preference.WindowTitleCustomText = (string)value; break; + case "UiCustomType": Config.Preference.Homepage.Type = (int)value; break; + + case "UiHiddenPageDownload": Config.Preference.Hide.PageDownload = (bool)value; break; + case "UiHiddenPageSetup": Config.Preference.Hide.PageSetup = (bool)value; break; + case "UiHiddenPageTools": Config.Preference.Hide.PageTools = (bool)value; break; + case "UiHiddenSetupLaunch": Config.Preference.Hide.SetupLaunch = (bool)value; break; + case "UiHiddenSetupUi": Config.Preference.Hide.SetupUi = (bool)value; break; + case "UiHiddenSetupLauncherLanguage": Config.Preference.Hide.SetupLauncherLanguage = (bool)value; break; + case "UiHiddenSetupLauncherMisc": Config.Preference.Hide.SetupLauncherMisc = (bool)value; break; + case "UiHiddenSetupGameManage": Config.Preference.Hide.SetupGameManage = (bool)value; break; + case "UiHiddenSetupJava": Config.Preference.Hide.SetupJava = (bool)value; break; + case "UiHiddenSetupUpdate": Config.Preference.Hide.SetupUpdate = (bool)value; break; + case "UiHiddenSetupGameLink": Config.Preference.Hide.SetupGameLink = (bool)value; break; + case "UiHiddenSetupAbout": Config.Preference.Hide.SetupAbout = (bool)value; break; + case "UiHiddenSetupFeedback": Config.Preference.Hide.SetupFeedback = (bool)value; break; + case "UiHiddenSetupLog": Config.Preference.Hide.SetupLog = (bool)value; break; + case "UiHiddenToolsGameLink": Config.Preference.Hide.ToolsGameLink = (bool)value; break; + case "UiHiddenToolsHelp": Config.Preference.Hide.ToolsHelp = (bool)value; break; + case "UiHiddenToolsTest": Config.Preference.Hide.ToolsTest = (bool)value; break; + case "UiHiddenVersionEdit": Config.Preference.Hide.InstanceEdit = (bool)value; break; + case "UiHiddenVersionExport": Config.Preference.Hide.InstanceExport = (bool)value; break; + case "UiHiddenVersionSave": Config.Preference.Hide.InstanceSave = (bool)value; break; + case "UiHiddenVersionScreenshot": Config.Preference.Hide.InstanceScreenshot = (bool)value; break; + case "UiHiddenVersionMod": Config.Preference.Hide.InstanceMod = (bool)value; break; + case "UiHiddenVersionResourcePack": Config.Preference.Hide.InstanceResourcePack = (bool)value; break; + case "UiHiddenVersionShader": Config.Preference.Hide.InstanceShader = (bool)value; break; + case "UiHiddenVersionSchematic": Config.Preference.Hide.InstanceSchematic = (bool)value; break; + case "UiHiddenVersionServer": Config.Preference.Hide.InstanceServer = (bool)value; break; + case "UiHiddenFunctionSelect": Config.Preference.Hide.FunctionSelect = (bool)value; break; + case "UiHiddenFunctionModUpdate": Config.Preference.Hide.FunctionModUpdate = (bool)value; break; + case "UiHiddenFunctionHidden": Config.Preference.Hide.FunctionHidden = (bool)value; break; + } } private void ComboFontChange(object sender, SelectionChangedEventArgs e) @@ -324,8 +386,7 @@ public static void BackgroundRefresh(bool IsHint, bool Refresh) ModVideoBack.ForcePlayChanged -= ModVideoBack.OnForcePlayChanged; ModVideoBack.GamingStateChanged += ModVideoBack.OnGamingStateChanged; ModVideoBack.ForcePlayChanged += ModVideoBack.OnForcePlayChanged; - if (Conversions.ToBoolean( - Operators.ConditionalCompareObjectEqual(Config.Preference.Background.AutoPauseVideo, false, false))) + if (!Config.Preference.Background.AutoPauseVideo) ModVideoBack.ForcePlay = true; // 加载 if (Pic.Count == 0) @@ -359,7 +420,7 @@ public static void BackgroundRefresh(bool IsHint, bool Refresh) ModVideoBack.VideoStop(); ModBase.Log("[UI] 加载背景内容:" + Address); ModMain.FrmMain.ImgBack.Background = new MyBitmap(Address); - ModBase.Setup.Load("UiBackgroundSuit", true); + _ = Config.Preference.Background.WallpaperSuitMode; ModMain.FrmMain.ImgBack.Visibility = Visibility.Visible; if (IsHint) ModMain.Hint(Lang.Text("Setup.Ui.Background.Refresh.Success", ModBase.GetFileNameFromPath(Address)), ModMain.HintType.Finish, @@ -625,7 +686,7 @@ private void BtnCustomTutorial_Click(object sender, MouseButtonEventArgs e) private void ThemeColor_Change(object senderRaw, SelectionChangedEventArgs e) { var sender = (MyComboBox)senderRaw; - ModBase.Setup.Set(sender.Tag?.ToString(), sender.SelectedIndex); + SetByTag(sender.Tag?.ToString(), sender.SelectedIndex); ThemeManager.ThemeRefresh(); } @@ -767,9 +828,8 @@ public static void HiddenRefresh() foreach (var category in categories) { var isVisible = category.Item2 || HiddenForceShow; - category.Item1.Visibility = - Conversions.ToBoolean(isVisible) ? Visibility.Visible : Visibility.Collapsed; - if (Conversions.ToBoolean(isVisible)) + category.Item1.Visibility = isVisible ? Visibility.Visible : Visibility.Collapsed; + if (isVisible) category.Item1.Opacity = 0.6d; }