Files
xyou f70b061d1a
CI / Go Backend (push) Canceled after 0s
feat: 项目初始化 + 3D方块世界原型 + AI助搭系统
初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器

HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块

Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚

AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
2026-08-08 14:07:56 +08:00

677 lines
28 KiB
C#

using System.Net;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Effects;
using PCL.Core.App;
using PCL.Core.App.Configuration;
using PCL.Core.IO.Net.Http;
using PCL.Core.UI.Theme;
using PCL.Core.Utils.Exts;
using PCL.Network;
using PCL.Core.App.Localization;
namespace PCL;
public class ModSetup
{
public ModSetup()
{
// === Hide Group ===
ConfigService.RegisterObserver(Config.Preference.Hide,
new ConfigObserver(ConfigEvent.Changed, _ => PageSetupUI.HiddenRefresh()));
// === Launch ===
Config.Launch.MemoryAllocationModeConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => LaunchRamType((int)e.Value!)));
States.Game.SelectedFolderConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => LaunchFolderSelect((string)(e.Value ?? ""))));
States.Game.SelectedInstanceConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => LaunchInstanceSelect((string)(e.Value ?? ""))));
// === Tool ===
Config.Download.ThreadLimitConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => ToolDownloadThread((int)e.Value!)));
Config.Download.SpeedLimitConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => ToolDownloadSpeed((int)e.Value!)));
// === UI - Launcher ===
Config.Preference.Theme.WindowOpacityConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiLauncherTransparent((int)e.Value!)));
Config.Preference.Theme.ThemeSelectedConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiLauncherTheme((int)e.Value!)));
Config.Preference.Background.BackgroundColorfulConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiBackgroundColorful((bool)e.Value!)));
Config.Preference.LockWindowSizeConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiLockWindowSize((bool)e.Value!)));
// UI - Video Background
Config.Preference.Background.AutoPauseVideoConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiAutoPauseVideo((bool)e.Value!)));
// UI - Background Image
Config.Preference.Background.WallpaperOpacityConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiBackgroundOpacity((int)e.Value!)));
Config.Preference.Background.WallpaperBlurRadiusConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiBackgroundBlur((int)e.Value!)));
Config.Preference.Background.WallpaperSuitModeConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiBackgroundSuit((int)e.Value!)));
// UI - Font
Config.Preference.FontConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiFont((string)(e.Value ?? ""))));
// UI - Homepage
Config.Preference.Homepage.TypeConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiCustomType((int)e.Value!)));
// UI - Blur
Config.Preference.Blur.IsEnabledConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiBlur((bool)e.Value!)));
Config.Preference.Blur.RadiusConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiBlurValue((int)e.Value!)));
Config.Preference.Blur.SamplingRateConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiBlurSamplingRate((int)e.Value!)));
Config.Preference.Blur.KernelTypeConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiBlurType((int)e.Value!)));
// UI - Title Bar
Config.Preference.WindowTitleTypeConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiLogoType((int)e.Value!)));
Config.Preference.WindowTitleCustomTextConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiLogoText((string)(e.Value ?? ""))));
Config.Preference.TopBarLeftAlignConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => UiLogoLeft((bool)e.Value!)));
// === System ===
Config.Debug.EnabledConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => SystemDebugMode((bool)e.Value!)));
Config.Debug.AnimationSpeedConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => SystemDebugAnim((int)e.Value!)));
Config.Network.HttpProxy.CustomAddressConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => SystemHttpProxy((string)(e.Value ?? ""))));
Config.Network.HttpProxy.TypeConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => SystemHttpProxyType((int)e.Value!)));
Config.Network.HttpProxy.CustomUsernameConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => SystemHttpProxyCustomUsername((string)(e.Value ?? ""))));
Config.Network.HttpProxy.CustomPasswordConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => SystemHttpProxyCustomPassword((string)(e.Value ?? ""))));
// === Version ===
Config.Instance.MemorySolutionConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => VersionRamType((int)e.Value!)));
Config.InstanceAuth.LoginRequirementSolutionConfig.Observe(new ConfigObserver(ConfigEvent.Changed,
e => VersionServerLogin((int)e.Value!)));
}
/// <summary>
/// 主动应用所有当前配置值。
/// </summary>
public static void ApplyAll()
{
// Launch
LaunchRamType(Config.Launch.MemoryAllocationMode);
// Tool
ToolDownloadThread(Config.Download.ThreadLimit);
ToolDownloadSpeed(Config.Download.SpeedLimit);
// UI - Launcher
UiLauncherTransparent(Config.Preference.Theme.WindowOpacity);
UiLauncherTheme(Config.Preference.Theme.ThemeSelected);
UiBackgroundColorful(Config.Preference.Background.BackgroundColorful);
UiLockWindowSize(Config.Preference.LockWindowSize);
// UI - Video Background
UiAutoPauseVideo(Config.Preference.Background.AutoPauseVideo);
// UI - Background Image
UiBackgroundOpacity(Config.Preference.Background.WallpaperOpacity);
UiBackgroundBlur(Config.Preference.Background.WallpaperBlurRadius);
UiBackgroundSuit(Config.Preference.Background.WallpaperSuitMode);
// UI - Font
UiFont(Config.Preference.Font);
// UI - Homepage
UiCustomType(Config.Preference.Homepage.Type);
// UI - Blur
if (Config.Preference.Blur.IsEnabled)
{
UiBlurValue(Config.Preference.Blur.Radius);
UiBlurSamplingRate(Config.Preference.Blur.SamplingRate);
UiBlurType(Config.Preference.Blur.KernelType);
}
else
{
UiBlurValue(0);
}
UiBlur(Config.Preference.Blur.IsEnabled);
// UI - Title Bar
UiLogoType((int)Config.Preference.WindowTitleType);
UiLogoText(Config.Preference.WindowTitleCustomText);
UiLogoLeft(Config.Preference.TopBarLeftAlign);
// UI - Hide
PageSetupUI.HiddenRefresh();
// System
SystemDebugMode(Config.Debug.Enabled);
SystemDebugAnim(Config.Debug.AnimationSpeed);
SystemHttpProxy(Config.Network.HttpProxy.CustomAddress);
SystemHttpProxyType(Config.Network.HttpProxy.Type);
SystemHttpProxyCustomUsername(Config.Network.HttpProxy.CustomUsername);
SystemHttpProxyCustomPassword(Config.Network.HttpProxy.CustomPassword);
}
#region Launch
// 切换选择
public static void LaunchInstanceSelect(string value)
{
ModBase.Log("[Setup] 当前选择的 Minecraft 版本:" + value);
ModBase.WriteIni(ModFolder.mcFolderSelected + "PCL.ini", "Version", value);
}
public static void LaunchFolderSelect(string value)
{
ModBase.Log("[Setup] 当前选择的 Minecraft 文件夹:" + value.Replace("$", ModBase.exePath));
ModFolder.mcFolderSelected = value.Replace("$", ModBase.exePath);
}
// 游戏内存
public static void LaunchRamType(int type)
{
if (ModMain.frmSetupLaunch is null)
return;
ModMain.frmSetupLaunch.RamType(type);
}
#endregion
#region Tool
public static void ToolDownloadThread(int value)
{
ModNet.NetTaskThreadLimit = value + 1;
}
public static void ToolDownloadSpeed(int value)
{
ModNet.NetTaskSpeedLimitHigh = value switch
{
<= 14 => (long)Math.Round((value + 1) * 0.1d * 1024d * 1024d),
<= 31 => (long)Math.Round((value - 11) * 0.5d * 1024d * 1024d),
<= 41 => (value - 21) * 1024 * 1024L,
_ => -1
};
}
#endregion
#region UI
// 启动器
public static void UiLauncherTransparent(int value)
{
ModMain.frmMain.Opacity = value / 1000d + 0.4d;
}
public static void UiLauncherTheme(int value)
{
ThemeManager.ThemeRefresh(value);
}
public static void UiBackgroundColorful(bool value)
{
ThemeManager.ThemeRefresh();
}
public static void UiLockWindowSize(bool value)
{
if (value)
ModMain.frmMain.RemoveResizer();
else
ModMain.frmMain.AddResizer();
}
// 视频背景
public static void UiAutoPauseVideo(bool value)
{
if (!value)
{
ModVideoBack.ForcePlay = true;
ModVideoBack.VideoPlay();
}
else
{
ModVideoBack.ForcePlay = false;
if (ModVideoBack.IsGaming)
ModVideoBack.VideoPause();
}
}
// 背景图片
public static void UiBackgroundOpacity(int value)
{
ModMain.frmMain.ImgBack.Opacity = value / 1000d;
}
public static void UiBackgroundBlur(int value)
{
ModMain.frmMain.ImgBack.Effect = value == 0 ? null : new BlurEffect { Radius = value + 1 };
ModMain.frmMain.ImgBack.Margin = new Thickness(-(value + 1) / 1.8d);
}
public static void UiBackgroundSuit(int value)
{
if (ModMain.frmMain.ImgBack.Background is null)
return;
var width = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Width;
var height = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Height;
if (value == 0)
{
// 智能:当图片较小时平铺,较大时适应
if (width < ModMain.frmMain.PanMain.ActualWidth / 2d && height < ModMain.frmMain.PanMain.ActualHeight / 2d)
value = 4; // 平铺
else
value = 2; // 适应
}
((ImageBrush)ModMain.frmMain.ImgBack.Background).TileMode = TileMode.None;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Viewport = new Rect(0d, 0d, 1d, 1d);
((ImageBrush)ModMain.frmMain.ImgBack.Background).ViewportUnits = BrushMappingMode.RelativeToBoundingBox;
switch (value)
{
case 1: // 居中
{
ModMain.frmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Center;
ModMain.frmMain.ImgBack.VerticalAlignment = VerticalAlignment.Center;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Stretch = Stretch.None;
ModMain.frmMain.ImgBack.Width = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Width;
ModMain.frmMain.ImgBack.Height = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Height;
break;
}
case 2: // 适应
{
ModMain.frmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Stretch;
ModMain.frmMain.ImgBack.VerticalAlignment = VerticalAlignment.Stretch;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Stretch = Stretch.UniformToFill;
ModMain.frmMain.ImgBack.Width = double.NaN;
ModMain.frmMain.ImgBack.Height = double.NaN;
break;
}
case 3: // 拉伸
{
ModMain.frmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Stretch;
ModMain.frmMain.ImgBack.VerticalAlignment = VerticalAlignment.Stretch;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Stretch = Stretch.Fill;
ModMain.frmMain.ImgBack.Width = double.NaN;
ModMain.frmMain.ImgBack.Height = double.NaN;
break;
}
case 4: // 平铺
{
ModMain.frmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Stretch;
ModMain.frmMain.ImgBack.VerticalAlignment = VerticalAlignment.Stretch;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Stretch = Stretch.None;
((ImageBrush)ModMain.frmMain.ImgBack.Background).TileMode = TileMode.Tile;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Viewport = new Rect(0d, 0d,
((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Width,
((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Height);
((ImageBrush)ModMain.frmMain.ImgBack.Background).ViewportUnits = BrushMappingMode.Absolute;
ModMain.frmMain.ImgBack.Width = double.NaN;
ModMain.frmMain.ImgBack.Height = double.NaN;
break;
}
case 5: // 左上
{
ModMain.frmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Left;
ModMain.frmMain.ImgBack.VerticalAlignment = VerticalAlignment.Top;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Stretch = Stretch.None;
ModMain.frmMain.ImgBack.Width = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Width;
ModMain.frmMain.ImgBack.Height = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Height;
break;
}
case 6: // 右上
{
ModMain.frmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Right;
ModMain.frmMain.ImgBack.VerticalAlignment = VerticalAlignment.Top;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Stretch = Stretch.None;
ModMain.frmMain.ImgBack.Width = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Width;
ModMain.frmMain.ImgBack.Height = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Height;
break;
}
case 7: // 左下
{
ModMain.frmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Left;
ModMain.frmMain.ImgBack.VerticalAlignment = VerticalAlignment.Bottom;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Stretch = Stretch.None;
ModMain.frmMain.ImgBack.Width = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Width;
ModMain.frmMain.ImgBack.Height = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Height;
break;
}
case 8: // 右下
{
ModMain.frmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Right;
ModMain.frmMain.ImgBack.VerticalAlignment = VerticalAlignment.Bottom;
((ImageBrush)ModMain.frmMain.ImgBack.Background).Stretch = Stretch.None;
ModMain.frmMain.ImgBack.Width = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Width;
ModMain.frmMain.ImgBack.Height = ((ImageBrush)ModMain.frmMain.ImgBack.Background).ImageSource.Height;
break;
}
}
}
// 字体
public static void UiFont(string value)
{
try
{
ModBase.SetLaunchFont(value);
}
catch (Exception ex)
{
ModBase.Log(
ex,
"字体加载失败",
ModBase.LogLevel.Hint,
userSummary: Lang.Text("Setup.Error.OperationFailed"));
}
}
// 主页
public static void UiCustomType(int value)
{
if (ModMain.frmSetupUI is null)
return;
switch (value)
{
case 0: // 无
{
ModMain.frmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.HintCustom.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed;
break;
}
case 1: // 本地
{
ModMain.frmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanCustomLocal.Visibility = Visibility.Visible;
ModMain.frmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.HintCustom.Visibility = Visibility.Visible;
ModMain.frmSetupUI.HintCustomWarn.Visibility =
States.Hint.UntrustedHomepage ? Visibility.Collapsed : Visibility.Visible;
ModMain.frmSetupUI.HintCustom.Text =
Lang.Text("Setup.Ui.Homepage.LocalFile.Hint");
CustomEventService.SetEventType(ModMain.frmSetupUI.HintCustom, EventType.None);
break;
}
case 2: // 联网
{
ModMain.frmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanCustomNet.Visibility = Visibility.Visible;
ModMain.frmSetupUI.HintCustom.Visibility = Visibility.Visible;
ModMain.frmSetupUI.HintCustomWarn.Visibility =
States.Hint.UntrustedHomepage ? Visibility.Collapsed : Visibility.Visible;
ModMain.frmSetupUI.HintCustom.Text =
Lang.Text("Setup.Ui.Homepage.NetUpdate.Hint");
CustomEventService.SetEventType(ModMain.frmSetupUI.HintCustom, EventType.OpenUrl);
CustomEventService.SetEventData(ModMain.frmSetupUI.HintCustom,
"https://github.com/PCL-Community/PCL-CE/discussions");
break;
}
case 3: // 预设
{
ModMain.frmSetupUI.PanCustomPreset.Visibility = Visibility.Visible;
ModMain.frmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.HintCustom.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed;
break;
}
}
ModMain.frmSetupUI.CardCustom.TriggerForceResize();
}
// 高级材质
public static void UiBlur(bool value)
{
if (ModMain.frmSetupUI is null)
return;
ModMain.frmSetupUI.PanBlurValue.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
UiBlurValue(value ? Config.Preference.Blur.Radius : 0);
}
public static void UiBlurValue(int value)
{
System.Windows.Application.Current.Resources["BlurRadius"] = value * 1.0d;
}
public static void UiBlurSamplingRate(int value)
{
System.Windows.Application.Current.Resources["BlurSamplingRate"] = value * 0.01d;
}
public static void UiBlurType(int value)
{
System.Windows.Application.Current.Resources["BlurType"] = (KernelType)value;
}
// 顶部栏
public static void UiLogoType(int value)
{
if (ThemeService.CurrentTheme == ColorTheme.HmclBlue) value = 4;
switch (value)
{
case 0: // 无
{
ModMain.frmMain.ShapeTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.BtnTitleHelp.Visibility = Visibility.Collapsed;
ModMain.frmMain.ShapeHMCLTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.LabTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.ImageTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.CELogo.Visibility = Visibility.Collapsed;
if (ModMain.frmSetupUI is not null)
{
ModMain.frmSetupUI.CheckLogoLeft.Visibility = Visibility.Visible;
ModMain.frmSetupUI.PanLogoText.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanLogoChange.Visibility = Visibility.Collapsed;
}
break;
}
case 1: // 默认
{
ModMain.frmMain.ShapeTitleLogo.Visibility = Visibility.Visible;
ModMain.frmMain.BtnTitleHelp.Visibility = Visibility.Collapsed;
ModMain.frmMain.ShapeHMCLTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.LabTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.ImageTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.CELogo.Visibility = Visibility.Visible;
if (ModMain.frmSetupUI is not null)
{
ModMain.frmSetupUI.CheckLogoLeft.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanLogoText.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanLogoChange.Visibility = Visibility.Collapsed;
}
break;
}
case 2: // 文本
{
ModMain.frmMain.ShapeTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.BtnTitleHelp.Visibility = Visibility.Collapsed;
ModMain.frmMain.ShapeHMCLTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.LabTitleLogo.Visibility = Visibility.Visible;
ModMain.frmMain.ImageTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.CELogo.Visibility = Visibility.Visible;
if (ModMain.frmSetupUI is not null)
{
ModMain.frmSetupUI.CheckLogoLeft.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanLogoText.Visibility = Visibility.Visible;
ModMain.frmSetupUI.PanLogoChange.Visibility = Visibility.Collapsed;
}
_ = Config.Preference.WindowTitleCustomText;
break;
}
case 3: // 图片
{
ModMain.frmMain.ShapeTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.BtnTitleHelp.Visibility = Visibility.Collapsed;
ModMain.frmMain.ShapeHMCLTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.LabTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.ImageTitleLogo.Visibility = Visibility.Visible;
ModMain.frmMain.CELogo.Visibility = Visibility.Visible;
if (ModMain.frmSetupUI is not null)
{
ModMain.frmSetupUI.CheckLogoLeft.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanLogoText.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanLogoChange.Visibility = Visibility.Visible;
}
try
{
ModMain.frmMain.ImageTitleLogo.Source = ModBase.exePath + @"PCL\Logo.png";
}
catch (Exception ex)
{
ModMain.frmMain.ImageTitleLogo.Source = null;
ModBase.Log(
ex,
"显示标题栏图片失败",
ModBase.LogLevel.Msgbox,
userSummary: Lang.Text("Setup.Error.OperationFailed"));
}
break;
}
case 4: //HMCL (愚人节)
ModMain.frmMain.ShapeTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.ShapeHMCLTitleLogo.Visibility = Visibility.Visible;
ModMain.frmMain.LabTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.ImageTitleLogo.Visibility = Visibility.Collapsed;
ModMain.frmMain.BtnTitleHelp.Visibility = Visibility.Visible;
if (ModMain.frmSetupUI is not null)
{
ModMain.frmSetupUI.CheckLogoLeft.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanLogoText.Visibility = Visibility.Collapsed;
ModMain.frmSetupUI.PanLogoChange.Visibility = Visibility.Collapsed;
}
break;
}
_ = Config.Preference.TopBarLeftAlign;
if (ModMain.frmSetupUI is not null)
ModMain.frmSetupUI.CardLogo.TriggerForceResize();
}
public static void UiLogoText(string value)
{
ModMain.frmMain.LabTitleLogo.Text = value;
}
public static void UiLogoLeft(bool value)
{
ModMain.frmMain.PanTitleMain.ColumnDefinitions[0].Width = new GridLength(
value && Config.Preference.WindowTitleType == LauncherTitleType.None ? 0 : 1,
GridUnitType.Star);
}
#endregion
#region System
// 调试选项
public static void SystemDebugMode(bool value)
{
ModBase.modeDebug = value;
}
public static void SystemDebugAnim(int value)
{
ModAnimation.aniSpeed = value >= 30
? 200d
: ModBase.MathClamp(value * 0.1d + 0.1d, 0.1d, 3d);
}
public static void SystemHttpProxy(string value)
{
if (value.IsNullOrWhiteSpace()) return;
try
{
HttpProxyManager.Instance.CustomProxyAddress = new Uri(value);
}
catch (Exception ex)
{
ModBase.Log(ex, "HTTP 代理应用出错");
}
}
public static void SystemHttpProxyType(int value)
{
var mode = (HttpProxyManager.ProxyMode)value;
HttpProxyManager.Instance.Mode = Enum.IsDefined(mode)
? mode
: HttpProxyManager.Instance.Mode;
}
public static void SystemHttpProxyCustomUsername(string value)
{
if (!string.IsNullOrEmpty(value))
{
var password = Config.Network.HttpProxy.CustomPassword;
HttpProxyManager.Instance.Credentials = new NetworkCredential(value, password);
}
else
{
HttpProxyManager.Instance.Credentials = null;
}
}
public static void SystemHttpProxyCustomPassword(string value)
{
var username = Config.Network.HttpProxy.CustomUsername;
HttpProxyManager.Instance.Credentials = !string.IsNullOrEmpty(username)
? new NetworkCredential(username, value)
: null;
}
#endregion
#region Version
// 游戏内存
public static void VersionRamType(int type)
{
if (ModMain.frmInstanceSetup is null)
return;
ModMain.frmInstanceSetup.RamType(type);
}
// 服务器
public static void VersionServerLogin(int type)
{
if (ModMain.frmInstanceSetup is null)
return;
// 为第三方登录清空缓存以更新描述
ModBase.WriteIni(ModFolder.mcFolderSelected + "PCL.ini", "InstanceCache", "");
if (PageInstanceLeft.McInstance is null)
return;
PageInstanceLeft.McInstance = new McInstance(PageInstanceLeft.McInstance.Name).Load();
ModLoader.LoaderFolderRun(ModInstanceList.mcInstanceListLoader, ModFolder.mcFolderSelected,
ModLoader.LoaderFolderRunType.ForceRun, 1, @"versions\");
}
#endregion
}