2.12.4
This commit is contained in:
@@ -1,767 +0,0 @@
|
||||
Public Class ModSetup
|
||||
Private Const VersionSetup As Integer = 1
|
||||
|
||||
''' <summary>
|
||||
''' 设置列表。
|
||||
''' </summary>
|
||||
Private ReadOnly SetupDict As New Dictionary(Of String, SetupEntry) From {
|
||||
{"Identify", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"WindowHeight", New SetupEntry(550)},
|
||||
{"WindowWidth", New SetupEntry(900)},
|
||||
{"HintDownloadThread", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintNotice", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"HintDownload", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"HintHide", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintHandInstall", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintBuy", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintClearRubbish", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"HintUpdateMod", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintCustomCommand", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintCustomWarn", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintMoreAdvancedSetup", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintIndieSetup", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintExportConfig", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"SystemEula", New SetupEntry(False, Source:=SetupSource.Registry)}, '仅老版本兼容,现已换用 SystemEulaVersion
|
||||
{"SystemEulaVersion", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"SystemCount", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"SystemLaunchCount", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"SystemLastVersionReg", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"SystemHighestSavedBetaVersionReg", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"SystemHighestBetaVersionReg", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"SystemHighestAlphaVersionReg", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"SystemSetupVersionReg", New SetupEntry(VersionSetup, Source:=SetupSource.Registry)},
|
||||
{"SystemSetupVersionIni", New SetupEntry(VersionSetup)},
|
||||
{"SystemHelpVersion", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"SystemDebugMode", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"SystemDebugAnim", New SetupEntry(9, Source:=SetupSource.Registry)},
|
||||
{"SystemDebugDelay", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"SystemDebugSkipCopy", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"SystemSystemCache", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"SystemSystemUpdate", New SetupEntry(0)},
|
||||
{"SystemSystemActivity", New SetupEntry(0)},
|
||||
{"SystemSystemTelemetry", New SetupEntry(True, Source:=SetupSource.Registry)},
|
||||
{"CacheDrops", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"CacheConfig", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"CacheExportConfig", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"CacheSavedPageUrl", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"CacheSavedPageVersion", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"CacheMsOAuthRefresh", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheMsAccess", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheMsProfileJson", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheMsUuid", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheMsName", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheMsV2Migrated", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"CacheMsV2OAuthRefresh", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheMsV2Access", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheMsV2ProfileJson", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheMsV2Uuid", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheMsV2Name", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheNideAccess", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheNideClient", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheNideUuid", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheNideName", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheNideUsername", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheNidePass", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheNideServer", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheAuthAccess", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheAuthClient", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheAuthUuid", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheAuthName", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheAuthUsername", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheAuthPass", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheAuthServerServer", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheAuthServerName", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheAuthServerRegister", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"CacheDownloadFolder", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"CacheJavaListVersion", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"LoginRemember", New SetupEntry(True, Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"LoginLegacyName", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"LoginMsJson", New SetupEntry("{}", Source:=SetupSource.Registry, Encoded:=True)}, '{UserName: OAuthToken, ...}
|
||||
{"LoginNideEmail", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"LoginNidePass", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"LoginAuthEmail", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"LoginAuthPass", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"LoginType", New SetupEntry(McLoginType.Legacy, Source:=SetupSource.Registry)},
|
||||
{"LoginPageType", New SetupEntry(0)},
|
||||
{"LaunchSkinID", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"LaunchSkinType", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"LaunchSkinSlim", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"LaunchVersionSelect", New SetupEntry("")},
|
||||
{"LaunchFolderSelect", New SetupEntry("")},
|
||||
{"LaunchFolders", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"LaunchArgumentTitle", New SetupEntry("")},
|
||||
{"LaunchArgumentInfo", New SetupEntry("PCL")},
|
||||
{"LaunchArgumentJavaSelect", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"LaunchArgumentJavaAll", New SetupEntry("[]", Source:=SetupSource.Registry)},
|
||||
{"LaunchArgumentIndie", New SetupEntry(0)},
|
||||
{"LaunchArgumentIndieV2", New SetupEntry(4)},
|
||||
{"LaunchArgumentVisible", New SetupEntry(5, Source:=SetupSource.Registry)},
|
||||
{"LaunchArgumentPriority", New SetupEntry(1, Source:=SetupSource.Registry)},
|
||||
{"LaunchArgumentWindowWidth", New SetupEntry(854)},
|
||||
{"LaunchArgumentWindowHeight", New SetupEntry(480)},
|
||||
{"LaunchArgumentWindowType", New SetupEntry(1)},
|
||||
{"LaunchArgumentRam", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"LaunchAdvanceJvm", New SetupEntry("-XX:-OmitStackTraceInFastThrow -Djdk.lang.Process.allowAmbiguousCommands=true -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true")},
|
||||
{"LaunchAdvanceGame", New SetupEntry("")},
|
||||
{"LaunchAdvanceRun", New SetupEntry("")},
|
||||
{"LaunchAdvanceRunWait", New SetupEntry(True)},
|
||||
{"LaunchAdvanceDisableJLW", New SetupEntry(False)},
|
||||
{"LaunchAdvanceGraphicCard", New SetupEntry(True, Source:=SetupSource.Registry)},
|
||||
{"LaunchAdvanceGC", New SetupEntry(1)},
|
||||
{"LaunchRamType", New SetupEntry(0)},
|
||||
{"LaunchRamCustom", New SetupEntry(15)},
|
||||
{"LinkLastAutoJoinInviteCode", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"LinkLatencyMode", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"LinkCustomPeer", New SetupEntry("")},
|
||||
{"LinkEasyTierVersion", New SetupEntry(-1, Source:=SetupSource.Registry)},
|
||||
{"ToolHelpChinese", New SetupEntry(True, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadThread", New SetupEntry(63, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadSpeed", New SetupEntry(42, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadSource", New SetupEntry(1, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadVersion", New SetupEntry(1, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadTranslate", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadTranslateV2", New SetupEntry(1, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadIgnoreQuilt", New SetupEntry(True, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadCert", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadMod", New SetupEntry(2, Source:=SetupSource.Registry)},
|
||||
{"ToolModLocalNameStyle", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"ToolUpdateAlpha", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"ToolUpdateRelease", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"ToolUpdateSnapshot", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"ToolUpdateReleaseLast", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"ToolUpdateSnapshotLast", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"UiLauncherTransparent", New SetupEntry(600)}, '避免与 PCL1 设置冲突(UiLauncherOpacity)
|
||||
{"UiLauncherHue", New SetupEntry(180)},
|
||||
{"UiLauncherSat", New SetupEntry(80)},
|
||||
{"UiLauncherDelta", New SetupEntry(90)},
|
||||
{"UiLauncherLight", New SetupEntry(20)},
|
||||
{"UiLauncherTheme", New SetupEntry(0)},
|
||||
{"UiLauncherThemeGold", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"UiLauncherThemeHide", New SetupEntry("0|1|2|3|4", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"UiLauncherThemeHide2", New SetupEntry("0|1|2|3|4", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"UiLauncherLogo", New SetupEntry(True)},
|
||||
{"UiLauncherEmail", New SetupEntry(False)},
|
||||
{"UiBackgroundColorful", New SetupEntry(True)},
|
||||
{"UiBackgroundOpacity", New SetupEntry(1000)},
|
||||
{"UiBackgroundBlur", New SetupEntry(0)},
|
||||
{"UiBackgroundSuit", New SetupEntry(0)},
|
||||
{"UiCustomType", New SetupEntry(0)},
|
||||
{"UiCustomPreset", New SetupEntry(0)},
|
||||
{"UiCustomNet", New SetupEntry("")},
|
||||
{"UiLogoType", New SetupEntry(1)},
|
||||
{"UiLogoText", New SetupEntry("")},
|
||||
{"UiLogoLeft", New SetupEntry(False)},
|
||||
{"UiMusicVolume", New SetupEntry(500)},
|
||||
{"UiMusicStop", New SetupEntry(False)},
|
||||
{"UiMusicStart", New SetupEntry(False)},
|
||||
{"UiMusicRandom", New SetupEntry(True)},
|
||||
{"UiMusicAuto", New SetupEntry(True)},
|
||||
{"UiHiddenPageDownload", New SetupEntry(False)},
|
||||
{"UiHiddenPageLink", New SetupEntry(False)},
|
||||
{"UiHiddenPageSetup", New SetupEntry(False)},
|
||||
{"UiHiddenPageOther", New SetupEntry(False)},
|
||||
{"UiHiddenFunctionSelect", New SetupEntry(False)},
|
||||
{"UiHiddenFunctionModUpdate", New SetupEntry(False)},
|
||||
{"UiHiddenFunctionHidden", New SetupEntry(False)},
|
||||
{"UiHiddenSetupLaunch", New SetupEntry(False)},
|
||||
{"UiHiddenSetupUi", New SetupEntry(False)},
|
||||
{"UiHiddenSetupLink", New SetupEntry(False)},
|
||||
{"UiHiddenSetupSystem", New SetupEntry(False)},
|
||||
{"UiHiddenOtherHelp", New SetupEntry(False)},
|
||||
{"UiHiddenOtherFeedback", New SetupEntry(False)},
|
||||
{"UiHiddenOtherVote", New SetupEntry(False)},
|
||||
{"UiHiddenOtherAbout", New SetupEntry(False)},
|
||||
{"UiHiddenOtherTest", New SetupEntry(False)},
|
||||
{"VersionAdvanceJvm", New SetupEntry("", Source:=SetupSource.Instance)},
|
||||
{"VersionAdvanceGame", New SetupEntry("", Source:=SetupSource.Instance)},
|
||||
{"VersionAdvanceAssets", New SetupEntry(0, Source:=SetupSource.Instance)},
|
||||
{"VersionAdvanceAssetsV2", New SetupEntry(False, Source:=SetupSource.Instance)},
|
||||
{"VersionAdvanceJava", New SetupEntry(False, Source:=SetupSource.Instance)},
|
||||
{"VersionAdvanceRun", New SetupEntry("", Source:=SetupSource.Instance)},
|
||||
{"VersionAdvanceRunWait", New SetupEntry(True, Source:=SetupSource.Instance)},
|
||||
{"VersionAdvanceDisableJLW", New SetupEntry(False, Source:=SetupSource.Instance)},
|
||||
{"VersionAdvanceDisableModUpdate", New SetupEntry(False, Source:=SetupSource.Instance)},
|
||||
{"VersionAdvanceGC", New SetupEntry(0, Source:=SetupSource.Instance)},
|
||||
{"VersionRamType", New SetupEntry(2, Source:=SetupSource.Instance)},
|
||||
{"VersionRamCustom", New SetupEntry(15, Source:=SetupSource.Instance)},
|
||||
{"VersionRamOptimize", New SetupEntry(0, Source:=SetupSource.Instance)},
|
||||
{"VersionArgumentTitle", New SetupEntry("", Source:=SetupSource.Instance)},
|
||||
{"VersionArgumentInfo", New SetupEntry("", Source:=SetupSource.Instance)},
|
||||
{"VersionArgumentIndie", New SetupEntry(-1, Source:=SetupSource.Instance)},
|
||||
{"VersionArgumentIndieV2", New SetupEntry(False, Source:=SetupSource.Instance)},
|
||||
{"VersionArgumentJavaSelect", New SetupEntry("使用全局设置", Source:=SetupSource.Instance)},
|
||||
{"VersionServerEnter", New SetupEntry("", Source:=SetupSource.Instance)},
|
||||
{"VersionServerLogin", New SetupEntry(0, Source:=SetupSource.Instance)},
|
||||
{"VersionServerNide", New SetupEntry("", Source:=SetupSource.Instance)},
|
||||
{"VersionServerAuthRegister", New SetupEntry("", Source:=SetupSource.Instance)},
|
||||
{"VersionServerAuthName", New SetupEntry("", Source:=SetupSource.Instance)},
|
||||
{"VersionServerAuthServer", New SetupEntry("", Source:=SetupSource.Instance)}
|
||||
}
|
||||
|
||||
#Region "基础"
|
||||
|
||||
Private Enum SetupSource
|
||||
Normal
|
||||
Registry
|
||||
Instance
|
||||
End Enum
|
||||
Private Class SetupEntry
|
||||
|
||||
Public Encoded As Boolean
|
||||
Public DefaultValue
|
||||
Public DefaultValueEncoded
|
||||
Public Value
|
||||
Public Source As SetupSource
|
||||
|
||||
''' <summary>
|
||||
''' 加载状态:0/未读取 1/已读取未处理 2/已处理
|
||||
''' 我也不知道当年写这坨的时候为啥没用 Enum……
|
||||
''' </summary>
|
||||
Public State As Byte = 0
|
||||
Public Type As Type
|
||||
|
||||
Public Sub New(Value, Optional Source = SetupSource.Normal, Optional Encoded = False)
|
||||
Try
|
||||
Me.DefaultValue = Value
|
||||
Me.Encoded = Encoded
|
||||
Me.Value = Value
|
||||
Me.Source = Source
|
||||
Me.Type = If(Value, New Object).GetType
|
||||
Me.DefaultValueEncoded = If(Encoded, SecretEncrypt(Value, "PCL" & Identify), Value)
|
||||
Catch ex As Exception
|
||||
Log(ex, "初始化 SetupEntry 失败", LogLevel.Feedback) '#5095 的 fallback
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
|
||||
''' <summary>
|
||||
''' 改变某个设置项的值。
|
||||
''' </summary>
|
||||
Public Sub [Set](Key As String, Value As Object, Optional ForceReload As Boolean = False, Optional Instance As McInstance = Nothing)
|
||||
[Set](Key, Value, SetupDict(Key), ForceReload, Instance)
|
||||
End Sub
|
||||
''' <summary>
|
||||
''' 写入某个未经加密的设置项。
|
||||
''' 若该设置项经过了加密,则会抛出异常。
|
||||
''' </summary>
|
||||
Public Sub SetSafe(Key As String, Value As Object, Optional ForceReload As Boolean = False, Optional Instance As McInstance = Nothing)
|
||||
If SetupDict(Key).Encoded Then Throw New InvalidOperationException("禁止写入加密设置项:" & Key)
|
||||
[Set](Key, Instance, ForceReload, Instance)
|
||||
End Sub
|
||||
Private Sub [Set](Key As String, Value As Object, E As SetupEntry, ForceReload As Boolean, Instance As McInstance)
|
||||
Try
|
||||
|
||||
Value = CTypeDynamic(Value, E.Type)
|
||||
If E.State = 2 Then
|
||||
'如果已应用,且值相同,则无需再次更改
|
||||
If E.Value = Value AndAlso Not ForceReload Then Return
|
||||
Else
|
||||
'如果未应用,则直接更改并应用
|
||||
If E.Source <> SetupSource.Instance Then E.State = 2
|
||||
End If
|
||||
'设置新值
|
||||
E.Value = Value
|
||||
'写入值
|
||||
If E.Encoded Then
|
||||
Try
|
||||
If Value Is Nothing Then Value = ""
|
||||
Value = SecretEncrypt(Value, "PCL" & Identify)
|
||||
Catch ex As Exception
|
||||
Log(ex, "加密设置失败:" & Key, LogLevel.Developer)
|
||||
End Try
|
||||
End If
|
||||
Select Case E.Source
|
||||
Case SetupSource.Normal
|
||||
WriteIni("Setup", Key, Value)
|
||||
Case SetupSource.Registry
|
||||
WriteReg(Key, Value)
|
||||
Case SetupSource.Instance
|
||||
If Instance Is Nothing Then Throw New Exception($"更改版本设置 {Key} 时未提供目标版本")
|
||||
WriteIni(Instance.PathVersion & "PCL\Setup.ini", Key, Value)
|
||||
End Select
|
||||
'应用
|
||||
'例如 VersionServerLogin 要求在设置之后再引发事件
|
||||
Dim Method As Reflection.MethodInfo = GetType(ModSetup).GetMethod(Key)
|
||||
If Method IsNot Nothing Then Method.Invoke(Me, {Value})
|
||||
|
||||
Catch ex As Exception
|
||||
Log(ex, "设置设置项时出错(" & Key & ", " & Value & ")", LogLevel.Feedback)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' 应用某个设置项的值。
|
||||
''' </summary>
|
||||
Public Function Load(Key As String, Optional ForceReload As Boolean = False, Optional Instance As McInstance = Nothing)
|
||||
Return Load(Key, SetupDict(Key), ForceReload, Instance)
|
||||
End Function
|
||||
Private Function Load(Key As String, E As SetupEntry, ForceReload As Boolean, Instance As McInstance)
|
||||
'如果已经应用过,则什么也不干
|
||||
If E.State = 2 AndAlso Not ForceReload Then Return E.Value
|
||||
'读取,应用并设置状态
|
||||
Read(Key, E, Instance)
|
||||
If E.Source <> SetupSource.Instance Then E.State = 2
|
||||
Dim Method As Reflection.MethodInfo = GetType(ModSetup).GetMethod(Key)
|
||||
If Method IsNot Nothing Then Method.Invoke(Me, {E.Value})
|
||||
Return E.Value
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' 获取某个设置项的值。
|
||||
''' </summary>
|
||||
Public Function [Get](Key As String, Optional Instance As McInstance = Nothing)
|
||||
If Not SetupDict.ContainsKey(Key) Then Throw New KeyNotFoundException("未找到设置项:" & Key)
|
||||
Return [Get](Key, SetupDict(Key), Instance)
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 获取某个未经加密的设置项的值。
|
||||
''' 若该设置项经过了加密,则会抛出异常。
|
||||
''' </summary>
|
||||
Public Function GetSafe(Key As String, Optional Instance As McInstance = Nothing)
|
||||
If SetupDict(Key).Encoded Then Throw New InvalidOperationException("禁止读取加密设置项:" & Key)
|
||||
Return [Get](Key, Instance)
|
||||
End Function
|
||||
Private Function [Get](Key As String, E As SetupEntry, Instance As McInstance)
|
||||
'获取强制值
|
||||
Dim Force As String = ForceValue(Key)
|
||||
If Force IsNot Nothing Then
|
||||
E.Value = CTypeDynamic(Force, E.Type)
|
||||
E.State = 1
|
||||
End If
|
||||
'如果尚未读取过,则读取
|
||||
If E.State = 0 Then
|
||||
Read(Key, E, Instance)
|
||||
If E.Source <> SetupSource.Instance Then E.State = 1
|
||||
End If
|
||||
'返回现在的值
|
||||
Return E.Value
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' 初始化某个设置项的值。
|
||||
''' </summary>
|
||||
Public Sub Reset(Key As String, Optional ForceReload As Boolean = False, Optional Instance As McInstance = Nothing)
|
||||
Dim E As SetupEntry = SetupDict(Key)
|
||||
[Set](Key, E.DefaultValue, E, ForceReload, Instance)
|
||||
Select Case SetupDict(Key).Source
|
||||
Case SetupSource.Normal
|
||||
DeleteIniKey("Setup", Key)
|
||||
Case SetupSource.Registry
|
||||
DeleteReg(Key)
|
||||
Case Else 'SetupSource.Instance
|
||||
If Instance Is Nothing Then Throw New Exception($"重置版本设置 {Key} 时未提供目标版本")
|
||||
DeleteIniKey(Instance.PathVersion & "PCL\Setup.ini", Key)
|
||||
End Select
|
||||
End Sub
|
||||
''' <summary>
|
||||
''' 获取某个设置项的默认值。
|
||||
''' </summary>
|
||||
Public Function GetDefault(Key As String) As String
|
||||
Return SetupDict(Key).DefaultValue
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 某个设置项是否从未被设置过。
|
||||
''' </summary>
|
||||
Public Function IsUnset(Key As String, Optional Instance As McInstance = Nothing) As Boolean
|
||||
Select Case SetupDict(Key).Source
|
||||
Case SetupSource.Normal
|
||||
Return Not HasIniKey("Setup", Key)
|
||||
Case SetupSource.Registry
|
||||
Return Not HasReg(Key)
|
||||
Case Else 'SetupSource.Instance
|
||||
If Instance Is Nothing Then Throw New Exception($"判断版本设置 {Key} 是否存在时未提供目标版本")
|
||||
Return Not HasIniKey(Instance.PathVersion & "PCL\Setup.ini", Key)
|
||||
End Select
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' 读取设置。
|
||||
''' </summary>
|
||||
Private Sub Read(Key As String, ByRef E As SetupEntry, Instance As McInstance)
|
||||
Try
|
||||
If Not E.State = 0 Then Return
|
||||
Dim SourceValue As String = Nothing '先用 String 储存,避免类型转换
|
||||
Select Case E.Source
|
||||
Case SetupSource.Normal
|
||||
SourceValue = ReadIni("Setup", Key, E.DefaultValueEncoded)
|
||||
Case SetupSource.Registry
|
||||
SourceValue = ReadReg(Key, E.DefaultValueEncoded)
|
||||
Case SetupSource.Instance
|
||||
If Instance Is Nothing Then
|
||||
Throw New Exception("读取版本设置 " & Key & " 时未提供目标版本")
|
||||
Else
|
||||
SourceValue = ReadIni(Instance.PathVersion & "PCL\Setup.ini", Key, E.DefaultValueEncoded)
|
||||
End If
|
||||
End Select
|
||||
If E.Encoded Then
|
||||
If SourceValue.Equals(E.DefaultValueEncoded) Then
|
||||
SourceValue = E.DefaultValue
|
||||
Else
|
||||
Try
|
||||
SourceValue = SecretDecrypt(SourceValue, "PCL" & Identify)
|
||||
Catch ex As Exception
|
||||
Log(ex, "解密设置失败:" & Key, LogLevel.Developer)
|
||||
SourceValue = E.DefaultValue
|
||||
Setup.Set(Key, E.DefaultValue, True)
|
||||
End Try
|
||||
End If
|
||||
End If
|
||||
E.Value = CTypeDynamic(SourceValue, E.Type)
|
||||
Catch ex As Exception
|
||||
Log(ex, "读取设置失败:" & Key, LogLevel.Hint)
|
||||
E.Value = CTypeDynamic(E.DefaultValue, E.Type)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
'对部分设置强制赋值
|
||||
Private Function ForceValue(Key As String) As String
|
||||
#If BETA Then
|
||||
If Key = "UiLauncherTheme" Then Return "0"
|
||||
#End If
|
||||
If Key = "UiHiddenPageLink" Then Return True
|
||||
If Key = "UiHiddenSetupLink" Then Return True
|
||||
Return Nothing
|
||||
End Function
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "Launch"
|
||||
|
||||
'切换选择
|
||||
Public Sub LaunchVersionSelect(Value As String)
|
||||
Log("[Setup] 当前选择的 Minecraft 版本:" & Value)
|
||||
WriteIni(McFolderSelected & "PCL.ini", "Version", If(IsNothing(McInstanceSelected), "", McInstanceSelected.Name))
|
||||
End Sub
|
||||
Public Sub LaunchFolderSelect(Value As String)
|
||||
Log("[Setup] 当前选择的 Minecraft 文件夹:" & Value.ToString.Replace("$", Path))
|
||||
McFolderSelected = Value.ToString.Replace("$", Path)
|
||||
End Sub
|
||||
|
||||
'游戏内存
|
||||
Public Sub LaunchRamType(Type As Integer)
|
||||
If FrmSetupLaunch Is Nothing Then Return
|
||||
FrmSetupLaunch.RamType(Type)
|
||||
End Sub
|
||||
|
||||
'离线皮肤
|
||||
Public Sub LaunchSkinType(Value As Integer)
|
||||
RunInUi(Sub()
|
||||
If Not IsNothing(FrmSetupLaunch) Then
|
||||
Select Case Value
|
||||
Case 0, 1, 2 '默认
|
||||
FrmSetupLaunch.PanSkinID.Visibility = Visibility.Collapsed
|
||||
FrmSetupLaunch.PanSkinChange.Visibility = Visibility.Collapsed
|
||||
Case 3 '正版
|
||||
FrmSetupLaunch.PanSkinID.Visibility = Visibility.Visible
|
||||
FrmSetupLaunch.PanSkinChange.Visibility = Visibility.Collapsed
|
||||
Case 4 '自定义
|
||||
FrmSetupLaunch.PanSkinID.Visibility = Visibility.Collapsed
|
||||
FrmSetupLaunch.PanSkinChange.Visibility = Visibility.Visible
|
||||
End Select
|
||||
FrmSetupLaunch.CardSkin.TriggerForceResize()
|
||||
End If
|
||||
PageLaunchLeft.SkinLegacy.Start()
|
||||
End Sub)
|
||||
End Sub
|
||||
Public Sub LaunchSkinID(Value As String)
|
||||
PageLaunchLeft.SkinLegacy.Start()
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "Tool"
|
||||
|
||||
Public Sub ToolDownloadThread(Value As Integer)
|
||||
NetTaskThreadLimit = Value + 1
|
||||
End Sub
|
||||
Public Sub ToolDownloadCert(Value As Boolean)
|
||||
ServicePointManager.ServerCertificateValidationCallback =
|
||||
Function(Sender, Certificate, Chain, Failure)
|
||||
Dim Request As HttpWebRequest = TryCast(Sender, HttpWebRequest)
|
||||
If Failure = Net.Security.SslPolicyErrors.None Then Return True '已通过验证
|
||||
'基于 #3018 和 #5879,只在访问正版登录 API 时跳过证书验证
|
||||
Log($"[System] 未通过 SSL 证书验证({Failure}),提供的证书为 {Certificate?.Subject},URL:{Request?.Address}", LogLevel.Debug)
|
||||
If Request Is Nothing Then
|
||||
Return Not Value
|
||||
ElseIf Request.Address.Host.Contains("xboxlive") OrElse Request.Address.Host.Contains("minecraftservices") Then
|
||||
Return Not Value '根据设置决定是否忽略错误
|
||||
Else
|
||||
Return False
|
||||
End If
|
||||
End Function
|
||||
End Sub
|
||||
Public Sub ToolDownloadSpeed(Value As Integer)
|
||||
If Value <= 14 Then
|
||||
NetTaskSpeedLimitHigh = (Value + 1) * 0.1 * 1024 * 1024L
|
||||
ElseIf Value <= 31 Then
|
||||
NetTaskSpeedLimitHigh = (Value - 11) * 0.5 * 1024 * 1024L
|
||||
ElseIf Value <= 41 Then
|
||||
NetTaskSpeedLimitHigh = (Value - 21) * 1024 * 1024L
|
||||
Else
|
||||
NetTaskSpeedLimitHigh = -1
|
||||
End If
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "UI"
|
||||
|
||||
'启动器
|
||||
Public Sub UiLauncherTransparent(Value As Integer)
|
||||
FrmMain.Opacity = Value / 1000 + 0.4
|
||||
End Sub
|
||||
Public Sub UiLauncherTheme(Value As Integer)
|
||||
ThemeRefresh(Value)
|
||||
End Sub
|
||||
Public Sub UiBackgroundColorful(Value As Boolean)
|
||||
ThemeRefresh()
|
||||
End Sub
|
||||
|
||||
'背景图片
|
||||
Public Sub UiBackgroundOpacity(Value As Integer)
|
||||
FrmMain.ImgBack.Opacity = Value / 1000
|
||||
End Sub
|
||||
Public Sub UiBackgroundBlur(Value As Integer)
|
||||
If Value = 0 Then
|
||||
FrmMain.ImgBack.Effect = Nothing
|
||||
Else
|
||||
FrmMain.ImgBack.Effect = New Effects.BlurEffect With {.Radius = Value + 1}
|
||||
End If
|
||||
FrmMain.ImgBack.Margin = New Thickness(-(Value + 1) / 1.8)
|
||||
End Sub
|
||||
Public Sub UiBackgroundSuit(Value As Integer)
|
||||
If FrmMain.ImgBack.Background Is Nothing Then Return
|
||||
Dim Brush As ImageBrush = CType(FrmMain.ImgBack.Background, ImageBrush)
|
||||
If Value = 0 Then
|
||||
'智能:当图片较小时平铺,较大时适应
|
||||
If Brush.ImageSource.Width < FrmMain.PanMain.ActualWidth / 2 AndAlso Brush.ImageSource.Height < FrmMain.PanMain.ActualHeight / 2 Then
|
||||
Value = 4 '平铺
|
||||
Else
|
||||
Value = 2 '适应
|
||||
End If
|
||||
End If
|
||||
Brush.Stretch = Stretch.UniformToFill
|
||||
Brush.TileMode = TileMode.None
|
||||
Brush.Viewport = New Rect(0, 0, 1, 1)
|
||||
Brush.ViewportUnits = BrushMappingMode.RelativeToBoundingBox
|
||||
Select Case Value
|
||||
Case 2 '适应
|
||||
Case 3 '拉伸
|
||||
Brush.Stretch = Stretch.Fill
|
||||
Case 4 '平铺
|
||||
Brush.Stretch = Stretch.None
|
||||
Brush.TileMode = TileMode.Tile
|
||||
Brush.Viewport = New Rect(0, 0, Brush.ImageSource.Width, Brush.ImageSource.Height)
|
||||
Brush.ViewportUnits = BrushMappingMode.Absolute
|
||||
|
||||
Case 1 '中
|
||||
Brush.AlignmentX = AlignmentX.Center
|
||||
Brush.AlignmentY = AlignmentY.Center
|
||||
Case 5 '左上
|
||||
Brush.AlignmentX = AlignmentX.Left
|
||||
Brush.AlignmentY = AlignmentY.Top
|
||||
Case 6 '右上
|
||||
Brush.AlignmentX = AlignmentX.Right
|
||||
Brush.AlignmentY = AlignmentY.Top
|
||||
Case 7 '左下
|
||||
Brush.AlignmentX = AlignmentX.Left
|
||||
Brush.AlignmentY = AlignmentY.Bottom
|
||||
Case 8 '右下
|
||||
Brush.AlignmentX = AlignmentX.Right
|
||||
Brush.AlignmentY = AlignmentY.Bottom
|
||||
Case 9 '左
|
||||
Brush.AlignmentX = AlignmentX.Left
|
||||
Brush.AlignmentY = AlignmentY.Center
|
||||
Case 10 '右
|
||||
Brush.AlignmentX = AlignmentX.Right
|
||||
Brush.AlignmentY = AlignmentY.Center
|
||||
Case 11 '上
|
||||
Brush.AlignmentX = AlignmentX.Center
|
||||
Brush.AlignmentY = AlignmentY.Top
|
||||
Case 12 '下
|
||||
Brush.AlignmentX = AlignmentX.Center
|
||||
Brush.AlignmentY = AlignmentY.Bottom
|
||||
End Select
|
||||
End Sub
|
||||
|
||||
'主页
|
||||
Public Sub UiCustomType(Value As Integer)
|
||||
If FrmSetupUI Is Nothing Then Return
|
||||
Select Case Value
|
||||
Case 0 '无
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
|
||||
Case 1 '本地
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Visible
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustomWarn.Visibility = If(Setup.Get("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.HintCustom.Text = $"从 PCL 文件夹下的 Custom.xaml 读取主页内容。{vbCrLf}你可以手动编辑该文件,向主页添加文本、图片、常用网站、快捷启动等功能。"
|
||||
CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.None)
|
||||
Case 2 '联网
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustomWarn.Visibility = If(Setup.Get("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.HintCustom.Text = $"从指定网址联网获取主页内容。服主也可以用于动态更新服务器公告。{vbCrLf}如果你制作了稳定运行的联网主页,可以点击这条提示投稿,若合格即可加入预设!"
|
||||
CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.打开网页)
|
||||
CustomEventService.SetEventData(FrmSetupUI.HintCustom, "https://github.com/Meloong-Git/PCL/discussions/2528")
|
||||
Case 3 '预设
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Visible
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
|
||||
End Select
|
||||
FrmSetupUI.CardCustom.TriggerForceResize()
|
||||
End Sub
|
||||
|
||||
'顶部栏
|
||||
Public Sub UiLogoType(Value As Integer)
|
||||
Select Case Value
|
||||
Case 0 '无
|
||||
FrmMain.ShapeTitleLogo.Visibility = Visibility.Collapsed
|
||||
FrmMain.LabTitleLogo.Visibility = Visibility.Collapsed
|
||||
FrmMain.ImageTitleLogo.Visibility = Visibility.Collapsed
|
||||
If Not IsNothing(FrmSetupUI) Then
|
||||
FrmSetupUI.CheckLogoLeft.Visibility = Visibility.Visible
|
||||
FrmSetupUI.PanLogoText.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanLogoChange.Visibility = Visibility.Collapsed
|
||||
End If
|
||||
Case 1 '默认
|
||||
FrmMain.ShapeTitleLogo.Visibility = Visibility.Visible
|
||||
FrmMain.LabTitleLogo.Visibility = Visibility.Collapsed
|
||||
FrmMain.ImageTitleLogo.Visibility = Visibility.Collapsed
|
||||
If Not IsNothing(FrmSetupUI) Then
|
||||
FrmSetupUI.CheckLogoLeft.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanLogoText.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanLogoChange.Visibility = Visibility.Collapsed
|
||||
End If
|
||||
Case 2 '文本
|
||||
FrmMain.ShapeTitleLogo.Visibility = Visibility.Collapsed
|
||||
FrmMain.LabTitleLogo.Visibility = Visibility.Visible
|
||||
FrmMain.ImageTitleLogo.Visibility = Visibility.Collapsed
|
||||
If Not IsNothing(FrmSetupUI) Then
|
||||
FrmSetupUI.CheckLogoLeft.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanLogoText.Visibility = Visibility.Visible
|
||||
FrmSetupUI.PanLogoChange.Visibility = Visibility.Collapsed
|
||||
End If
|
||||
Setup.Load("UiLogoText", True)
|
||||
Case 3 '图片
|
||||
FrmMain.ShapeTitleLogo.Visibility = Visibility.Collapsed
|
||||
FrmMain.LabTitleLogo.Visibility = Visibility.Collapsed
|
||||
FrmMain.ImageTitleLogo.Visibility = Visibility.Visible
|
||||
If Not IsNothing(FrmSetupUI) Then
|
||||
FrmSetupUI.CheckLogoLeft.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanLogoText.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanLogoChange.Visibility = Visibility.Visible
|
||||
End If
|
||||
Try
|
||||
FrmMain.ImageTitleLogo.Source = Path & "PCL\Logo.png"
|
||||
Catch ex As Exception
|
||||
FrmMain.ImageTitleLogo.Source = Nothing
|
||||
Log(ex, "显示标题栏图片失败", LogLevel.Msgbox)
|
||||
End Try
|
||||
End Select
|
||||
Setup.Load("UiLogoLeft", True)
|
||||
If Not IsNothing(FrmSetupUI) Then FrmSetupUI.CardLogo.TriggerForceResize()
|
||||
End Sub
|
||||
Public Sub UiLogoText(Value As String)
|
||||
FrmMain.LabTitleLogo.Text = Value
|
||||
End Sub
|
||||
Public Sub UiLogoLeft(Value As Boolean)
|
||||
FrmMain.PanTitleMain.ColumnDefinitions(0).Width = New GridLength(If(Value AndAlso (Setup.Get("UiLogoType") = 0), 0, 1), GridUnitType.Star)
|
||||
End Sub
|
||||
|
||||
'功能隐藏
|
||||
Public Sub UiHiddenPageLink(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenPageDownload(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenPageSetup(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenPageOther(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenFunctionSelect(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenFunctionModUpdate(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenFunctionHidden(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenSetupLaunch(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenSetupUi(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenSetupLink(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenSetupSystem(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenOtherHelp(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenOtherFeedback(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenOtherVote(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenOtherAbout(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
Public Sub UiHiddenOtherTest(Value As Boolean)
|
||||
PageSetupUI.HiddenRefresh()
|
||||
End Sub
|
||||
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "System"
|
||||
|
||||
'调试选项
|
||||
Public Sub SystemDebugMode(Value As Boolean)
|
||||
ModeDebug = Value
|
||||
End Sub
|
||||
Public Sub SystemDebugAnim(Value As Integer)
|
||||
AniSpeed = If(Value >= 30, 200, MathClamp(Value * 0.1 + 0.1, 0.1, 3))
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "Version"
|
||||
|
||||
'游戏内存
|
||||
Public Sub VersionRamType(Type As Integer)
|
||||
If FrmInstanceSetup Is Nothing Then Return
|
||||
FrmInstanceSetup.RamType(Type)
|
||||
End Sub
|
||||
|
||||
'服务器
|
||||
Public Sub VersionServerLogin(Type As Integer)
|
||||
If FrmInstanceSetup Is Nothing Then Return
|
||||
'为第三方登录清空缓存以更新描述
|
||||
WriteIni(McFolderSelected & "PCL.ini", "InstanceCache", "")
|
||||
If PageInstanceLeft.Instance Is Nothing Then Return
|
||||
PageInstanceLeft.Instance = New McInstance(PageInstanceLeft.Instance.Name).Load()
|
||||
LoaderFolderRun(McInstanceListLoader, McFolderSelected, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
End Class
|
||||
@@ -32,18 +32,25 @@
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock Grid.Row="0" VerticalAlignment="Center" HorizontalAlignment="Left" Text="默认版本隔离" Margin="0,0,25,0" />
|
||||
<local:MyComboBox x:Name="ComboArgumentIndieV2" Grid.Row="0" Grid.ColumnSpan="2" Tag="LaunchArgumentIndieV2" Grid.Column="1"
|
||||
ToolTip="当安装新版本时,据此自动设置新版本的隔离选项。
若想调整已有版本的隔离策略,请前往它的版本设置。">
|
||||
<local:MyComboBoxItem Content="关闭" ToolTip="所有版本均使用同一档案,存档、Mod、资源包等均为公用。
若存在多个安装了 Mod 的版本,可能会导致 Mod 冲突。" />
|
||||
<local:MyComboBoxItem Content="隔离可安装 Mod 的版本" IsSelected="True" ToolTip="可安装 Mod 的版本(例如 Forge、Fabric)均互相独立以避免 Mod 冲突,其他版本(例如原版)则不会被隔离。" />
|
||||
<local:MyComboBoxItem Content="隔离非正式版" ToolTip="将 Minecraft 快照、预发布版、远古版本、愚人节版本与其他版本进行隔离" />
|
||||
<local:MyComboBox local:SettingService.Key="LaunchArgumentIndieV2" x:Name="ComboArgumentIndieV2"
|
||||
Grid.Row="0" Grid.ColumnSpan="2" Grid.Column="1"
|
||||
ToolTip="当安装新版本时,据此自动设置新版本的隔离选项。
若想调整已有版本的隔离策略,请前往它的版本设置。">
|
||||
<local:MyComboBoxItem Content="关闭"
|
||||
ToolTip="所有版本均使用同一档案,存档、Mod、资源包等均为公用。
若存在多个安装了 Mod 的版本,可能会导致 Mod 冲突。" />
|
||||
<local:MyComboBoxItem Content="隔离可安装 Mod 的版本"
|
||||
ToolTip="可安装 Mod 的版本(例如 Forge、Fabric)均互相独立以避免 Mod 冲突,其他版本(例如原版)则不会被隔离。" />
|
||||
<local:MyComboBoxItem Content="隔离非正式版"
|
||||
ToolTip="将 Minecraft 快照、预发布版、远古版本、愚人节版本与其他版本进行隔离" />
|
||||
<local:MyComboBoxItem Content="隔离可安装 Mod 的版本与非正式版" />
|
||||
<local:MyComboBoxItem Content="隔离所有版本" ToolTip="不同版本之间的存档、Mod、资源包等均不互通。
这会导致不同原版版本间的存档不能共用,所以一般不推荐。" />
|
||||
<local:MyComboBoxItem Content="隔离所有版本"
|
||||
ToolTip="不同版本之间的存档、Mod、资源包等均不互通。
这会导致不同原版版本间的存档不能共用,所以一般不推荐。" />
|
||||
</local:MyComboBox>
|
||||
<TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="游戏窗口标题" Margin="0,0,25,0" />
|
||||
<local:MyTextBox x:Name="TextArgumentTitle" Grid.Row="2" Grid.ColumnSpan="2" Tag="LaunchArgumentTitle" Grid.Column="1" ToolTip="自定义游戏窗口的标题,若留空则不进行更改。
你可以用替换标记来动态改变其内容,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。" HintText="默认" MaxLength="100" />
|
||||
<local:MyTextBox local:SettingService.Key="LaunchArgumentTitle"
|
||||
Grid.Row="2" Grid.ColumnSpan="2" Grid.Column="1" ToolTip="自定义游戏窗口的标题,若留空则不进行更改。
你可以用替换标记来动态改变其内容,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。" HintText="默认" MaxLength="100" />
|
||||
<TextBlock Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Left" Text="自定义信息" Margin="0,0,25,0" />
|
||||
<local:MyTextBox x:Name="TextArgumentInfo" Grid.Row="4" Grid.ColumnSpan="2" Tag="LaunchArgumentInfo" Text="PCL" Grid.Column="1" ToolTip="该信息会显示在游戏主界面的左下角,与 F3 调试页面的左上角。
你可以用替换标记来动态改变其内容,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。">
|
||||
<local:MyTextBox local:SettingService.Key="LaunchArgumentInfo"
|
||||
Grid.Row="4" Grid.ColumnSpan="2" Text="PCL" Grid.Column="1" ToolTip="该信息会显示在游戏主界面的左下角,与 F3 调试页面的左上角。
你可以用替换标记来动态改变其内容,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。">
|
||||
<local:MyTextBox.ValidateRules>
|
||||
<local:ValidateExcept>
|
||||
<local:ValidateExcept.Excepts>
|
||||
@@ -55,18 +62,18 @@
|
||||
</local:MyTextBox.ValidateRules>
|
||||
</local:MyTextBox>
|
||||
<TextBlock VerticalAlignment="Center" Grid.Row="6" HorizontalAlignment="Left" Text="启动器可见性" Margin="0,0,25,0" />
|
||||
<local:MyComboBox x:Name="ComboArgumentVisibie" Grid.Row="6" Grid.ColumnSpan="2" Tag="LaunchArgumentVisible" Grid.Column="1">
|
||||
<local:MyComboBox local:SettingService.Key="LaunchArgumentVisible"
|
||||
x:Name="ComboArgumentVisibie" Grid.Row="6" Grid.ColumnSpan="2" Grid.Column="1">
|
||||
<local:MyComboBoxItem Content="游戏启动后立即关闭" />
|
||||
<local:MyComboBoxItem Content="" IsEnabled="False" Visibility="Collapsed" />
|
||||
<local:MyComboBoxItem Content="游戏启动后隐藏,游戏退出后自动关闭" />
|
||||
<local:MyComboBoxItem Content="游戏启动后隐藏,游戏退出后重新打开" />
|
||||
<local:MyComboBoxItem Content="游戏启动后最小化" />
|
||||
<local:MyComboBoxItem Content="游戏启动后仍保持不变" IsSelected="True" />
|
||||
<local:MyComboBoxItem Content="游戏启动后隐藏,游戏退出后自动关闭" local:SettingService.Value="2" />
|
||||
<local:MyComboBoxItem Content="游戏启动后隐藏,游戏退出后重新打开" local:SettingService.Value="3" />
|
||||
<local:MyComboBoxItem Content="游戏启动后最小化" local:SettingService.Value="4" />
|
||||
<local:MyComboBoxItem Content="游戏启动后仍保持不变" local:SettingService.Value="5" />
|
||||
</local:MyComboBox>
|
||||
<TextBlock VerticalAlignment="Center" Grid.Row="8" HorizontalAlignment="Left" Text="进程优先级" Margin="0,0,25,0" />
|
||||
<local:MyComboBox x:Name="ComboArgumentPriority" Grid.Row="8" Grid.ColumnSpan="2" Tag="LaunchArgumentPriority" Grid.Column="1">
|
||||
<local:MyComboBox local:SettingService.Key="LaunchArgumentPriority" Grid.Row="8" Grid.ColumnSpan="2" Grid.Column="1">
|
||||
<local:MyComboBoxItem Content="高(优先保证游戏运行,游戏性能更佳,但可能造成其他程序卡顿)" />
|
||||
<local:MyComboBoxItem Content="中(平衡)" IsSelected="True" />
|
||||
<local:MyComboBoxItem Content="中(平衡)" />
|
||||
<local:MyComboBoxItem Content="低(优先保证其他程序运行,但可能让游戏卡顿,适合挂机时使用)" />
|
||||
</local:MyComboBox>
|
||||
<TextBlock VerticalAlignment="Center" Grid.Row="10" HorizontalAlignment="Left" Text="窗口大小" Margin="0,0,25,0" />
|
||||
@@ -77,28 +84,30 @@
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="Auto" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<local:MyComboBox x:Name="ComboArgumentWindowType" Tag="LaunchArgumentWindowType">
|
||||
<local:MyComboBox local:SettingService.Key="LaunchArgumentWindowType" x:Name="ComboArgumentWindowType">
|
||||
<local:MyComboBoxItem Content="全屏" />
|
||||
<local:MyComboBoxItem Content="默认" IsSelected="True" />
|
||||
<local:MyComboBoxItem Content="默认" />
|
||||
<local:MyComboBoxItem Content="与启动器尺寸一致" />
|
||||
<local:MyComboBoxItem Content="自定义尺寸" ToolTip="Forge 1.12.2 等个别版本存在 Bug,会导致高度设定无效" />
|
||||
<local:MyComboBoxItem Content="最大化" />
|
||||
</local:MyComboBox>
|
||||
<local:MyTextBox Padding="0,0,5,0" Visibility="Collapsed" Grid.Column="1" Margin="50,0,0,0" x:Name="TextArgumentWindowWidth" Tag="LaunchArgumentWindowWidth" Width="60" HorizontalContentAlignment="Center" Text="854">
|
||||
<local:MyTextBox local:SettingService.Key="LaunchArgumentWindowWidth" x:Name="TextArgumentWindowWidth"
|
||||
Padding="0,0,5,0" Visibility="Collapsed" Grid.Column="1" Margin="50,0,0,0" Width="60" HorizontalContentAlignment="Center" Text="854">
|
||||
<local:MyTextBox.ValidateRules>
|
||||
<local:ValidateInteger Min="1" Max="99999" />
|
||||
</local:MyTextBox.ValidateRules>
|
||||
</local:MyTextBox>
|
||||
<TextBlock x:Name="LabArgumentWindowMiddle" Visibility="Collapsed" Grid.Column="2" Text=" × " VerticalAlignment="Center" FontSize="18" />
|
||||
<local:MyTextBox Padding="0,0,5,0" Visibility="Collapsed" Grid.Column="3" Width="60" HorizontalContentAlignment="Center" x:Name="TextArgumentWindowHeight" Tag="LaunchArgumentWindowHeight" Text="480"
|
||||
ToolTip="Forge 1.12.2 等个别版本存在 Bug,会导致高度设定无效" ToolTipService.Placement="Right" ToolTipService.HorizontalOffset="5">
|
||||
<local:MyTextBox local:SettingService.Key="LaunchArgumentWindowHeight" x:Name="TextArgumentWindowHeight"
|
||||
Padding="0,0,5,0" Visibility="Collapsed" Grid.Column="3" Width="60" HorizontalContentAlignment="Center" Text="480"
|
||||
ToolTip="Forge 1.12.2 等个别版本存在 Bug,会导致高度设定无效" ToolTipService.Placement="Right" ToolTipService.HorizontalOffset="5">
|
||||
<local:MyTextBox.ValidateRules>
|
||||
<local:ValidateInteger Min="1" Max="99999" />
|
||||
</local:MyTextBox.ValidateRules>
|
||||
</local:MyTextBox>
|
||||
</Grid>
|
||||
<TextBlock VerticalAlignment="Center" Grid.Row="12" HorizontalAlignment="Left" Text="游戏 Java" Margin="0,0,25,0" />
|
||||
<local:MyComboBox x:Name="ComboArgumentJava" Grid.ColumnSpan="2" Grid.Row="12" Grid.Column="1" MaxDropDownHeight="240"
|
||||
<local:MyComboBox x:Name="ComboArgumentJava" Grid.ColumnSpan="2" Grid.Row="12" Grid.Column="1"
|
||||
ToolTip="若将 Java 放在游戏文件夹或 PCL 文件夹,在进行自动选择时 PCL 会尽量优先选择它">
|
||||
<ComboBoxItem Content="加载中……" IsSelected="True" />
|
||||
<!--<local:MyComboBoxItem Content="Java 8 (1.8.0_171),64 位:C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe" ToolTipService.Placement="Right" ToolTipService.HorizontalOffset="5" IsSelected="True" ToolTip="C:\Program Files (x86)\Common Files\Oracle\Java\javapath\javaw.exe" />-->
|
||||
@@ -131,13 +140,16 @@
|
||||
<RowDefinition Height="9" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<local:MyRadioBox Text="自动配置" Width="110" Checked="True" x:Name="RadioRamType0" Tag="LaunchRamType/0" Margin="0,0,20,0"
|
||||
ToolTip="根据安装的 Mod 量与电脑剩余内存,动态调整为游戏分配的内存" ToolTipService.Placement="Right" ToolTipService.HorizontalOffset="-10" ToolTipService.VerticalOffset="-3" />
|
||||
<local:MyRadioBox Grid.Row="2" Text="自定义" x:Name="RadioRamType1" Tag="LaunchRamType/1" Margin="0,0,20,0" />
|
||||
<local:MySlider Grid.Row="2" Grid.Column="1" IsEnabled="False" x:Name="SliderRamCustom" Tag="LaunchRamCustom" MaxValue="49" Value="13" />
|
||||
<local:MyCheckBox Grid.Row="4" Grid.ColumnSpan="3" Text="启动游戏前进行内存优化" Height="22" x:Name="CheckArgumentRam" Tag="LaunchArgumentRam"
|
||||
ToolTipService.Placement="Left" ToolTipService.HorizontalOffset="525" ToolTipService.VerticalOffset="-30"
|
||||
ToolTip="内存优化能将当前物理内存占用降低约 1/3,不仅限于 MC!
如果使用机械硬盘,这还可能会导致一小段时间的严重卡顿。
使用 --memory 参数启动 PCL 可以静默执行内存优化。" />
|
||||
<local:MyRadioBox local:SettingService.Key="LaunchRamType" local:SettingService.Value="0"
|
||||
Text="自动配置" Width="110" Checked="True" x:Name="RadioRamType0" Margin="0,0,20,0"
|
||||
ToolTip="根据安装的 Mod 量与电脑剩余内存,动态调整为游戏分配的内存" ToolTipService.Placement="Right" ToolTipService.HorizontalOffset="-10" ToolTipService.VerticalOffset="-3" />
|
||||
<local:MyRadioBox local:SettingService.Key="LaunchRamType" local:SettingService.Value="1"
|
||||
Grid.Row="2" Text="自定义" x:Name="RadioRamType1" Margin="0,0,20,0" />
|
||||
<local:MySlider Grid.Row="2" Grid.Column="1" IsEnabled="False" x:Name="SliderRamCustom" local:SettingService.Key="LaunchRamCustom" MaxValue="49" Value="13" />
|
||||
<local:MyCheckBox local:SettingService.Key="LaunchArgumentRam"
|
||||
Grid.Row="4" Grid.ColumnSpan="3" Text="启动游戏前进行内存优化" Height="22" x:Name="CheckArgumentRam"
|
||||
ToolTipService.Placement="Left" ToolTipService.HorizontalOffset="525" ToolTipService.VerticalOffset="-30"
|
||||
ToolTip="内存优化能将当前物理内存占用降低约 1/3,不仅限于 MC!
如果使用机械硬盘,这还可能会导致一小段时间的严重卡顿。
使用 --memory 参数启动 PCL 可以静默执行内存优化。" />
|
||||
<!--<local:MyTextBox Grid.Row="2" Grid.Column="3" Width="100" VerticalAlignment="Center" Margin="30,0,0,0" Text="2048 MB" />-->
|
||||
</Grid>
|
||||
<Grid x:Name="PanRamDisplay" Margin="0,11,2,0" SnapsToDevicePixels="True" Grid.Row="1" Grid.ColumnSpan="2" Grid.Column="1">
|
||||
@@ -182,11 +194,21 @@
|
||||
<ColumnDefinition />
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<local:MyRadioBox Text="随机" x:Name="RadioSkinType0" Height="22" Tag="LaunchSkinType/0" Grid.Column="0" ToolTip="随机选择一个默认皮肤" />
|
||||
<local:MyRadioBox Text="Steve" x:Name="RadioSkinType1" Height="22" Tag="LaunchSkinType/1" Grid.Column="1" />
|
||||
<local:MyRadioBox Text="Alex" x:Name="RadioSkinType2" Height="22" Tag="LaunchSkinType/2" Grid.Column="2" />
|
||||
<local:MyRadioBox Text="正版皮肤" x:Name="RadioSkinType3" Height="22" Tag="LaunchSkinType/3" Grid.Column="3" ToolTip="使用某个正版玩家的皮肤" />
|
||||
<local:MyRadioBox Text="自定义" x:Name="RadioSkinType4" Height="22" Tag="LaunchSkinType/4" Grid.Column="4" ToolTip="以资源包的形式加载自定义皮肤。
使用此方式更换的皮肤在多人游戏中仅自己可见,且会替换游戏中所有的角色。" />
|
||||
<local:MyRadioBox local:SettingService.Key="LaunchSkinType" local:SettingService.Value="0"
|
||||
x:Name="RadioSkinType0" Height="22" Grid.Column="0"
|
||||
Text="随机" ToolTip="随机选择一个默认皮肤" />
|
||||
<local:MyRadioBox local:SettingService.Key="LaunchSkinType" local:SettingService.Value="1"
|
||||
x:Name="RadioSkinType1" Height="22" Grid.Column="1"
|
||||
Text="Steve" />
|
||||
<local:MyRadioBox local:SettingService.Key="LaunchSkinType" local:SettingService.Value="2"
|
||||
x:Name="RadioSkinType2" Height="22" Grid.Column="2"
|
||||
Text="Alex" />
|
||||
<local:MyRadioBox local:SettingService.Key="LaunchSkinType" local:SettingService.Value="3"
|
||||
x:Name="RadioSkinType3" Height="22" Grid.Column="3"
|
||||
Text="正版皮肤" ToolTip="使用某个正版玩家的皮肤" />
|
||||
<local:MyRadioBox local:SettingService.Key="LaunchSkinType" local:SettingService.Value="4"
|
||||
x:Name="RadioSkinType4" Height="22" Grid.Column="4"
|
||||
Text="自定义" ToolTip="以资源包的形式加载自定义皮肤。
使用此方式更换的皮肤在多人游戏中仅自己可见,且会替换游戏中所有的角色。" />
|
||||
</Grid>
|
||||
<Grid x:Name="PanSkinID" Margin="0,14,0,2" Visibility="Collapsed">
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -198,7 +220,7 @@
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text="正版玩家名" Margin="0,0,25,0" />
|
||||
<local:MyTextBox x:Name="TextSkinID" Tag="LaunchSkinID" Grid.Column="1" MaxLength="50" />
|
||||
<local:MyTextBox local:SettingService.Key="LaunchSkinID" Grid.Column="1" MaxLength="50" />
|
||||
<Grid Height="35" Grid.Row="1" Grid.ColumnSpan="2" Margin="0,14,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
|
||||
@@ -242,30 +264,33 @@
|
||||
ToolTip="还原" ToolTipService.Placement="Right" ToolTipService.InitialShowDelay="200" ToolTipService.VerticalOffset="-1"
|
||||
Logo="M530 0c287 0 521 229 521 511s-233 511-521 511c-233 0-436-151-500-368a63 63 0 0 1 44-79 65 65 0 0 1 80 43c48 162 200 276 375 276 215 0 390-171 390-383s-174-383-390-383c-103 0-199 39-270 106l21-5a63 63 0 0 1 33 123l-157 42a65 65 0 0 1-90-42l-49-183a65 65 0 1 1 126-33l6 26A524 524 0 0 1 530 0z" LogoScale="0.9" />
|
||||
</StackPanel>
|
||||
<local:MyTextBox x:Name="TextAdvanceJvm" Grid.ColumnSpan="2" Tag="LaunchAdvanceJvm" Grid.Column="1" ToolTip="启动 Minecraft 时使用的额外 JVM 参数,除非有确定把握,否则请不要修改。

支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。
也支持使用 PCL 的替换标记,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。" MaxLength="4000"
|
||||
Height="100" AcceptsReturn="True" TextWrapping="Wrap" VerticalContentAlignment="Top" Padding="0,5" VerticalScrollBarVisibility="Auto" />
|
||||
<local:MyTextBox local:SettingService.Key="LaunchAdvanceJvm" x:Name="TextAdvanceJvm" Grid.ColumnSpan="2" Grid.Column="1"
|
||||
ToolTip="启动 Minecraft 时使用的额外 JVM 参数,除非有确定把握,否则请不要修改。

支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。
也支持使用 PCL 的替换标记,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。" MaxLength="4000"
|
||||
Height="100" AcceptsReturn="True" TextWrapping="Wrap" VerticalContentAlignment="Top" Padding="0,5" VerticalScrollBarVisibility="Auto" />
|
||||
<TextBlock Grid.Row="2" VerticalAlignment="Center" HorizontalAlignment="Left" Text="游戏参数" Margin="0,0,25,0" />
|
||||
<local:MyTextBox x:Name="TextAdvanceGame" Grid.Row="2" Grid.ColumnSpan="2" Tag="LaunchAdvanceGame" Grid.Column="1" ToolTip="文本框中的内容将会被直接拼合在启动参数的末尾。
例如,输入 --demo 则会以试玩模式启动游戏。

支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。
也支持使用 PCL 的替换标记,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。" />
|
||||
<local:MyTextBox local:SettingService.Key="LaunchAdvanceGame" x:Name="TextAdvanceGame" Grid.Row="2" Grid.ColumnSpan="2" Grid.Column="1" ToolTip="文本框中的内容将会被直接拼合在启动参数的末尾。
例如,输入 --demo 则会以试玩模式启动游戏。

支持 Minecraft 版本 JSON 中的字符串替换标记,例如 ${library_directory}。
也支持使用 PCL 的替换标记,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。" />
|
||||
<TextBlock Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Left" Text="启动前执行命令" Margin="0,0,25,0" />
|
||||
<local:MyTextBox x:Name="TextAdvanceRun" Grid.Row="4" Grid.ColumnSpan="2" Tag="LaunchAdvanceRun" Grid.Column="1" HintText=""
|
||||
ToolTip="在 MC 启动前执行特定命令或程序,语法与 Windows 的命令提示符一致。

你可以用替换标记来动态改变其内容或实现相对路径,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。例如:
 · "{verpath}test.exe" :运行版本文件夹下的 test.exe 程序
 · "{java}java.exe" -jar "{verpath}test.jar" :用 Java 运行版本文件夹下的 test.jar
 · notepad "{verindie}options.txt" :使用记事本打开该版本的设置文件

涉及路径的操作最好都打上双引号,以避免路径中的空格导致运行失败。
执行命令时,命令行所在的目录是当前的 .minecraft 文件夹。" />
|
||||
<local:MyCheckBox Grid.Row="5" Grid.Column="1" x:Name="CheckAdvanceRunWait" Tag="LaunchAdvanceRunWait" Visibility="Collapsed"
|
||||
Text="等待命令执行完成后再继续启动" Margin="0,8,0,7" />
|
||||
<local:MyTextBox local:SettingService.Key="LaunchAdvanceRun" x:Name="TextAdvanceRun" Grid.Row="4" Grid.ColumnSpan="2" Grid.Column="1" HintText=""
|
||||
ToolTip="在 MC 启动前执行特定命令或程序,语法与 Windows 的命令提示符一致。

你可以用替换标记来动态改变其内容或实现相对路径,在 更多 → 帮助 中搜索 “替换标记” 以了解用法。例如:
 · "{verpath}test.exe" :运行版本文件夹下的 test.exe 程序
 · "{java}java.exe" -jar "{verpath}test.jar" :用 Java 运行版本文件夹下的 test.jar
 · notepad "{verindie}options.txt" :使用记事本打开该版本的设置文件

涉及路径的操作最好都打上双引号,以避免路径中的空格导致运行失败。
执行命令时,命令行所在的目录是当前的 .minecraft 文件夹。" />
|
||||
<local:MyCheckBox local:SettingService.Key="LaunchAdvanceRunWait" x:Name="CheckAdvanceRunWait" Grid.Row="5" Grid.Column="1" Visibility="Collapsed"
|
||||
Text="等待命令执行完成后再继续启动" Margin="0,8,0,7" />
|
||||
<TextBlock VerticalAlignment="Center" Grid.Row="7" HorizontalAlignment="Left" Text="内存管理" Margin="0,0,25,0" />
|
||||
<local:MyComboBox x:Name="ComboAdvanceGC" Grid.Row="7" Grid.ColumnSpan="2" Tag="LaunchAdvanceGC" Grid.Column="1">
|
||||
<local:MyComboBoxItem Content="尽量使用 ZGC(激进)"
|
||||
ToolTipService.BetweenShowDelay="0" ToolTip="在 Java 21+ 使用分代 ZGC,20~15 使用非分代的 ZGC,14- 使用 G1GC。
在 Java 25+ 额外添加 -XX:+UseCompactObjectHeaders。

覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
|
||||
<local:MyComboBoxItem Content="尽量使用分代 ZGC(平衡)" IsSelected="True"
|
||||
ToolTipService.BetweenShowDelay="0" ToolTip="在 Java 21+ 使用分代 ZGC,20- 使用 G1GC。
在 Java 25+ 额外添加 -XX:+UseCompactObjectHeaders。

覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
|
||||
<local:MyComboBoxItem Content="仅 G1GC"
|
||||
ToolTipService.BetweenShowDelay="0" ToolTip="固定使用以下参数:
-XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M

覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
|
||||
<local:MyComboBoxItem Content="不指定(可自定义)"
|
||||
ToolTipService.BetweenShowDelay="0" ToolTip="不自动添加 GC 参数。

仅当选择此项时,你可以在 “Java 虚拟机参数” 设置中手动添加 GC 参数。" />
|
||||
<local:MyComboBox local:SettingService.Key="LaunchAdvanceGC" Grid.Row="7" Grid.ColumnSpan="2" Grid.Column="1">
|
||||
<local:MyComboBoxItem Content="尽量使用 ZGC"
|
||||
ToolTipService.BetweenShowDelay="0" ToolTip="在 Java 21+ 使用分代 ZGC,20~15 使用非分代的 ZGC,14- 使用 G1GC。
ZGC 的内存占用比 G1GC 更高,不过在回收内存时不会导致卡顿。
覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
|
||||
<local:MyComboBoxItem Content="尽量使用分代 ZGC"
|
||||
ToolTipService.BetweenShowDelay="0" ToolTip="在 Java 21+ 使用分代 ZGC,20- 使用 G1GC。
ZGC 的内存占用比 G1GC 更高,不过在回收内存时不会导致卡顿。
覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
|
||||
<local:MyComboBoxItem Content="标准 G1GC"
|
||||
ToolTipService.BetweenShowDelay="0" ToolTip="总是使用 G1GC,附带 Mojang 官方的优化参数。
G1GC 的内存占用比 ZGC 更低,但在回收内存时会导致突然的卡顿。
覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
|
||||
<local:MyComboBoxItem Content="调优 G1GC" local:SettingService.Value="4"
|
||||
ToolTipService.BetweenShowDelay="0" ToolTip="总是使用 G1GC,附带 PCL 调优过的优化参数。
G1GC 的内存占用比 ZGC 更低,但在回收内存时会导致突然的卡顿。
覆盖 “Java 虚拟机参数” 设置中的 GC 相关参数。" />
|
||||
<local:MyComboBoxItem Content="不指定(可自定义)" local:SettingService.Value="3"
|
||||
ToolTipService.BetweenShowDelay="0" ToolTip="不自动添加 GC 参数。
仅当选择此项时,你可以在 “Java 虚拟机参数” 设置中手动添加 GC 参数。" />
|
||||
</local:MyComboBox>
|
||||
<StackPanel Margin="0,12,0,4" Grid.Row="8" Grid.ColumnSpan="2" HorizontalAlignment="Left">
|
||||
<local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" x:Name="CheckAdvanceDisableJLW" Tag="LaunchAdvanceDisableJLW"
|
||||
<local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" local:SettingService.Key="LaunchAdvanceDisableJLW"
|
||||
ToolTipService.Placement="Right" ToolTip="PCL 会使用 Java Launch Wrapper 来修复老版本 Java 在中文路径下无法启动的问题。
如果这被反作弊拦截,或遇到其他问题,也可以将其关闭。" />
|
||||
<local:MyCheckBox Height="28" Text="使用高性能显卡" x:Name="CheckAdvanceGraphicCard" Tag="LaunchAdvanceGraphicCard"
|
||||
<local:MyCheckBox Height="28" Text="使用高性能显卡" local:SettingService.Key="LaunchAdvanceGraphicCard"
|
||||
ToolTipService.Placement="Right" ToolTip="自动在 Windows 设置 → 系统 → 屏幕 → 显示卡 中将 PCL 和 Java 改为使用高性能显卡。
如果同时有集成显卡和独立显卡,这能确保 MC 使用独立显卡进行渲染,以大幅提高帧率。" />
|
||||
</StackPanel>
|
||||
<local:MyHint Text="版本独立设置中还有更多高级选项可供调整。" Margin="0,5,0,10" Theme="Blue" Grid.Row="9" Grid.ColumnSpan="2"
|
||||
|
||||
@@ -1,64 +1,31 @@
|
||||
Public Class PageSetupLaunch
|
||||
|
||||
Private IsLoad As Boolean = False
|
||||
|
||||
Private Sub PageSetupLaunch_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
||||
|
||||
'重复加载部分
|
||||
PanBack.ScrollToHome()
|
||||
RefreshRam(False)
|
||||
If McInstanceSelected Is Nothing Then
|
||||
BtnSwitch.Visibility = Visibility.Collapsed
|
||||
Else
|
||||
BtnSwitch.Visibility = Visibility.Visible
|
||||
End If
|
||||
BtnSwitch.Visibility = If(McInstanceSelected Is Nothing, Visibility.Collapsed, Visibility.Visible)
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoad Then Return
|
||||
IsLoad = True
|
||||
Static Reloaded As Boolean = False
|
||||
If Reloaded Then Return
|
||||
Reloaded = True
|
||||
|
||||
AniControlEnabled += 1
|
||||
Reload()
|
||||
Refresh()
|
||||
AniControlEnabled -= 1
|
||||
|
||||
'内存自动刷新
|
||||
Dim timer As New Threading.DispatcherTimer With {.Interval = New TimeSpan(0, 0, 0, 1)}
|
||||
AddHandler timer.Tick, AddressOf RefreshRam
|
||||
timer.Start()
|
||||
|
||||
End Sub
|
||||
Public Sub Reload()
|
||||
Public Sub Refresh()
|
||||
Try
|
||||
|
||||
'离线皮肤
|
||||
CType(FindName("RadioSkinType" & Setup.Load("LaunchSkinType")), MyRadioBox).Checked = True
|
||||
TextSkinID.Text = Setup.Get("LaunchSkinID")
|
||||
|
||||
'启动参数
|
||||
TextArgumentTitle.Text = Setup.Get("LaunchArgumentTitle")
|
||||
TextArgumentInfo.Text = Setup.Get("LaunchArgumentInfo")
|
||||
ComboArgumentIndieV2.SelectedIndex = Setup.Get("LaunchArgumentIndieV2")
|
||||
ComboArgumentVisibie.SelectedIndex = Setup.Get("LaunchArgumentVisible")
|
||||
ComboArgumentPriority.SelectedIndex = Setup.Get("LaunchArgumentPriority")
|
||||
ComboArgumentWindowType.SelectedIndex = Setup.Get("LaunchArgumentWindowType")
|
||||
TextArgumentWindowWidth.Text = Setup.Get("LaunchArgumentWindowWidth")
|
||||
TextArgumentWindowHeight.Text = Setup.Get("LaunchArgumentWindowHeight")
|
||||
CheckArgumentRam.Checked = Setup.Get("LaunchArgumentRam")
|
||||
RefreshJavaComboBox()
|
||||
|
||||
'游戏内存
|
||||
CType(FindName("RadioRamType" & Setup.Load("LaunchRamType")), MyRadioBox).Checked = True
|
||||
SliderRamCustom.Value = Setup.Get("LaunchRamCustom")
|
||||
|
||||
'高级设置
|
||||
TextAdvanceJvm.Text = Setup.Get("LaunchAdvanceJvm")
|
||||
TextAdvanceGame.Text = Setup.Get("LaunchAdvanceGame")
|
||||
TextAdvanceRun.Text = Setup.Get("LaunchAdvanceRun")
|
||||
ComboAdvanceGC.SelectedIndex = Setup.Get("LaunchAdvanceGC")
|
||||
CheckAdvanceRunWait.Checked = Setup.Get("LaunchAdvanceRunWait")
|
||||
CheckAdvanceDisableJLW.Checked = Setup.Get("LaunchAdvanceDisableJLW")
|
||||
CheckAdvanceGraphicCard.Checked = Setup.Get("LaunchAdvanceGraphicCard")
|
||||
|
||||
SettingService.RefreshSettings(Me)
|
||||
UpdateSkinType()
|
||||
UpdateRamType()
|
||||
UpdateJavaComboBox()
|
||||
Catch ex As NullReferenceException
|
||||
Log(ex, "启动设置项存在异常,已被自动重置", LogLevel.Msgbox)
|
||||
Reset()
|
||||
@@ -66,58 +33,18 @@
|
||||
Log(ex, "重载启动设置时出错", LogLevel.Feedback)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
'初始化
|
||||
Public Sub Reset()
|
||||
Try
|
||||
Setup.Reset("LaunchArgumentTitle")
|
||||
Setup.Reset("LaunchArgumentInfo")
|
||||
Setup.Set("LaunchArgumentIndieV2", Setup.GetDefault("LaunchArgumentIndieV2"))
|
||||
Setup.Reset("LaunchArgumentVisible")
|
||||
Setup.Reset("LaunchArgumentWindowType")
|
||||
Setup.Reset("LaunchArgumentWindowWidth")
|
||||
Setup.Reset("LaunchArgumentWindowHeight")
|
||||
Setup.Reset("LaunchArgumentPriority")
|
||||
Setup.Reset("LaunchArgumentRam")
|
||||
Setup.Reset("LaunchRamType")
|
||||
Setup.Reset("LaunchRamCustom")
|
||||
Setup.Reset("LaunchSkinType")
|
||||
Setup.Reset("LaunchSkinID")
|
||||
Setup.Reset("LaunchAdvanceJvm")
|
||||
Setup.Reset("LaunchAdvanceGame")
|
||||
Setup.Reset("LaunchAdvanceRun")
|
||||
Setup.Reset("LaunchAdvanceGC")
|
||||
Setup.Reset("LaunchAdvanceRunWait")
|
||||
Setup.Reset("LaunchAdvanceDisableJLW")
|
||||
Setup.Reset("LaunchAdvanceGraphicCard")
|
||||
Setup.Reset("LaunchArgumentJavaAll")
|
||||
Setup.Reset("LaunchArgumentJavaSelect")
|
||||
SettingService.ResetSettings(Me)
|
||||
Settings.Set("LaunchArgumentIndieV2", Settings.GetDefault("LaunchArgumentIndieV2"))
|
||||
Settings.Reset("LaunchArgumentJavaAll")
|
||||
Settings.Reset("LaunchArgumentJavaSelect")
|
||||
JavaSearchLoader.Start(IsForceRestart:=True)
|
||||
|
||||
Log("[Setup] 已初始化启动设置")
|
||||
Hint("已初始化启动设置!", HintType.Green, False)
|
||||
Hint("已初始化启动设置!", HintType.Green)
|
||||
Catch ex As Exception
|
||||
Log(ex, "初始化启动设置失败", LogLevel.Msgbox)
|
||||
End Try
|
||||
|
||||
Reload()
|
||||
End Sub
|
||||
|
||||
'将控件改变路由到设置改变
|
||||
Private Shared Sub RadioBoxChange(sender As MyRadioBox, e As Object) Handles RadioSkinType0.Check, RadioSkinType1.Check, RadioSkinType2.Check, RadioSkinType3.Check, RadioSkinType4.Check, RadioRamType0.Check, RadioRamType1.Check
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag.ToString.Split("/")(0), Val(sender.Tag.ToString.Split("/")(1)))
|
||||
End Sub
|
||||
Private Shared Sub TextBoxChange(sender As MyTextBox, e As Object) Handles TextSkinID.ValidatedTextChanged, TextArgumentWindowHeight.ValidatedTextChanged, TextArgumentWindowWidth.ValidatedTextChanged, TextArgumentInfo.ValidatedTextChanged, TextAdvanceGame.ValidatedTextChanged, TextAdvanceJvm.ValidatedTextChanged, TextArgumentTitle.ValidatedTextChanged, TextAdvanceRun.ValidatedTextChanged
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Text)
|
||||
End Sub
|
||||
Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderRamCustom.Change
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value)
|
||||
End Sub
|
||||
Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndieV2.SelectionChanged, ComboArgumentVisibie.SelectionChanged, ComboArgumentWindowType.SelectionChanged, ComboArgumentPriority.SelectionChanged, ComboAdvanceGC.SelectionChanged
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
|
||||
End Sub
|
||||
Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceRunWait.Change, CheckArgumentRam.Change, CheckAdvanceDisableJLW.Change, CheckAdvanceGraphicCard.Change
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked)
|
||||
Refresh()
|
||||
End Sub
|
||||
|
||||
#Region "离线皮肤"
|
||||
@@ -158,7 +85,7 @@
|
||||
NewBitmap.Save(PathAppdata & "CustomSkin.png")
|
||||
End If
|
||||
'更新设置
|
||||
Setup.Set("LaunchSkinSlim", SkinInfo.IsSlim)
|
||||
Settings.Set("LaunchSkinSlim", SkinInfo.IsSlim)
|
||||
ChangeSkin = True
|
||||
Catch ex As Exception
|
||||
Log(ex, "改变离线皮肤失败", LogLevel.Msgbox)
|
||||
@@ -184,13 +111,31 @@
|
||||
MySkin.RefreshCache(Nothing)
|
||||
End Sub
|
||||
|
||||
Public Shared Sub UpdateSkinType()
|
||||
PageLaunchLeft.SkinLegacy.Start()
|
||||
'设置 UI 改变
|
||||
If FrmSetupLaunch Is Nothing Then Return
|
||||
Select Case Settings.Get("LaunchSkinType")
|
||||
Case 0, 1, 2 '默认
|
||||
FrmSetupLaunch.PanSkinID.Visibility = Visibility.Collapsed
|
||||
FrmSetupLaunch.PanSkinChange.Visibility = Visibility.Collapsed
|
||||
Case 3 '正版
|
||||
FrmSetupLaunch.PanSkinID.Visibility = Visibility.Visible
|
||||
FrmSetupLaunch.PanSkinChange.Visibility = Visibility.Collapsed
|
||||
Case 4 '自定义
|
||||
FrmSetupLaunch.PanSkinID.Visibility = Visibility.Collapsed
|
||||
FrmSetupLaunch.PanSkinChange.Visibility = Visibility.Visible
|
||||
End Select
|
||||
FrmSetupLaunch.CardSkin.TriggerForceResize()
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "游戏内存"
|
||||
|
||||
Public Sub RamType(Type As Integer)
|
||||
If SliderRamCustom Is Nothing Then Return
|
||||
SliderRamCustom.IsEnabled = (Type = 1)
|
||||
Public Shared Sub UpdateRamType()
|
||||
If FrmSetupLaunch?.SliderRamCustom Is Nothing Then Return
|
||||
FrmSetupLaunch.SliderRamCustom.IsEnabled = Settings.Get("LaunchRamType") = 1
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
@@ -333,7 +278,7 @@
|
||||
'------------------------------------------
|
||||
|
||||
Dim RamGive As Double
|
||||
If Setup.Get("LaunchRamType") = 0 Then
|
||||
If Settings.Get("LaunchRamType") = 0 Then
|
||||
'自动配置
|
||||
Dim RamAvailable As Double = Math.Round(My.Computer.Info.AvailablePhysicalMemory / 1024 / 1024 / 1024 * 10) / 10
|
||||
'确定需求的内存值
|
||||
@@ -345,7 +290,7 @@
|
||||
If Instance IsNot Nothing AndAlso Instance.Modable Then
|
||||
'可安装 Mod 的版本
|
||||
Dim ModDir As New DirectoryInfo(Instance.PathIndie & "mods\")
|
||||
Dim ModCount As Integer = If(ModDir.Exists, ModDir.GetFiles.Length, 0)
|
||||
Dim ModCount As Integer = If(ModDir.Exists, ModDir.GetFiles.Count(Function(f) {".jar", ".zip", ".litemod"}.Contains(f.Extension.Lower)), 0)
|
||||
RamMininum = 0.5 + ModCount / 150
|
||||
RamTarget1 = 1.5 + ModCount / 90
|
||||
RamTarget2 = 2.7 + ModCount / 50
|
||||
@@ -389,7 +334,7 @@ PreFin:
|
||||
RamGive = Math.Round(Math.Max(RamGive, RamMininum), 1)
|
||||
Else
|
||||
'手动配置
|
||||
Dim Value As Integer = Setup.Get("LaunchRamCustom")
|
||||
Dim Value As Integer = Settings.Get("LaunchRamCustom")
|
||||
If Value <= 12 Then
|
||||
RamGive = Value * 0.1 + 0.3
|
||||
ElseIf Value <= 25 Then
|
||||
@@ -410,14 +355,14 @@ PreFin:
|
||||
#Region "Java 选择"
|
||||
|
||||
'刷新 Java 下拉框显示
|
||||
Public Sub RefreshJavaComboBox()
|
||||
Public Sub UpdateJavaComboBox()
|
||||
If ComboArgumentJava Is Nothing Then Return
|
||||
'初始化列表
|
||||
ComboArgumentJava.Items.Clear()
|
||||
ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "自动选择合适的 Java", .Tag = "自动选择"})
|
||||
'更新列表
|
||||
Dim SelectedItem As MyComboBoxItem = Nothing
|
||||
Dim SelectedBySetup As String = Setup.Get("LaunchArgumentJavaSelect")
|
||||
Dim SelectedBySetup As String = Settings.Get("LaunchArgumentJavaSelect")
|
||||
Try
|
||||
For Each Java In JavaList.Clone().OrderByDescending(Function(v) v.MajorVersion)
|
||||
Dim ListItem = New MyComboBoxItem With {.Content = Java.ToString, .ToolTip = Java.PathFolder, .Tag = Java}
|
||||
@@ -428,7 +373,7 @@ PreFin:
|
||||
If JavaEntry.FromJson(GetJson(SelectedBySetup)).PathFolder = Java.PathFolder Then SelectedItem = ListItem
|
||||
Next
|
||||
Catch ex As Exception
|
||||
Setup.Set("LaunchArgumentJavaSelect", "")
|
||||
Settings.Set("LaunchArgumentJavaSelect", "")
|
||||
Log(ex, "更新设置 Java 下拉框失败", LogLevel.Feedback)
|
||||
End Try
|
||||
'更新选择项
|
||||
@@ -457,11 +402,11 @@ PreFin:
|
||||
Dim SelectedJava = ComboArgumentJava.SelectedItem.Tag
|
||||
If "自动选择".Equals(SelectedJava) Then
|
||||
'选择 “自动”
|
||||
Setup.Set("LaunchArgumentJavaSelect", "")
|
||||
Settings.Set("LaunchArgumentJavaSelect", "")
|
||||
Log("[Java] 修改 Java 选择设置:自动选择")
|
||||
Else
|
||||
'选择指定项
|
||||
Setup.Set("LaunchArgumentJavaSelect", CType(SelectedJava.ToJson(), JObject).ToString(Newtonsoft.Json.Formatting.None))
|
||||
Settings.Set("LaunchArgumentJavaSelect", CType(SelectedJava.ToJson(), JObject).ToString(Newtonsoft.Json.Formatting.None))
|
||||
Log("[Java] 修改 Java 选择设置:" & SelectedJava.ToString)
|
||||
End If
|
||||
RefreshRam(True)
|
||||
@@ -483,12 +428,12 @@ PreFin:
|
||||
NewEntry.Check()
|
||||
'加入列表
|
||||
Dim JavaNewList As New JArray From {NewEntry.ToJson}
|
||||
For Each JsonEntry In GetJson(Setup.Get("LaunchArgumentJavaAll"))
|
||||
For Each JsonEntry In GetJson(Settings.Get("LaunchArgumentJavaAll"))
|
||||
Dim Entry = JavaEntry.FromJson(JsonEntry)
|
||||
If Entry.PathFolder = NewEntry.PathFolder Then Continue For
|
||||
JavaNewList.Add(JsonEntry)
|
||||
Next
|
||||
Setup.Set("LaunchArgumentJavaAll", JavaNewList.ToString(Newtonsoft.Json.Formatting.None))
|
||||
Settings.Set("LaunchArgumentJavaAll", JavaNewList.ToString(Newtonsoft.Json.Formatting.None))
|
||||
'重新加载列表
|
||||
JavaSearchLoader.Start(IsForceRestart:=True)
|
||||
Hint("已将该 Java 加入 Java 列表!", HintType.Green)
|
||||
@@ -520,16 +465,10 @@ PreFin:
|
||||
#Region "其他选项"
|
||||
|
||||
Private Sub WindowTypeUIRefresh() Handles ComboArgumentWindowType.SelectionChanged
|
||||
If ComboArgumentWindowType Is Nothing Then Return
|
||||
If ComboArgumentWindowType.SelectedIndex = 3 AndAlso LabArgumentWindowMiddle IsNot Nothing AndAlso LabArgumentWindowMiddle.Visibility = Visibility.Collapsed Then
|
||||
LabArgumentWindowMiddle.Visibility = Visibility.Visible
|
||||
TextArgumentWindowHeight.Visibility = Visibility.Visible
|
||||
TextArgumentWindowWidth.Visibility = Visibility.Visible
|
||||
ElseIf ComboArgumentWindowType.SelectedIndex <> 3 AndAlso LabArgumentWindowMiddle IsNot Nothing AndAlso LabArgumentWindowMiddle.Visibility = Visibility.Visible Then
|
||||
LabArgumentWindowMiddle.Visibility = Visibility.Collapsed
|
||||
TextArgumentWindowHeight.Visibility = Visibility.Collapsed
|
||||
TextArgumentWindowWidth.Visibility = Visibility.Collapsed
|
||||
End If
|
||||
Dim IsVisibie = (ComboArgumentWindowType.SelectedIndex = 3).ToVisibility
|
||||
TextArgumentWindowHeight.Visibility = IsVisibie
|
||||
LabArgumentWindowMiddle.Visibility = IsVisibie
|
||||
TextArgumentWindowWidth.Visibility = IsVisibie
|
||||
End Sub
|
||||
|
||||
'可见性选择直接关闭的警告
|
||||
@@ -571,11 +510,20 @@ PreFin:
|
||||
|
||||
'JVM 参数重设
|
||||
Private Sub TextAdvanceJvm_TextChanged() Handles TextAdvanceJvm.ValidatedTextChanged
|
||||
BtnAdvanceJvmReset.Visibility = If(TextAdvanceJvm.Text = Setup.GetDefault("LaunchAdvanceJvm"), Visibility.Hidden, Visibility.Visible)
|
||||
BtnAdvanceJvmReset.Visibility = If(TextAdvanceJvm.Text = Settings.GetDefault("LaunchAdvanceJvm"), Visibility.Hidden, Visibility.Visible)
|
||||
End Sub
|
||||
Private Sub BtnAdvanceJvmReset_Click(sender As Object, e As EventArgs) Handles BtnAdvanceJvmReset.Click
|
||||
Setup.Reset("LaunchAdvanceJvm")
|
||||
Reload()
|
||||
Settings.Reset("LaunchAdvanceJvm")
|
||||
Refresh()
|
||||
End Sub
|
||||
|
||||
'去除参数中的回车
|
||||
Private Sub ReplaceEnter(sender As MyTextBox, e As TextChangedEventArgs) Handles TextAdvanceJvm.TextChanged, TextAdvanceGame.TextChanged
|
||||
Dim NewText = sender.Text.Replace(vbCrLf, vbCr).Replace(vbLf, vbCr).Replace(vbCr, " ")
|
||||
If NewText = sender.Text Then Return
|
||||
Dim CaretIndex = sender.CaretIndex
|
||||
sender.Text = NewText
|
||||
sender.CaretIndex = Math.Max(0, CaretIndex - 1)
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
@@ -587,12 +535,4 @@ PreFin:
|
||||
FrmMain.PageChange(FormMain.PageType.InstanceSetup, FormMain.PageSubType.InstanceSetup)
|
||||
End Sub
|
||||
|
||||
'去除参数中的回车
|
||||
Private Sub ReplaceEnter(sender As MyTextBox, e As TextChangedEventArgs) Handles TextAdvanceJvm.TextChanged, TextAdvanceGame.TextChanged
|
||||
Dim NewText = sender.Text.Replace(vbCrLf, vbCr).Replace(vbLf, vbCr).Replace(vbCr, " ")
|
||||
If NewText = sender.Text Then Return
|
||||
Dim CaretIndex = sender.CaretIndex
|
||||
sender.Text = NewText
|
||||
sender.CaretIndex = Math.Max(0, CaretIndex - 1)
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
@@ -5,10 +5,10 @@
|
||||
Private Sub PageSetupLeft_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
||||
'是否处于隐藏的子页面
|
||||
Dim IsHiddenPage As Boolean = False
|
||||
If ItemLaunch.Checked AndAlso Setup.Get("UiHiddenSetupLaunch") Then IsHiddenPage = True
|
||||
If ItemUI.Checked AndAlso Setup.Get("UiHiddenSetupUi") Then IsHiddenPage = True
|
||||
If ItemSystem.Checked AndAlso Setup.Get("UiHiddenSetupSystem") Then IsHiddenPage = True
|
||||
If ItemLink.Checked AndAlso Setup.Get("UiHiddenSetupLink") Then IsHiddenPage = True
|
||||
If ItemLaunch.Checked AndAlso Settings.Get("UiHiddenSetupLaunch") Then IsHiddenPage = True
|
||||
If ItemUI.Checked AndAlso Settings.Get("UiHiddenSetupUi") Then IsHiddenPage = True
|
||||
If ItemSystem.Checked AndAlso Settings.Get("UiHiddenSetupSystem") Then IsHiddenPage = True
|
||||
If ItemLink.Checked AndAlso Settings.Get("UiHiddenSetupLink") Then IsHiddenPage = True
|
||||
If PageSetupUI.HiddenForceShow Then IsHiddenPage = False
|
||||
'若页面错误,或尚未加载,则继续
|
||||
If IsLoad AndAlso Not IsHiddenPage Then Return
|
||||
@@ -17,13 +17,13 @@
|
||||
PageSetupUI.HiddenRefresh()
|
||||
'选择第一个未被禁用的子页面
|
||||
If IsPageSwitched Then Return
|
||||
If Not Setup.Get("UiHiddenSetupLaunch") Then
|
||||
If Not Settings.Get("UiHiddenSetupLaunch") Then
|
||||
ItemLaunch.SetChecked(True, False, False)
|
||||
ElseIf Not Setup.Get("UiHiddenSetupUi") Then
|
||||
ElseIf Not Settings.Get("UiHiddenSetupUi") Then
|
||||
ItemUI.SetChecked(True, False, False)
|
||||
ElseIf Not Setup.Get("UiHiddenSetupSystem") Then
|
||||
ElseIf Not Settings.Get("UiHiddenSetupSystem") Then
|
||||
ItemSystem.SetChecked(True, False, False)
|
||||
ElseIf Not Setup.Get("UiHiddenSetupLink") Then
|
||||
ElseIf Not Settings.Get("UiHiddenSetupLink") Then
|
||||
ItemLink.SetChecked(True, False, False)
|
||||
Else
|
||||
ItemLaunch.SetChecked(True, False, False)
|
||||
@@ -42,13 +42,13 @@
|
||||
Public Sub New()
|
||||
InitializeComponent()
|
||||
'选择第一个未被禁用的子页面
|
||||
If Not Setup.Get("UiHiddenSetupLaunch") Then
|
||||
If Not Settings.Get("UiHiddenSetupLaunch") Then
|
||||
PageID = FormMain.PageSubType.SetupLaunch
|
||||
ElseIf Not Setup.Get("UiHiddenSetupUi") Then
|
||||
ElseIf Not Settings.Get("UiHiddenSetupUi") Then
|
||||
PageID = FormMain.PageSubType.SetupUI
|
||||
ElseIf Not Setup.Get("UiHiddenSetupSystem") Then
|
||||
ElseIf Not Settings.Get("UiHiddenSetupSystem") Then
|
||||
PageID = FormMain.PageSubType.SetupSystem
|
||||
ElseIf Not Setup.Get("UiHiddenSetupLink") Then
|
||||
ElseIf Not Settings.Get("UiHiddenSetupLink") Then
|
||||
PageID = FormMain.PageSubType.SetupLink
|
||||
Else
|
||||
PageID = FormMain.PageSubType.SetupLaunch
|
||||
|
||||
@@ -17,15 +17,15 @@
|
||||
|
||||
End Sub
|
||||
Public Sub Reload()
|
||||
ComboLatencyMode.SelectedIndex = Setup.Get("LinkLatencyMode")
|
||||
TextCustomPeer.Text = Setup.Get("LinkCustomPeer")
|
||||
ComboLatencyMode.SelectedIndex = Settings.Get("LinkLatencyMode")
|
||||
TextCustomPeer.Text = Settings.Get("LinkCustomPeer")
|
||||
End Sub
|
||||
|
||||
'初始化
|
||||
Public Sub Reset()
|
||||
Try
|
||||
Setup.Reset("LinkLatencyMode")
|
||||
Setup.Reset("LinkCustomPeer")
|
||||
Settings.Reset("LinkLatencyMode")
|
||||
Settings.Reset("LinkCustomPeer")
|
||||
|
||||
Log("[Setup] 已初始化联机页设置")
|
||||
Hint("已初始化联机页设置!", HintType.Green, False)
|
||||
@@ -38,10 +38,10 @@
|
||||
|
||||
'将控件改变路由到设置改变
|
||||
Private Shared Sub TextBoxChange(sender As MyTextBox, e As Object) Handles TextCustomPeer.ValidatedTextChanged
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Text)
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag, sender.Text)
|
||||
End Sub
|
||||
Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboLatencyMode.SelectionChanged
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag, sender.SelectedIndex)
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
|
||||
@@ -27,62 +27,62 @@
|
||||
Public Sub Reload()
|
||||
|
||||
'下载
|
||||
SliderDownloadThread.Value = Setup.Get("ToolDownloadThread")
|
||||
SliderDownloadSpeed.Value = Setup.Get("ToolDownloadSpeed")
|
||||
ComboDownloadSource.SelectedIndex = Setup.Get("ToolDownloadSource")
|
||||
ComboDownloadVersion.SelectedIndex = Setup.Get("ToolDownloadVersion")
|
||||
CheckDownloadCert.Checked = Setup.Get("ToolDownloadCert")
|
||||
SliderDownloadThread.Value = Settings.Get("ToolDownloadThread")
|
||||
SliderDownloadSpeed.Value = Settings.Get("ToolDownloadSpeed")
|
||||
ComboDownloadSource.SelectedIndex = Settings.Get("ToolDownloadSource")
|
||||
ComboDownloadVersion.SelectedIndex = Settings.Get("ToolDownloadVersion")
|
||||
CheckDownloadCert.Checked = Settings.Get("ToolDownloadCert")
|
||||
|
||||
'Mod 与整合包
|
||||
ComboDownloadTranslateV2.SelectedIndex = Setup.Get("ToolDownloadTranslateV2")
|
||||
ComboDownloadMod.SelectedIndex = Setup.Get("ToolDownloadMod")
|
||||
ComboModLocalNameStyle.SelectedIndex = Setup.Get("ToolModLocalNameStyle")
|
||||
CheckDownloadIgnoreQuilt.Checked = Setup.Get("ToolDownloadIgnoreQuilt")
|
||||
ComboDownloadTranslateV2.SelectedIndex = Settings.Get("ToolDownloadTranslateV2")
|
||||
ComboDownloadMod.SelectedIndex = Settings.Get("ToolDownloadMod")
|
||||
ComboModLocalNameStyle.SelectedIndex = Settings.Get("ToolModLocalNameStyle")
|
||||
CheckDownloadIgnoreQuilt.Checked = Settings.Get("ToolDownloadIgnoreQuilt")
|
||||
|
||||
'Minecraft 更新提示
|
||||
CheckUpdateRelease.Checked = Setup.Get("ToolUpdateRelease")
|
||||
CheckUpdateSnapshot.Checked = Setup.Get("ToolUpdateSnapshot")
|
||||
CheckUpdateRelease.Checked = Settings.Get("ToolUpdateRelease")
|
||||
CheckUpdateSnapshot.Checked = Settings.Get("ToolUpdateSnapshot")
|
||||
|
||||
'辅助设置
|
||||
CheckHelpChinese.Checked = Setup.Get("ToolHelpChinese")
|
||||
CheckHelpChinese.Checked = Settings.Get("ToolHelpChinese")
|
||||
|
||||
'系统设置
|
||||
ComboSystemUpdate.SelectedIndex = Setup.Get("SystemSystemUpdate")
|
||||
ComboSystemActivity.SelectedIndex = Setup.Get("SystemSystemActivity")
|
||||
TextSystemCache.Text = Setup.Get("SystemSystemCache")
|
||||
CheckSystemTelemetry.Checked = Setup.Get("SystemSystemTelemetry")
|
||||
ComboSystemUpdate.SelectedIndex = Settings.Get("SystemSystemUpdate")
|
||||
ComboSystemActivity.SelectedIndex = Settings.Get("SystemSystemActivity")
|
||||
TextSystemCache.Text = Settings.Get("SystemSystemCache")
|
||||
CheckSystemTelemetry.Checked = Settings.Get("SystemSystemTelemetry")
|
||||
|
||||
'调试选项
|
||||
CheckDebugMode.Checked = Setup.Get("SystemDebugMode")
|
||||
SliderDebugAnim.Value = Setup.Get("SystemDebugAnim")
|
||||
CheckDebugDelay.Checked = Setup.Get("SystemDebugDelay")
|
||||
CheckDebugSkipCopy.Checked = Setup.Get("SystemDebugSkipCopy")
|
||||
CheckDebugMode.Checked = Settings.Get("SystemDebugMode")
|
||||
SliderDebugAnim.Value = Settings.Get("SystemDebugAnim")
|
||||
CheckDebugDelay.Checked = Settings.Get("SystemDebugDelay")
|
||||
CheckDebugSkipCopy.Checked = Settings.Get("SystemDebugSkipCopy")
|
||||
|
||||
End Sub
|
||||
|
||||
'初始化
|
||||
Public Sub Reset()
|
||||
Try
|
||||
Setup.Reset("ToolDownloadThread")
|
||||
Setup.Reset("ToolDownloadSpeed")
|
||||
Setup.Reset("ToolDownloadSource")
|
||||
Setup.Reset("ToolDownloadVersion")
|
||||
Setup.Reset("ToolDownloadTranslateV2")
|
||||
Setup.Reset("ToolDownloadIgnoreQuilt")
|
||||
Setup.Reset("ToolDownloadCert")
|
||||
Setup.Reset("ToolDownloadMod")
|
||||
Setup.Reset("ToolModLocalNameStyle")
|
||||
Setup.Reset("ToolUpdateRelease")
|
||||
Setup.Reset("ToolUpdateSnapshot")
|
||||
Setup.Reset("ToolHelpChinese")
|
||||
Setup.Reset("SystemDebugMode")
|
||||
Setup.Reset("SystemDebugAnim")
|
||||
Setup.Reset("SystemDebugDelay")
|
||||
Setup.Reset("SystemDebugSkipCopy")
|
||||
Setup.Reset("SystemSystemCache")
|
||||
Setup.Reset("SystemSystemUpdate")
|
||||
Setup.Reset("SystemSystemActivity")
|
||||
Setup.Reset("SystemSystemTelemetry")
|
||||
Settings.Reset("ToolDownloadThread")
|
||||
Settings.Reset("ToolDownloadSpeed")
|
||||
Settings.Reset("ToolDownloadSource")
|
||||
Settings.Reset("ToolDownloadVersion")
|
||||
Settings.Reset("ToolDownloadTranslateV2")
|
||||
Settings.Reset("ToolDownloadIgnoreQuilt")
|
||||
Settings.Reset("ToolDownloadCert")
|
||||
Settings.Reset("ToolDownloadMod")
|
||||
Settings.Reset("ToolModLocalNameStyle")
|
||||
Settings.Reset("ToolUpdateRelease")
|
||||
Settings.Reset("ToolUpdateSnapshot")
|
||||
Settings.Reset("ToolHelpChinese")
|
||||
Settings.Reset("SystemDebugMode")
|
||||
Settings.Reset("SystemDebugAnim")
|
||||
Settings.Reset("SystemDebugDelay")
|
||||
Settings.Reset("SystemDebugSkipCopy")
|
||||
Settings.Reset("SystemSystemCache")
|
||||
Settings.Reset("SystemSystemUpdate")
|
||||
Settings.Reset("SystemSystemActivity")
|
||||
Settings.Reset("SystemSystemTelemetry")
|
||||
|
||||
Log("[Setup] 已初始化启动器页设置")
|
||||
Hint("已初始化启动器页设置!", HintType.Green, False)
|
||||
@@ -95,16 +95,16 @@
|
||||
|
||||
'将控件改变路由到设置改变
|
||||
Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckDebugMode.Change, CheckDebugDelay.Change, CheckDebugSkipCopy.Change, CheckUpdateRelease.Change, CheckUpdateSnapshot.Change, CheckHelpChinese.Change, CheckDownloadIgnoreQuilt.Change, CheckDownloadCert.Change, CheckSystemTelemetry.Change
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked)
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag, sender.Checked)
|
||||
End Sub
|
||||
Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderDebugAnim.Change, SliderDownloadThread.Change, SliderDownloadSpeed.Change
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value)
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag, sender.Value)
|
||||
End Sub
|
||||
Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboDownloadVersion.SelectionChanged, ComboModLocalNameStyle.SelectionChanged, ComboDownloadTranslateV2.SelectionChanged, ComboSystemUpdate.SelectionChanged, ComboSystemActivity.SelectionChanged, ComboDownloadSource.SelectionChanged, ComboDownloadMod.SelectionChanged
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag, sender.SelectedIndex)
|
||||
End Sub
|
||||
Private Shared Sub TextBoxChange(sender As MyTextBox, e As Object) Handles TextSystemCache.ValidatedTextChanged
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Text)
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag, sender.Text)
|
||||
End Sub
|
||||
|
||||
'滑动条
|
||||
@@ -127,8 +127,8 @@
|
||||
End Sub
|
||||
Private Sub SliderDownloadThread_PreviewChange(sender As Object, e As RouteEventArgs) Handles SliderDownloadThread.PreviewChange
|
||||
If SliderDownloadThread.Value < 100 Then Return
|
||||
If Not Setup.Get("HintDownloadThread") Then
|
||||
Setup.Set("HintDownloadThread", True)
|
||||
If Not Settings.Get("HintDownloadThread") Then
|
||||
Settings.Set("HintDownloadThread", True)
|
||||
MyMsgBox("如果设置过多的下载线程,可能会导致下载时出现非常严重的卡顿。" & vbCrLf &
|
||||
"一般设置 64 线程即可满足大多数下载需求,除非你知道你在干什么,否则不建议设置更多的线程数!", "警告", "我知道了", IsWarn:=True)
|
||||
End If
|
||||
|
||||
@@ -23,15 +23,20 @@
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text="不透明度" Margin="0,0,20,0" />
|
||||
<local:MySlider Grid.ColumnSpan="5" x:Name="SliderLauncherOpacity" Tag="UiLauncherTransparent" MaxValue="600" ValueByKey="10" Grid.Column="1" />
|
||||
<local:MySlider local:SettingService.Key="UiLauncherTransparent"
|
||||
MaxValue="600" ValueByKey="10" Grid.ColumnSpan="5" x:Name="SliderLauncherTransparent" Grid.Column="1" />
|
||||
<TextBlock Grid.Row="1" VerticalAlignment="Center" Name="LabLauncherHue" Visibility="Collapsed" HorizontalAlignment="Left" Text="色调" Margin="0,10,20,0" />
|
||||
<local:MySlider Grid.Row="1" Grid.Column="1" x:Name="SliderLauncherHue" Tag="UiLauncherHue" Visibility="Collapsed" MaxValue="360" ValueByKey="10" Margin="0,10,0,0" />
|
||||
<local:MySlider local:SettingService.Key="UiLauncherHue"
|
||||
Grid.Row="1" Grid.Column="1" x:Name="SliderLauncherHue" Visibility="Collapsed" MaxValue="360" ValueByKey="10" Margin="0,10,0,0" />
|
||||
<TextBlock Grid.Row="2" VerticalAlignment="Center" Name="LabLauncherDelta" Visibility="Collapsed" HorizontalAlignment="Left" Text="色调渐变" Margin="0,10,20,0" />
|
||||
<local:MySlider Grid.Row="2" Grid.Column="1" x:Name="SliderLauncherDelta" Tag="UiLauncherDelta" Visibility="Collapsed" MaxValue="180" ValueByKey="5" Margin="0,10,0,0" />
|
||||
<local:MySlider local:SettingService.Key="UiLauncherDelta"
|
||||
Grid.Row="2" Grid.Column="1" x:Name="SliderLauncherDelta" Visibility="Collapsed" MaxValue="180" ValueByKey="5" Margin="0,10,0,0" />
|
||||
<TextBlock Grid.Row="1" Grid.Column="3" VerticalAlignment="Center" Name="LabLauncherSat" Visibility="Collapsed" HorizontalAlignment="Left" Text="饱和度" Margin="0,10,20,0" />
|
||||
<local:MySlider Grid.Row="1" Grid.Column="4" x:Name="SliderLauncherSat" Tag="UiLauncherSat" Visibility="Collapsed" MaxValue="100" ValueByKey="5" Margin="0,10,0,0" />
|
||||
<local:MySlider local:SettingService.Key="UiLauncherSat"
|
||||
Grid.Row="1" Grid.Column="4" x:Name="SliderLauncherSat" Visibility="Collapsed" MaxValue="100" ValueByKey="5" Margin="0,10,0,0" />
|
||||
<TextBlock Grid.Row="2" Grid.Column="3" VerticalAlignment="Center" Name="LabLauncherLight" Visibility="Collapsed" HorizontalAlignment="Left" Text="亮度" Margin="0,10,20,0" />
|
||||
<local:MySlider Grid.Row="2" Grid.Column="4" x:Name="SliderLauncherLight" Tag="UiLauncherLight" Visibility="Collapsed" MaxValue="40" ValueByKey="5" Margin="0,10,0,0" />
|
||||
<local:MySlider local:SettingService.Key="UiLauncherLight"
|
||||
Grid.Row="2" Grid.Column="4" x:Name="SliderLauncherLight" Visibility="Collapsed" MaxValue="40" ValueByKey="5" Margin="0,10,0,0" />
|
||||
</Grid>
|
||||
<Grid x:Name="PanLauncherTheme" Height="90" Margin="0,0,0,7">
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -49,33 +54,49 @@
|
||||
</Grid.RowDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text="主题" Margin="0,0,20,0" />
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text="隐藏主题" Margin="0,0,20,0" Grid.Row="1" />
|
||||
<local:MyRadioBox Grid.Column="1" Grid.Row="0" Text="龙猫蓝" x:Name="RadioLauncherTheme0" Tag="UiLauncherTheme/0" />
|
||||
<local:MyRadioBox Grid.Column="2" Grid.Row="0" Text="甜柠青" x:Name="RadioLauncherTheme1" Tag="UiLauncherTheme/1" />
|
||||
<local:MyRadioBox Grid.Column="3" Grid.Row="0" Text="小草绿" x:Name="RadioLauncherTheme2" Tag="UiLauncherTheme/2" />
|
||||
<local:MyRadioBox Grid.Column="4" Grid.Row="0" Text="菠萝黄" x:Name="RadioLauncherTheme3" Tag="UiLauncherTheme/3" />
|
||||
<local:MyRadioBox Grid.Column="5" Grid.Row="0" Text="橡木棕" x:Name="RadioLauncherTheme4" Tag="UiLauncherTheme/4" />
|
||||
<local:MyRadioBox Grid.Column="1" Grid.Row="1" Text="玄素黑" x:Name="RadioLauncherTheme5" Tag="UiLauncherTheme/5" Opacity="0" ToolTip="灰色是个谎言" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="1" Grid.Row="1" Text="???" x:Name="RadioLauncherTheme5Gray" IsEnabled="False" Opacity="1" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="0"
|
||||
Grid.Column="1" Grid.Row="0" Text="龙猫蓝" x:Name="RadioLauncherTheme0" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="1"
|
||||
Grid.Column="2" Grid.Row="0" Text="甜柠青" x:Name="RadioLauncherTheme1" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="2"
|
||||
Grid.Column="3" Grid.Row="0" Text="小草绿" x:Name="RadioLauncherTheme2" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="3"
|
||||
Grid.Column="4" Grid.Row="0" Text="菠萝黄" x:Name="RadioLauncherTheme3" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="4"
|
||||
Grid.Column="5" Grid.Row="0" Text="橡木棕" x:Name="RadioLauncherTheme4" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="5"
|
||||
Grid.Column="1" Grid.Row="1" Text="玄素黑" x:Name="RadioLauncherTheme5" Opacity="0" ToolTip="灰色是个谎言" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="1" Grid.Row="1" Text="玄素黑" x:Name="RadioLauncherTheme5Gray" IsEnabled="False" Opacity="1" />
|
||||
<TextBlock Grid.Column="1" Grid.Row="1" x:Name="LabLauncherTheme5Unlock" Background="{StaticResource ColorBrushSemiTransparent}" ToolTip="灰色是个谎言" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="2" Grid.Row="1" Text="???" x:Name="RadioLauncherTheme12" Tag="UiLauncherTheme/12" IsEnabled="False" ToolTip="滑稽树上滑稽果,滑稽树下你和我,滑稽之日搞事情,欢乐多又多" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="3" Grid.Row="1" Text="???" x:Name="RadioLauncherTheme6" Tag="UiLauncherTheme/6" IsEnabled="False" ToolTip="99 次重逢的喜悦" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="4" Grid.Row="1" Text="???" x:Name="RadioLauncherTheme7" Tag="UiLauncherTheme/7" IsEnabled="False" ToolTip="072 101 108 112 032 068 101 118 032 048 046 052 046 052" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="5" Grid.Row="1" Text="???" x:Name="RadioLauncherTheme13" Tag="UiLauncherTheme/13" IsEnabled="False" ToolTip="这就是传说中的欧皇了吧" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="1" Grid.Row="2" Text="???" x:Name="RadioLauncherTheme8" Tag="UiLauncherTheme/8" IsEnabled="False" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="12"
|
||||
Grid.Column="2" Grid.Row="1" Text="滑稽彩" x:Name="RadioLauncherTheme12" IsEnabled="False" ToolTip="滑稽树上滑稽果,滑稽树下你和我,滑稽之日搞事情,欢乐多又多" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="6"
|
||||
Grid.Column="3" Grid.Row="1" Text="铁杆粉" x:Name="RadioLauncherTheme6" IsEnabled="False" ToolTip="99 次重逢的喜悦" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="7"
|
||||
Grid.Column="4" Grid.Row="1" Text="神秘紫" x:Name="RadioLauncherTheme7" IsEnabled="False" ToolTip="072 101 108 112 032 068 101 118 032 048 046 052 046 052" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="13"
|
||||
Grid.Column="5" Grid.Row="1" Text="欧皇彩" x:Name="RadioLauncherTheme13" IsEnabled="False" ToolTip="这就是传说中的欧皇了吧" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="8"
|
||||
Grid.Column="1" Grid.Row="2" Text="秋仪金" x:Name="RadioLauncherTheme8" IsEnabled="False" ToolTipService.Placement="Bottom" />
|
||||
<TextBlock Grid.Column="1" Grid.Row="2" x:Name="LabLauncherTheme8Copy" Background="{StaticResource ColorBrushSemiTransparent}" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="2" Grid.Row="2" Text="???" x:Name="RadioLauncherTheme9" Tag="UiLauncherTheme/9" IsEnabled="False" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="9"
|
||||
Grid.Column="2" Grid.Row="2" Text="活跃橙" x:Name="RadioLauncherTheme9" IsEnabled="False" ToolTipService.Placement="Bottom" />
|
||||
<TextBlock Grid.Column="2" Grid.Row="2" x:Name="LabLauncherTheme9Copy" Background="{StaticResource ColorBrushSemiTransparent}" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="3" Grid.Row="2" Text="???" x:Name="RadioLauncherTheme10" Tag="UiLauncherTheme/10" IsEnabled="False" ToolTip="进行一次正版登录,支持正版游戏!" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="4" Grid.Row="2" Text="???" x:Name="RadioLauncherTheme11" Tag="UiLauncherTheme/11" IsEnabled="False" ToolTipService.Placement="Bottom" ToolTip="右键打开解密游戏入口" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="10"
|
||||
Grid.Column="3" Grid.Row="2" Text="跳票红" x:Name="RadioLauncherTheme10" IsEnabled="False" ToolTip="进行一次正版登录,支持正版游戏!" ToolTipService.ShowOnDisabled="True" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="11"
|
||||
Grid.Column="4" Grid.Row="2" Text="极客蓝" x:Name="RadioLauncherTheme11" IsEnabled="False" ToolTipService.Placement="Bottom" ToolTip="右键打开解密游戏入口" />
|
||||
<TextBlock Grid.Column="4" Grid.Row="2" x:Name="LabLauncherTheme11Click" Background="{StaticResource ColorBrushSemiTransparent}" ToolTipService.Placement="Bottom" />
|
||||
<local:MyRadioBox Grid.Column="5" Grid.Row="2" Text="自定义" x:Name="RadioLauncherTheme14" Tag="UiLauncherTheme/14" IsEnabled="False" ToolTipService.Placement="Bottom" ToolTip="需要解锁五个隐藏主题" ToolTipService.ShowOnDisabled="True" />
|
||||
<local:MyRadioBox local:SettingService.Key="UiLauncherTheme" local:SettingService.Value="14"
|
||||
Grid.Column="5" Grid.Row="2" Text="自定义" x:Name="RadioLauncherTheme14" IsEnabled="False" ToolTipService.Placement="Bottom" ToolTip="需要解锁五个隐藏主题" ToolTipService.ShowOnDisabled="True" />
|
||||
</Grid>
|
||||
<local:MyCheckBox Text="打开启动器时显示 PCL 图标" Margin="-1,0,0,1" Height="22" x:Name="CheckLauncherLogo" Tag="UiLauncherLogo" />
|
||||
<local:MyCheckBox local:SettingService.Key="UiLauncherLogo" Text="打开启动器时显示 PCL 图标" Margin="-1,0,0,1" Height="22" />
|
||||
</StackPanel>
|
||||
<Border Background="#DDDDDDDD" Margin="-8,23,-5,28" CornerRadius="4" Name="PanLauncherHide" Visibility="Collapsed">
|
||||
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
|
||||
<TextBlock Text="如果可以小小赞助一下 PCL,就能解锁主题颜色更换功能啦……
多亏了大家的支持,PCL 才能在免费、无任何广告的情况下维持数年的更新(磕头)!" FontSize="13" Margin="0,0,0,0" />
|
||||
<local:MyButton Height="32" x:Name="BtnLauncherDonate" MinWidth="140" Text="支持 PCL 开发!" Padding="13,0" HorizontalAlignment="Center" Margin="0,9,0,0" ColorType="Highlight" />
|
||||
<local:MyButton Height="32" MinWidth="140" Text="支持 PCL 开发!" Padding="13,0" HorizontalAlignment="Center" Margin="0,9,0,0" ColorType="Highlight"
|
||||
local:CustomEventService.EventType="打开网页" local:CustomEventService.EventData="https://meloong.com/afd/a/LTCat" />
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</Grid>
|
||||
@@ -88,20 +109,20 @@
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text="自适应方式" Margin="0,0,25,0" />
|
||||
<local:MyComboBox x:Name="ComboBackgroundSuit" Tag="UiBackgroundSuit" Grid.Column="1">
|
||||
<local:MyComboBoxItem Content="智能" IsSelected="True" ToolTip="当图片较小时选择平铺,较大时选择适应" />
|
||||
<local:MyComboBoxItem Content="居中" />
|
||||
<local:MyComboBoxItem Content="适应" ToolTip="拉伸图片并保持长宽比不变,直至填满整个窗口" />
|
||||
<local:MyComboBoxItem Content="拉伸" ToolTip="拉伸图片使其恰好填满整个窗口,很可能会导致长宽比的改变" />
|
||||
<local:MyComboBoxItem Content="平铺" />
|
||||
<local:MyComboBoxItem Content="左上" />
|
||||
<local:MyComboBoxItem Content="右上" />
|
||||
<local:MyComboBoxItem Content="左下" />
|
||||
<local:MyComboBoxItem Content="右下" />
|
||||
<local:MyComboBoxItem Content="左" />
|
||||
<local:MyComboBoxItem Content="右" />
|
||||
<local:MyComboBoxItem Content="上" />
|
||||
<local:MyComboBoxItem Content="下" />
|
||||
<local:MyComboBox local:SettingService.Key="UiBackgroundSuit" Grid.Column="1">
|
||||
<local:MyComboBoxItem local:SettingService.Value="0" Content="自动" ToolTip="当图片较小时选择平铺,较大时选择居中 (保持长宽比)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="4" Content="平铺" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="1" Content="居中" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="3" Content="拉伸" ToolTip="拉伸图片使其恰好填满整个窗口,很可能会导致长宽比的改变" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="5" Content="左上 (保持长宽比)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="9" Content="左中 (保持长宽比)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="7" Content="左下 (保持长宽比)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="11" Content="中上 (保持长宽比)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="2" Content="居中 (保持长宽比)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="12" Content="中下 (保持长宽比)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="6" Content="右上 (保持长宽比)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="10" Content="右中 (保持长宽比)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="8" Content="右下 (保持长宽比)" />
|
||||
</local:MyComboBox>
|
||||
</Grid>
|
||||
<Grid x:Name="PanBackgroundOpacity" Height="22" Margin="0,0,0,7" Visibility="Collapsed">
|
||||
@@ -110,7 +131,7 @@
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text="不透明度" Margin="0,0,25,0" />
|
||||
<local:MySlider x:Name="SliderBackgroundOpacity" Tag="UiBackgroundOpacity" MaxValue="1000" ValueByKey="10" Grid.Column="1" />
|
||||
<local:MySlider local:SettingService.Key="UiBackgroundOpacity" x:Name="SliderBackgroundOpacity" MaxValue="1000" ValueByKey="10" Grid.Column="1" />
|
||||
</Grid>
|
||||
<Grid x:Name="PanBackgroundBlur" Height="22" Margin="0,0,0,10" Visibility="Collapsed">
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -118,9 +139,10 @@
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text="背景模糊" Margin="0,0,25,0" />
|
||||
<local:MySlider x:Name="SliderBackgroundBlur" Tag="UiBackgroundBlur" MaxValue="40" Grid.Column="1" ToolTip="较强的模糊会导致启动器严重掉帧,请谨慎使用。 不建议在制作整合包时开启模糊,以确保 PCL 在低性能电脑上可以流畅运行。" />
|
||||
<local:MySlider local:SettingService.Key="UiBackgroundBlur" x:Name="SliderBackgroundBlur" MaxValue="40" Grid.Column="1"
|
||||
ToolTip="高度的模糊会严重掉帧,请谨慎。 不建议在制作整合包时开启模糊,以确保 PCL 在低性能电脑上可以流畅运行。" />
|
||||
</Grid>
|
||||
<local:MyCheckBox Text="叠加彩色背景" Margin="-1,0,0,8" Height="22" x:Name="CheckBackgroundColorful" Tag="UiBackgroundColorful" />
|
||||
<local:MyCheckBox local:SettingService.Key="UiBackgroundColorful" Text="叠加彩色背景" Margin="-1,0,0,8" Height="22" />
|
||||
<Grid Height="35" Margin="0,2,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
|
||||
@@ -243,23 +265,23 @@
|
||||
<ColumnDefinition />
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Left" Text="主页预设" Margin="0,0,25,0" />
|
||||
<local:MyComboBox x:Name="ComboCustomPreset" Grid.ColumnSpan="2" Tag="UiCustomPreset" Grid.Column="1">
|
||||
<local:MyComboBoxItem Content="你知道吗?" IsSelected="True" />
|
||||
<local:MyComboBoxItem Content="回声洞" />
|
||||
<local:MyComboBoxItem Content="Minecraft 新闻(作者:最亮的信标)" />
|
||||
<local:MyComboBoxItem Content="简单主页(作者:MFn233)" />
|
||||
<local:MyComboBoxItem Content="每日整合包推荐(作者:wkea)" />
|
||||
<local:MyComboBoxItem Content="Minecraft 皮肤推荐(作者:wkea)" />
|
||||
<local:MyComboBoxItem Content="OpenBMCLAPI 仪表盘 Lite(作者:Silverteal、Mxmilu666)" />
|
||||
<local:MyComboBoxItem Content="PCL 主页市场(作者:凌云)" />
|
||||
<local:MyComboBoxItem Content="PCL 新闻速报(作者:Joker2184)" Visibility="Collapsed" />
|
||||
<local:MyComboBoxItem Content="PCL 新功能说明书(作者:WForst-Breeze)" />
|
||||
<local:MyComboBoxItem Content="OpenMCIM 仪表盘(作者:SALTWOOD)" Visibility="Collapsed" />
|
||||
<local:MyComboBoxItem Content="杂志主页(作者:CreeperIsASpy)" />
|
||||
<local:MyComboBoxItem Content="PCL GitHub 仪表盘(作者:Deep-Dark-Forest)" />
|
||||
<local:MyComboBoxItem Content="Minecraft 更新摘要(作者:pynickle,部分由 AI 生成)" />
|
||||
<local:MyComboBoxItem Content="今日新闻热点(作者:EYicheng,部分由 AI 生成)" />
|
||||
<local:MyComboBoxItem Content="Minecraft 芝士站(作者:awaEric233,部分由 AI 生成)" />
|
||||
<local:MyComboBox local:SettingService.Key="UiCustomPreset" Grid.ColumnSpan="2" Grid.Column="1">
|
||||
<local:MyComboBoxItem local:SettingService.Value="0" Content="你知道吗?" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="1" Content="回声洞" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="2" Content="Minecraft 新闻(作者:最亮的信标)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="3" Content="简单主页(作者:MFn233)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="4" Content="每日整合包推荐(作者:wkea)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="5" Content="Minecraft 皮肤推荐(作者:wkea)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="6" Content="OpenBMCLAPI 仪表盘 Lite(作者:Silverteal、Mxmilu666)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="7" Content="PCL 主页市场(作者:凌云)" />
|
||||
<!--<local:MyComboBoxItem local:SettingService.Value="8" Content="PCL 新闻速报(作者:Joker2184)" />-->
|
||||
<local:MyComboBoxItem local:SettingService.Value="9" Content="PCL 新功能说明书(作者:WForst-Breeze)" />
|
||||
<!--<local:MyComboBoxItem local:SettingService.Value="10" Content="OpenMCIM 仪表盘(作者:SALTWOOD)" />-->
|
||||
<local:MyComboBoxItem local:SettingService.Value="11" Content="杂志主页(作者:CreeperIsASpy)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="12" Content="PCL GitHub 仪表盘(作者:Deep-Dark-Forest)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="13" Content="Minecraft 更新摘要(作者:pynickle)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="14" Content="今日新闻热点(作者:EYicheng)" />
|
||||
<local:MyComboBoxItem local:SettingService.Value="15" Content="Minecraft 芝士站(作者:awaEric233)" />
|
||||
</local:MyComboBox>
|
||||
</Grid>
|
||||
</StackPanel>
|
||||
|
||||
@@ -1,37 +1,30 @@
|
||||
Public Class PageSetupUI
|
||||
|
||||
Public Shadows IsLoaded As Boolean = False
|
||||
|
||||
Private Sub PageSetupUI_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
||||
|
||||
'重复加载部分
|
||||
PanBack.ScrollToHome()
|
||||
ThemeCheckAll(True)
|
||||
|
||||
If ThemeDontClick <> 0 Then
|
||||
Dim NewText As String
|
||||
Dim NewText As String = Nothing
|
||||
Select Case ThemeDontClick
|
||||
Case 1
|
||||
NewText = "眼瞎白"
|
||||
Case 2
|
||||
NewText = "真·滑稽彩"
|
||||
Case Else
|
||||
NewText = "???"
|
||||
End Select
|
||||
For Each Control In PanLauncherTheme.Children
|
||||
If (TypeOf Control Is MyRadioBox) AndAlso CType(Control, MyRadioBox).IsEnabled Then
|
||||
CType(Control, MyRadioBox).Text = NewText
|
||||
End If
|
||||
If (TypeOf Control Is MyRadioBox) AndAlso CType(Control, MyRadioBox).IsEnabled Then CType(Control, MyRadioBox).Text = NewText
|
||||
Next
|
||||
End If
|
||||
|
||||
AniControlEnabled += 1
|
||||
Reload() '#4826,在每次进入页面时都刷新一下
|
||||
Refresh() '#4826
|
||||
AniControlEnabled -= 1
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoaded Then Return
|
||||
IsLoaded = True
|
||||
Static Reloaded As Boolean = False
|
||||
If Reloaded Then Return
|
||||
Reloaded = True
|
||||
|
||||
SliderLoad()
|
||||
|
||||
@@ -47,68 +40,50 @@
|
||||
'极客蓝的处理在 ThemeCheck 中
|
||||
|
||||
End Sub
|
||||
Public Sub Reload()
|
||||
Public Sub Refresh()
|
||||
Try
|
||||
|
||||
'启动器
|
||||
SliderLauncherOpacity.Value = Setup.Get("UiLauncherTransparent")
|
||||
SliderLauncherHue.Value = Setup.Get("UiLauncherHue")
|
||||
SliderLauncherSat.Value = Setup.Get("UiLauncherSat")
|
||||
SliderLauncherDelta.Value = Setup.Get("UiLauncherDelta")
|
||||
SliderLauncherLight.Value = Setup.Get("UiLauncherLight")
|
||||
If Setup.Get("UiLauncherTheme") <= 14 Then CType(FindName("RadioLauncherTheme" & Setup.Get("UiLauncherTheme")), MyRadioBox).Checked = True
|
||||
CheckLauncherLogo.Checked = Setup.Get("UiLauncherLogo")
|
||||
CheckLauncherEmail.Checked = Setup.Get("UiLauncherEmail")
|
||||
|
||||
'背景图片
|
||||
SliderBackgroundOpacity.Value = Setup.Get("UiBackgroundOpacity")
|
||||
SliderBackgroundBlur.Value = Setup.Get("UiBackgroundBlur")
|
||||
ComboBackgroundSuit.SelectedIndex = Setup.Get("UiBackgroundSuit")
|
||||
CheckBackgroundColorful.Checked = Setup.Get("UiBackgroundColorful")
|
||||
SettingService.RefreshSettings(Me)
|
||||
BackgroundRefresh(False, False)
|
||||
|
||||
'标题栏
|
||||
CType(FindName("RadioLogoType" & Setup.Get("UiLogoType")), MyRadioBox).Checked = True
|
||||
CType(FindName("RadioLogoType" & Settings.Get("UiLogoType")), MyRadioBox).Checked = True
|
||||
CheckLogoLeft.Visibility = If(RadioLogoType0.Checked, Visibility.Visible, Visibility.Collapsed)
|
||||
PanLogoText.Visibility = If(RadioLogoType2.Checked, Visibility.Visible, Visibility.Collapsed)
|
||||
PanLogoChange.Visibility = If(RadioLogoType3.Checked, Visibility.Visible, Visibility.Collapsed)
|
||||
TextLogoText.Text = Setup.Get("UiLogoText")
|
||||
CheckLogoLeft.Checked = Setup.Get("UiLogoLeft")
|
||||
TextLogoText.Text = Settings.Get("UiLogoText")
|
||||
CheckLogoLeft.Checked = Settings.Get("UiLogoLeft")
|
||||
|
||||
'背景音乐
|
||||
CheckMusicRandom.Checked = Setup.Get("UiMusicRandom")
|
||||
CheckMusicAuto.Checked = Setup.Get("UiMusicAuto")
|
||||
CheckMusicStop.Checked = Setup.Get("UiMusicStop")
|
||||
CheckMusicStart.Checked = Setup.Get("UiMusicStart")
|
||||
SliderMusicVolume.Value = Setup.Get("UiMusicVolume")
|
||||
CheckMusicRandom.Checked = Settings.Get("UiMusicRandom")
|
||||
CheckMusicAuto.Checked = Settings.Get("UiMusicAuto")
|
||||
CheckMusicStop.Checked = Settings.Get("UiMusicStop")
|
||||
CheckMusicStart.Checked = Settings.Get("UiMusicStart")
|
||||
SliderMusicVolume.Value = Settings.Get("UiMusicVolume")
|
||||
MusicRefreshUI()
|
||||
|
||||
'主页
|
||||
Try
|
||||
ComboCustomPreset.SelectedIndex = Setup.Get("UiCustomPreset")
|
||||
Catch
|
||||
Setup.Reset("UiCustomPreset")
|
||||
End Try
|
||||
CType(FindName("RadioCustomType" & Setup.Load("UiCustomType", ForceReload:=True)), MyRadioBox).Checked = True
|
||||
TextCustomNet.Text = Setup.Get("UiCustomNet")
|
||||
CType(FindName("RadioCustomType" & Settings.Get("UiCustomType")), MyRadioBox).Checked = True
|
||||
OnUiCustomTypeChanged(Settings.Get("UiCustomType"))
|
||||
TextCustomNet.Text = Settings.Get("UiCustomNet")
|
||||
|
||||
'功能隐藏
|
||||
CheckHiddenPageDownload.Checked = Setup.Get("UiHiddenPageDownload")
|
||||
CheckHiddenPageLink.Checked = Setup.Get("UiHiddenPageLink")
|
||||
CheckHiddenPageSetup.Checked = Setup.Get("UiHiddenPageSetup")
|
||||
CheckHiddenPageOther.Checked = Setup.Get("UiHiddenPageOther")
|
||||
CheckHiddenFunctionSelect.Checked = Setup.Get("UiHiddenFunctionSelect")
|
||||
CheckHiddenFunctionModUpdate.Checked = Setup.Get("UiHiddenFunctionModUpdate")
|
||||
CheckHiddenFunctionHidden.Checked = Setup.Get("UiHiddenFunctionHidden")
|
||||
CheckHiddenSetupLaunch.Checked = Setup.Get("UiHiddenSetupLaunch")
|
||||
CheckHiddenSetupUI.Checked = Setup.Get("UiHiddenSetupUi")
|
||||
CheckHiddenSetupLink.Checked = Setup.Get("UiHiddenSetupLink")
|
||||
CheckHiddenSetupSystem.Checked = Setup.Get("UiHiddenSetupSystem")
|
||||
CheckHiddenOtherAbout.Checked = Setup.Get("UiHiddenOtherAbout")
|
||||
CheckHiddenOtherFeedback.Checked = Setup.Get("UiHiddenOtherFeedback")
|
||||
CheckHiddenOtherVote.Checked = Setup.Get("UiHiddenOtherVote")
|
||||
CheckHiddenOtherHelp.Checked = Setup.Get("UiHiddenOtherHelp")
|
||||
CheckHiddenOtherTest.Checked = Setup.Get("UiHiddenOtherTest")
|
||||
CheckLauncherEmail.Checked = Settings.Get("UiLauncherEmail")
|
||||
CheckHiddenPageDownload.Checked = Settings.Get("UiHiddenPageDownload")
|
||||
CheckHiddenPageLink.Checked = Settings.Get("UiHiddenPageLink")
|
||||
CheckHiddenPageSetup.Checked = Settings.Get("UiHiddenPageSetup")
|
||||
CheckHiddenPageOther.Checked = Settings.Get("UiHiddenPageOther")
|
||||
CheckHiddenFunctionSelect.Checked = Settings.Get("UiHiddenFunctionSelect")
|
||||
CheckHiddenFunctionModUpdate.Checked = Settings.Get("UiHiddenFunctionModUpdate")
|
||||
CheckHiddenFunctionHidden.Checked = Settings.Get("UiHiddenFunctionHidden")
|
||||
CheckHiddenSetupLaunch.Checked = Settings.Get("UiHiddenSetupLaunch")
|
||||
CheckHiddenSetupUI.Checked = Settings.Get("UiHiddenSetupUi")
|
||||
CheckHiddenSetupLink.Checked = Settings.Get("UiHiddenSetupLink")
|
||||
CheckHiddenSetupSystem.Checked = Settings.Get("UiHiddenSetupSystem")
|
||||
CheckHiddenOtherAbout.Checked = Settings.Get("UiHiddenOtherAbout")
|
||||
CheckHiddenOtherFeedback.Checked = Settings.Get("UiHiddenOtherFeedback")
|
||||
CheckHiddenOtherVote.Checked = Settings.Get("UiHiddenOtherVote")
|
||||
CheckHiddenOtherHelp.Checked = Settings.Get("UiHiddenOtherHelp")
|
||||
CheckHiddenOtherTest.Checked = Settings.Get("UiHiddenOtherTest")
|
||||
|
||||
Catch ex As NullReferenceException
|
||||
Log(ex, "个性化设置项存在异常,已被自动重置", LogLevel.Msgbox)
|
||||
@@ -121,45 +96,35 @@
|
||||
'初始化
|
||||
Public Sub Reset()
|
||||
Try
|
||||
Setup.Reset("UiLauncherTransparent")
|
||||
Setup.Reset("UiLauncherTheme")
|
||||
Setup.Reset("UiLauncherLogo")
|
||||
Setup.Reset("UiLauncherHue")
|
||||
Setup.Reset("UiLauncherSat")
|
||||
Setup.Reset("UiLauncherDelta")
|
||||
Setup.Reset("UiLauncherLight")
|
||||
Setup.Reset("UiLauncherEmail")
|
||||
Setup.Reset("UiBackgroundColorful")
|
||||
Setup.Reset("UiBackgroundOpacity")
|
||||
Setup.Reset("UiBackgroundBlur")
|
||||
Setup.Reset("UiBackgroundSuit")
|
||||
Setup.Reset("UiLogoType")
|
||||
Setup.Reset("UiLogoText")
|
||||
Setup.Reset("UiLogoLeft")
|
||||
Setup.Reset("UiMusicVolume")
|
||||
Setup.Reset("UiMusicStop")
|
||||
Setup.Reset("UiMusicStart")
|
||||
Setup.Reset("UiMusicRandom")
|
||||
Setup.Reset("UiMusicAuto")
|
||||
Setup.Reset("UiCustomType")
|
||||
Setup.Reset("UiCustomPreset")
|
||||
Setup.Reset("UiCustomNet")
|
||||
Setup.Reset("UiHiddenPageDownload")
|
||||
Setup.Reset("UiHiddenPageLink")
|
||||
Setup.Reset("UiHiddenPageSetup")
|
||||
Setup.Reset("UiHiddenPageOther")
|
||||
Setup.Reset("UiHiddenFunctionSelect")
|
||||
Setup.Reset("UiHiddenFunctionModUpdate")
|
||||
Setup.Reset("UiHiddenFunctionHidden")
|
||||
Setup.Reset("UiHiddenSetupLaunch")
|
||||
Setup.Reset("UiHiddenSetupUi")
|
||||
Setup.Reset("UiHiddenSetupLink")
|
||||
Setup.Reset("UiHiddenSetupSystem")
|
||||
Setup.Reset("UiHiddenOtherAbout")
|
||||
Setup.Reset("UiHiddenOtherFeedback")
|
||||
Setup.Reset("UiHiddenOtherVote")
|
||||
Setup.Reset("UiHiddenOtherHelp")
|
||||
Setup.Reset("UiHiddenOtherTest")
|
||||
SettingService.ResetSettings(Me)
|
||||
Settings.Reset("UiLauncherLogo")
|
||||
Settings.Reset("UiLauncherEmail")
|
||||
Settings.Reset("UiLogoType")
|
||||
Settings.Reset("UiLogoText")
|
||||
Settings.Reset("UiLogoLeft")
|
||||
Settings.Reset("UiMusicVolume")
|
||||
Settings.Reset("UiMusicStop")
|
||||
Settings.Reset("UiMusicStart")
|
||||
Settings.Reset("UiMusicRandom")
|
||||
Settings.Reset("UiMusicAuto")
|
||||
Settings.Reset("UiCustomType")
|
||||
Settings.Reset("UiCustomNet")
|
||||
Settings.Reset("UiHiddenPageDownload")
|
||||
Settings.Reset("UiHiddenPageLink")
|
||||
Settings.Reset("UiHiddenPageSetup")
|
||||
Settings.Reset("UiHiddenPageOther")
|
||||
Settings.Reset("UiHiddenFunctionSelect")
|
||||
Settings.Reset("UiHiddenFunctionModUpdate")
|
||||
Settings.Reset("UiHiddenFunctionHidden")
|
||||
Settings.Reset("UiHiddenSetupLaunch")
|
||||
Settings.Reset("UiHiddenSetupUi")
|
||||
Settings.Reset("UiHiddenSetupLink")
|
||||
Settings.Reset("UiHiddenSetupSystem")
|
||||
Settings.Reset("UiHiddenOtherAbout")
|
||||
Settings.Reset("UiHiddenOtherFeedback")
|
||||
Settings.Reset("UiHiddenOtherVote")
|
||||
Settings.Reset("UiHiddenOtherHelp")
|
||||
Settings.Reset("UiHiddenOtherTest")
|
||||
|
||||
Log("[Setup] 已初始化个性化设置!")
|
||||
Hint("已初始化个性化设置", HintType.Green, False)
|
||||
@@ -167,24 +132,21 @@
|
||||
Log(ex, "初始化个性化设置失败", LogLevel.Msgbox)
|
||||
End Try
|
||||
|
||||
Reload()
|
||||
Refresh()
|
||||
End Sub
|
||||
|
||||
'将控件改变路由到设置改变
|
||||
Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderBackgroundOpacity.Change, SliderBackgroundBlur.Change, SliderLauncherOpacity.Change, SliderMusicVolume.Change, SliderLauncherHue.Change, SliderLauncherLight.Change, SliderLauncherSat.Change, SliderLauncherDelta.Change
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value)
|
||||
Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderMusicVolume.Change
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag, sender.Value)
|
||||
End Sub
|
||||
Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboBackgroundSuit.SelectionChanged, ComboCustomPreset.SelectionChanged
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex)
|
||||
End Sub
|
||||
Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckMusicStop.Change, CheckMusicRandom.Change, CheckMusicAuto.Change, CheckBackgroundColorful.Change, CheckLogoLeft.Change, CheckLauncherLogo.Change, CheckHiddenFunctionHidden.Change, CheckHiddenFunctionSelect.Change, CheckHiddenFunctionModUpdate.Change, CheckHiddenPageDownload.Change, CheckHiddenPageLink.Change, CheckHiddenPageOther.Change, CheckHiddenPageSetup.Change, CheckHiddenSetupLaunch.Change, CheckHiddenSetupSystem.Change, CheckHiddenSetupLink.Change, CheckHiddenSetupUI.Change, CheckHiddenOtherAbout.Change, CheckHiddenOtherFeedback.Change, CheckHiddenOtherVote.Change, CheckHiddenOtherHelp.Change, CheckHiddenOtherTest.Change, CheckMusicStart.Change, CheckLauncherEmail.Change
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked)
|
||||
Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckMusicStop.Change, CheckMusicRandom.Change, CheckMusicAuto.Change, CheckLogoLeft.Change, CheckHiddenFunctionHidden.Change, CheckHiddenFunctionSelect.Change, CheckHiddenFunctionModUpdate.Change, CheckHiddenPageDownload.Change, CheckHiddenPageLink.Change, CheckHiddenPageOther.Change, CheckHiddenPageSetup.Change, CheckHiddenSetupLaunch.Change, CheckHiddenSetupSystem.Change, CheckHiddenSetupLink.Change, CheckHiddenSetupUI.Change, CheckHiddenOtherAbout.Change, CheckHiddenOtherFeedback.Change, CheckHiddenOtherVote.Change, CheckHiddenOtherHelp.Change, CheckHiddenOtherTest.Change, CheckMusicStart.Change, CheckLauncherEmail.Change
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag, sender.Checked)
|
||||
End Sub
|
||||
Private Shared Sub TextBoxChange(sender As MyTextBox, e As Object) Handles TextLogoText.ValidatedTextChanged, TextCustomNet.ValidatedTextChanged
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Text)
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag, sender.Text)
|
||||
End Sub
|
||||
Private Shared Sub RadioBoxChange(sender As MyRadioBox, e As Object) Handles RadioLogoType0.Check, RadioLogoType1.Check, RadioLogoType2.Check, RadioLogoType3.Check, RadioLauncherTheme0.Check, RadioLauncherTheme1.Check, RadioLauncherTheme2.Check, RadioLauncherTheme3.Check, RadioLauncherTheme4.Check, RadioLauncherTheme5.Check, RadioLauncherTheme6.Check, RadioLauncherTheme7.Check, RadioLauncherTheme8.Check, RadioLauncherTheme9.Check, RadioLauncherTheme10.Check, RadioLauncherTheme11.Check, RadioLauncherTheme12.Check, RadioLauncherTheme13.Check, RadioLauncherTheme14.Check, RadioCustomType0.Check, RadioCustomType1.Check, RadioCustomType2.Check, RadioCustomType3.Check
|
||||
If AniControlEnabled = 0 Then Setup.Set(sender.Tag.ToString.Split("/")(0), Val(sender.Tag.ToString.Split("/")(1)))
|
||||
Private Shared Sub RadioBoxChange(sender As MyRadioBox, e As Object) Handles RadioLogoType0.Check, RadioLogoType1.Check, RadioLogoType2.Check, RadioLogoType3.Check, RadioCustomType0.Check, RadioCustomType1.Check, RadioCustomType2.Check, RadioCustomType3.Check
|
||||
If AniControlEnabled = 0 Then Settings.Set(sender.Tag.ToString.Split("/")(0), Val(sender.Tag.ToString.Split("/")(1)))
|
||||
End Sub
|
||||
|
||||
'背景图片
|
||||
@@ -230,7 +192,7 @@
|
||||
Directory.CreateDirectory(Path & "PCL\Pictures\")
|
||||
Dim Pic As New List(Of String)
|
||||
For Each File In EnumerateFiles(Path & "PCL\Pictures\")
|
||||
If File.Extension.ToLower <> ".ini" AndAlso File.Extension.ToLower <> ".db" Then '文件夹可能会被加入 .ini 和 thumbs.db
|
||||
If File.Extension.Lower <> ".ini" AndAlso File.Extension.Lower <> ".db" Then '文件夹可能会被加入 .ini 和 thumbs.db
|
||||
Pic.Add(File.FullName)
|
||||
End If
|
||||
Next
|
||||
@@ -251,8 +213,8 @@
|
||||
Try
|
||||
Log("[UI] 加载背景图片:" & Address)
|
||||
FrmMain.ImgBack.Background = New MyBitmap(Address)
|
||||
Setup.Load("UiBackgroundSuit", True)
|
||||
FrmMain.ImgBack.Visibility = Visibility.Visible
|
||||
FrmMain.UpdateBackgroundAndTitleBar()
|
||||
If IsHint Then Hint("背景图片已刷新:" & GetFileNameFromPath(Address), HintType.Green, False)
|
||||
Catch ex As Exception
|
||||
If ex.Message.Contains("参数无效") Then
|
||||
@@ -358,7 +320,7 @@ Refresh:
|
||||
PanMusicDetail.Visibility = Visibility.Visible
|
||||
BtnMusicClear.Visibility = Visibility.Visible
|
||||
CardMusic.Title = "背景音乐(" &
|
||||
EnumerateFiles(Path & "PCL\Musics\").Count(Function(f) Not {".ini", ".jpg", ".txt", ".cfg", ".lrc", ".db", ".png"}.Contains(f.Extension.ToLower)) &
|
||||
EnumerateFiles(Path & "PCL\Musics\").Count(Function(f) Not {".ini", ".jpg", ".txt", ".cfg", ".lrc", ".db", ".png"}.Contains(f.Extension.Lower)) &
|
||||
" 首)"
|
||||
Else
|
||||
PanMusicVolume.Visibility = Visibility.Collapsed
|
||||
@@ -428,16 +390,51 @@ Refresh:
|
||||
"你可以在生成教学文件后直接刷新主页,对照着进行修改,更有助于理解。" & vbCrLf &
|
||||
"直接将主页文件拖进 PCL 窗口也可以快捷加载。", "主页自定义教程")
|
||||
End Sub
|
||||
Public Shared Sub OnUiCustomTypeChanged(Value As Integer)
|
||||
If FrmSetupUI Is Nothing Then Return
|
||||
Select Case Value
|
||||
Case 0 '无
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
|
||||
Case 1 '本地
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Visible
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.HintCustom.Text = $"从 PCL 文件夹下的 Custom.xaml 读取主页内容。{vbCrLf}你可以手动编辑该文件,向主页添加文本、图片、常用网站、快捷启动等功能。"
|
||||
CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.None)
|
||||
Case 2 '联网
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustomWarn.Visibility = If(Settings.Get("HintCustomWarn"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.HintCustom.Text = $"从指定网址联网获取主页内容。服主也可以用于动态更新服务器公告。{vbCrLf}如果你制作了稳定运行的联网主页,可以点击这条提示投稿,若合格即可加入预设!"
|
||||
CustomEventService.SetEventType(FrmSetupUI.HintCustom, CustomEvent.EventType.打开网页)
|
||||
CustomEventService.SetEventData(FrmSetupUI.HintCustom, "https://github.com/Meloong-Git/PCL/discussions/2528")
|
||||
Case 3 '预设
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Visible
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustomWarn.Visibility = Visibility.Collapsed
|
||||
End Select
|
||||
FrmSetupUI.CardCustom.TriggerForceResize()
|
||||
End Sub
|
||||
|
||||
'主题
|
||||
Private Sub LabLauncherTheme5Unlock_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles LabLauncherTheme5Unlock.MouseLeftButtonUp
|
||||
RadioLauncherTheme5Gray.Opacity -= 0.23
|
||||
RadioLauncherTheme5.Opacity += 0.23
|
||||
RadioLauncherTheme5Gray.Opacity -= 0.7
|
||||
RadioLauncherTheme5.Opacity += 0.7
|
||||
AniStart({
|
||||
AaOpacity(RadioLauncherTheme5Gray, 1, 1000 * AniSpeed),
|
||||
AaOpacity(RadioLauncherTheme5, -1, 1000 * AniSpeed)
|
||||
AaOpacity(RadioLauncherTheme5Gray, 1, 1000 * AniSpeed, 500 * AniSpeed, New AniEaseInFluent),
|
||||
AaOpacity(RadioLauncherTheme5, -1, 1000 * AniSpeed, 500 * AniSpeed, New AniEaseInFluent)
|
||||
}, "ThemeUnlock")
|
||||
If RadioLauncherTheme5Gray.Opacity < 0.08 Then
|
||||
If RadioLauncherTheme5Gray.Opacity < 0.02 Then
|
||||
ThemeUnlock(5, UnlockHint:="隐藏主题 玄素黑 已解锁!")
|
||||
AniStop("ThemeUnlock")
|
||||
RadioLauncherTheme5.Checked = True
|
||||
@@ -452,12 +449,12 @@ Refresh:
|
||||
"若违规,可能会被从任意相关群中踢出!",
|
||||
"解密游戏的基本规则", "我知道了", "恕我拒绝") = 1 Then
|
||||
MyMsgBox("你需要用自己的智慧来找到下一步的线索……" & vbCrLf &
|
||||
"初始线索:gnp.dorC61\60\20\0202\moc.x1xa.2s\\:sp" & "T".ToLower & "th", "解密游戏") '防止触发病毒检测规则
|
||||
"初始线索:gnp.dorC61\60\20\0202\moc.x1xa.2s\\:sp" & "T".Lower & "th", "解密游戏") '防止触发病毒检测规则
|
||||
End If
|
||||
End If
|
||||
End Sub
|
||||
Private Sub LabLauncherTheme8Copy_MouseRightButtonUp() Handles LabLauncherTheme8Copy.MouseRightButtonUp, RadioLauncherTheme8.MouseRightButtonUp
|
||||
OpenWebsite("https://afdian.com/a/LTCat")
|
||||
OpenWebsite("https://meloong.com/afd/a/LTCat")
|
||||
End Sub
|
||||
Private Sub LabLauncherTheme9Copy_MouseRightButtonUp() Handles LabLauncherTheme9Copy.MouseRightButtonUp, RadioLauncherTheme9.MouseRightButtonUp
|
||||
PageOtherLeft.TryFeedback()
|
||||
@@ -516,56 +513,56 @@ Refresh:
|
||||
If FrmMain.PanTitleSelect Is Nothing OrElse Not FrmMain.PanTitleSelect.IsLoaded Then Return
|
||||
Try
|
||||
'顶部栏
|
||||
If Not HiddenForceShow AndAlso Setup.Get("UiHiddenPageDownload") AndAlso Setup.Get("UiHiddenPageLink") AndAlso Setup.Get("UiHiddenPageSetup") AndAlso Setup.Get("UiHiddenPageOther") Then
|
||||
If Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageDownload") AndAlso Settings.Get("UiHiddenPageLink") AndAlso Settings.Get("UiHiddenPageSetup") AndAlso Settings.Get("UiHiddenPageOther") Then
|
||||
'顶部栏已被全部隐藏
|
||||
FrmMain.PanTitleSelect.Visibility = Visibility.Collapsed
|
||||
Else
|
||||
'顶部栏未被全部隐藏
|
||||
FrmMain.PanTitleSelect.Visibility = Visibility.Visible
|
||||
FrmMain.BtnTitleSelect1.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenPageDownload"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect2.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenPageLink"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect3.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenPageSetup"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect4.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenPageOther"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect1.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageDownload"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect2.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageLink"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect3.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageSetup"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmMain.BtnTitleSelect4.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenPageOther"), Visibility.Collapsed, Visibility.Visible)
|
||||
End If
|
||||
'功能
|
||||
FrmLaunchLeft.RefreshButtonsUI()
|
||||
If FrmSetupUI IsNot Nothing Then
|
||||
FrmSetupUI.CardSwitch.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenFunctionHidden"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupUI.CardSwitch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenFunctionHidden"), Visibility.Collapsed, Visibility.Visible)
|
||||
End If
|
||||
'设置子页面
|
||||
If FrmSetupLeft IsNot Nothing Then
|
||||
FrmSetupLeft.ItemLaunch.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenSetupLaunch"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemUI.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenSetupUi"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemLink.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenSetupLink"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemSystem.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenSetupSystem"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemLaunch.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenSetupLaunch"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemUI.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenSetupUi"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemLink.Visibility = Visibility.Collapsed 'If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenSetupLink"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmSetupLeft.ItemSystem.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenSetupSystem"), Visibility.Collapsed, Visibility.Visible)
|
||||
'隐藏左边选择卡
|
||||
Dim AvaliableCount As Integer = 0
|
||||
If Not Setup.Get("UiHiddenSetupLaunch") Then AvaliableCount += 1
|
||||
If Not Setup.Get("UiHiddenSetupUi") Then AvaliableCount += 1
|
||||
'If Not Setup.Get("UiHiddenSetupLink") Then AvaliableCount += 1
|
||||
If Not Setup.Get("UiHiddenSetupSystem") Then AvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenSetupLaunch") Then AvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenSetupUi") Then AvaliableCount += 1
|
||||
'If Not Settings.Get("UiHiddenSetupLink") Then AvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenSetupSystem") Then AvaliableCount += 1
|
||||
FrmSetupLeft.PanItem.Visibility = If(AvaliableCount < 2 AndAlso Not HiddenForceShow, Visibility.Collapsed, Visibility.Visible)
|
||||
End If
|
||||
'更多子页面
|
||||
Dim OtherAvaliableCount As Integer = 0
|
||||
If Not Setup.Get("UiHiddenOtherHelp") Then OtherAvaliableCount += 1
|
||||
If Not Setup.Get("UiHiddenOtherAbout") Then OtherAvaliableCount += 1
|
||||
If Not Setup.Get("UiHiddenOtherTest") Then OtherAvaliableCount += 1
|
||||
If Not Setup.Get("UiHiddenOtherFeedback") Then OtherAvaliableCount += 1
|
||||
If Not Setup.Get("UiHiddenOtherVote") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenOtherHelp") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenOtherAbout") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenOtherTest") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenOtherFeedback") Then OtherAvaliableCount += 1
|
||||
If Not Settings.Get("UiHiddenOtherVote") Then OtherAvaliableCount += 1
|
||||
If FrmOtherLeft IsNot Nothing Then
|
||||
FrmOtherLeft.ItemHelp.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenOtherHelp"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemFeedback.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenOtherFeedback"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemVote.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenOtherVote"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemAbout.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenOtherAbout"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemTest.Visibility = If(Not HiddenForceShow AndAlso Setup.Get("UiHiddenOtherTest"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemHelp.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherHelp"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemFeedback.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherFeedback"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemVote.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherVote"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemAbout.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherAbout"), Visibility.Collapsed, Visibility.Visible)
|
||||
FrmOtherLeft.ItemTest.Visibility = If(Not HiddenForceShow AndAlso Settings.Get("UiHiddenOtherTest"), Visibility.Collapsed, Visibility.Visible)
|
||||
'隐藏左边选择卡
|
||||
FrmOtherLeft.PanItem.Visibility = If(OtherAvaliableCount < 2 AndAlso Not HiddenForceShow, Visibility.Collapsed, Visibility.Visible)
|
||||
End If
|
||||
If OtherAvaliableCount = 1 AndAlso Not HiddenForceShow Then
|
||||
If Not Setup.Get("UiHiddenOtherHelp") Then
|
||||
If Not Settings.Get("UiHiddenOtherHelp") Then
|
||||
FrmMain.BtnTitleSelect4.Text = "帮助"
|
||||
ElseIf Not Setup.Get("UiHiddenOtherAbout") Then
|
||||
ElseIf Not Settings.Get("UiHiddenOtherAbout") Then
|
||||
FrmMain.BtnTitleSelect4.Text = "关于"
|
||||
Else
|
||||
FrmMain.BtnTitleSelect4.Text = "百宝箱"
|
||||
@@ -595,7 +592,7 @@ Refresh:
|
||||
CheckHiddenSetupUI.Checked = True
|
||||
Else
|
||||
'关闭
|
||||
If Setup.Get("UiHiddenSetupLaunch") AndAlso Setup.Get("UiHiddenSetupUi") AndAlso Setup.Get("UiHiddenSetupSystem") AndAlso Setup.Get("UiHiddenSetupLink") Then
|
||||
If Settings.Get("UiHiddenSetupLaunch") AndAlso Settings.Get("UiHiddenSetupUi") AndAlso Settings.Get("UiHiddenSetupSystem") AndAlso Settings.Get("UiHiddenSetupLink") Then
|
||||
CheckHiddenSetupLaunch.Checked = False
|
||||
CheckHiddenSetupSystem.Checked = False
|
||||
CheckHiddenSetupLink.Checked = False
|
||||
@@ -605,7 +602,7 @@ Refresh:
|
||||
End Sub
|
||||
Private Sub HiddenSetupSub() Handles CheckHiddenSetupLaunch.Change, CheckHiddenSetupSystem.Change, CheckHiddenSetupLink.Change, CheckHiddenSetupUI.Change
|
||||
'设置子页面
|
||||
If Setup.Get("UiHiddenSetupLaunch") AndAlso Setup.Get("UiHiddenSetupUi") AndAlso Setup.Get("UiHiddenSetupSystem") AndAlso Setup.Get("UiHiddenSetupLink") Then
|
||||
If Settings.Get("UiHiddenSetupLaunch") AndAlso Settings.Get("UiHiddenSetupUi") AndAlso Settings.Get("UiHiddenSetupSystem") AndAlso Settings.Get("UiHiddenSetupLink") Then
|
||||
'已被全部隐藏
|
||||
CheckHiddenPageSetup.Checked = True
|
||||
Else
|
||||
@@ -624,8 +621,8 @@ Refresh:
|
||||
CheckHiddenOtherHelp.Checked = True
|
||||
Else
|
||||
'关闭
|
||||
If Setup.Get("UiHiddenOtherHelp") AndAlso Setup.Get("UiHiddenOtherAbout") AndAlso Setup.Get("UiHiddenOtherTest") AndAlso
|
||||
Setup.Get("UiHiddenOtherVote") AndAlso Setup.Get("UiHiddenOtherFeedback") Then
|
||||
If Settings.Get("UiHiddenOtherHelp") AndAlso Settings.Get("UiHiddenOtherAbout") AndAlso Settings.Get("UiHiddenOtherTest") AndAlso
|
||||
Settings.Get("UiHiddenOtherVote") AndAlso Settings.Get("UiHiddenOtherFeedback") Then
|
||||
CheckHiddenOtherAbout.Checked = False
|
||||
CheckHiddenOtherTest.Checked = False
|
||||
CheckHiddenOtherFeedback.Checked = False
|
||||
@@ -636,7 +633,7 @@ Refresh:
|
||||
End Sub
|
||||
Private Sub HiddenOtherSub(sender As Object, user As Boolean) Handles CheckHiddenOtherHelp.Change, CheckHiddenOtherAbout.Change, CheckHiddenOtherTest.Change
|
||||
'更多子页面(有具体内容的)
|
||||
If Setup.Get("UiHiddenOtherHelp") AndAlso Setup.Get("UiHiddenOtherAbout") AndAlso Setup.Get("UiHiddenOtherTest") Then
|
||||
If Settings.Get("UiHiddenOtherHelp") AndAlso Settings.Get("UiHiddenOtherAbout") AndAlso Settings.Get("UiHiddenOtherTest") Then
|
||||
'已被全部隐藏
|
||||
CheckHiddenPageOther.Checked = True
|
||||
Else
|
||||
@@ -645,7 +642,7 @@ Refresh:
|
||||
End If
|
||||
'修改无具体内容的项
|
||||
If Not user Then Return
|
||||
If Setup.Get("UiHiddenOtherHelp") AndAlso Setup.Get("UiHiddenOtherAbout") AndAlso Setup.Get("UiHiddenOtherTest") Then
|
||||
If Settings.Get("UiHiddenOtherHelp") AndAlso Settings.Get("UiHiddenOtherAbout") AndAlso Settings.Get("UiHiddenOtherTest") Then
|
||||
CheckHiddenOtherFeedback.Checked = True
|
||||
CheckHiddenOtherVote.Checked = True
|
||||
End If
|
||||
@@ -653,8 +650,8 @@ Refresh:
|
||||
Private Sub HiddenOtherNet(sender As Object, user As Boolean) Handles CheckHiddenOtherFeedback.Change, CheckHiddenOtherVote.Change
|
||||
'更多子页面(无具体内容的)
|
||||
If Not user Then Return
|
||||
If Setup.Get("UiHiddenOtherHelp") AndAlso Setup.Get("UiHiddenOtherAbout") AndAlso Setup.Get("UiHiddenOtherTest") AndAlso
|
||||
(Not Setup.Get("UiHiddenOtherFeedback") OrElse Not Setup.Get("UiHiddenOtherVote")) Then
|
||||
If Settings.Get("UiHiddenOtherHelp") AndAlso Settings.Get("UiHiddenOtherAbout") AndAlso Settings.Get("UiHiddenOtherTest") AndAlso
|
||||
(Not Settings.Get("UiHiddenOtherFeedback") OrElse Not Settings.Get("UiHiddenOtherVote")) Then
|
||||
CheckHiddenOtherAbout.Checked = False
|
||||
CheckHiddenOtherTest.Checked = False
|
||||
CheckHiddenOtherHelp.Checked = False
|
||||
@@ -668,15 +665,10 @@ Refresh:
|
||||
|
||||
#End Region
|
||||
|
||||
'赞助
|
||||
Private Sub BtnLauncherDonate_Click(sender As Object, e As EventArgs) Handles BtnLauncherDonate.Click
|
||||
OpenWebsite("https://afdian.com/a/LTCat")
|
||||
End Sub
|
||||
|
||||
'滑动条
|
||||
Private Sub SliderLoad()
|
||||
SliderMusicVolume.GetHintText = Function(v) Math.Ceiling(v * 0.1) & "%"
|
||||
SliderLauncherOpacity.GetHintText = Function(v) Math.Round(40 + v * 0.1) & "%"
|
||||
SliderLauncherTransparent.GetHintText = Function(v) Math.Round(40 + v * 0.1) & "%"
|
||||
SliderLauncherHue.GetHintText = Function(v) v & "°"
|
||||
SliderLauncherSat.GetHintText = Function(v) v & "%"
|
||||
SliderLauncherDelta.GetHintText =
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
Public Class SettingService
|
||||
|
||||
#Region "属性"
|
||||
|
||||
''' <summary>
|
||||
''' 指定该控件所对应的设置项。
|
||||
''' </summary>
|
||||
Public Shared Function GetKey(obj As DependencyObject) As String
|
||||
If obj Is Nothing Then Return Nothing
|
||||
Return obj.GetValue(KeyProperty)
|
||||
End Function
|
||||
Public Shared Sub SetKey(obj As DependencyObject, value As String)
|
||||
obj.SetValue(KeyProperty, value)
|
||||
End Sub
|
||||
Public Shared ReadOnly KeyProperty As DependencyProperty =
|
||||
DependencyProperty.RegisterAttached("Key", GetType(String), GetType(SettingService), New PropertyMetadata(Nothing))
|
||||
|
||||
''' <summary>
|
||||
''' 指定该控件所对应的设置值。
|
||||
''' </summary>
|
||||
Public Shared Function GetValue(obj As DependencyObject) As String
|
||||
If obj Is Nothing Then Return Nothing
|
||||
Return obj.GetValue(ValueProperty)
|
||||
End Function
|
||||
Public Shared Sub SetValue(obj As DependencyObject, value As String)
|
||||
obj.SetValue(ValueProperty, value)
|
||||
End Sub
|
||||
Public Shared ReadOnly ValueProperty As DependencyProperty =
|
||||
DependencyProperty.RegisterAttached("Value", GetType(String), GetType(SettingService), New PropertyMetadata(Nothing))
|
||||
|
||||
#End Region
|
||||
|
||||
''' <summary>
|
||||
''' 重置该控件以及它所有的子控件的设置值。
|
||||
''' </summary>
|
||||
Public Shared Sub ResetSettings(Target As DependencyObject)
|
||||
LogicalTreeHelper.GetChildren(Target).OfType(Of DependencyObject)().ForEach(Sub(c) ResetSettings(c)) '处理子控件
|
||||
Dim Key = GetKey(Target)
|
||||
If Key Is Nothing Then Return
|
||||
Settings.Reset(Key, Instance:=PageInstanceLeft.Instance)
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' 更新该控件以及它所有的子控件当前显示的设置值。
|
||||
''' </summary>
|
||||
Public Shared Sub RefreshSettings(Target As DependencyObject)
|
||||
LogicalTreeHelper.GetChildren(Target).OfType(Of DependencyObject)().ForEach(Sub(c) RefreshSettings(c)) '处理子控件
|
||||
Dim Key = GetKey(Target)
|
||||
If Key Is Nothing Then Return
|
||||
Dim NewValue = Settings.Get(Key, Instance:=PageInstanceLeft.Instance)
|
||||
If TypeOf Target Is ISettingControl Then DirectCast(Target, ISettingControl).RefreshSetting(NewValue)
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' 当控件对应的设置改变时,将内容保存到设置中。
|
||||
''' </summary>
|
||||
Public Shared Sub SaveSetting(sender As Object)
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
If TypeOf sender IsNot ISettingControl Then Return
|
||||
Dim Key = GetKey(sender)
|
||||
If Key Is Nothing Then Return
|
||||
Dim NewValue As String = DirectCast(sender, ISettingControl).GetCurrentSetting()
|
||||
If NewValue Is Nothing Then Return
|
||||
Settings.Set(Key, NewValue, Instance:=PageInstanceLeft.Instance)
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
|
||||
Public Interface ISettingControl
|
||||
|
||||
''' <summary>
|
||||
''' 更新该控件当前所显示的设置值。
|
||||
''' </summary>
|
||||
Sub RefreshSetting(NewValue As String)
|
||||
''' <summary>
|
||||
''' 获取该控件当前设定的设置值。
|
||||
''' 若不应当关联该设置值,则返回 Nothing。
|
||||
''' </summary>
|
||||
Function GetCurrentSetting() As String
|
||||
|
||||
End Interface
|
||||
@@ -0,0 +1,400 @@
|
||||
Public Class Settings
|
||||
Private Shared ReadOnly Entries As Dictionary(Of String, Setting) = (New List(Of Setting) From {
|
||||
New Setting("Identify", "", Source:=Sources.Registry),
|
||||
New Setting("WindowHeight", 550),
|
||||
New Setting("WindowWidth", 900),
|
||||
New Setting("AprilDoneYear", 0, Source:=Sources.Registry),
|
||||
New Setting("HintDownloadThread", False, Source:=Sources.Registry),
|
||||
New Setting("HintNotice", 0, Source:=Sources.Registry),
|
||||
New Setting("HintDownload", 0, Source:=Sources.Registry),
|
||||
New Setting("HintHide", False, Source:=Sources.Registry),
|
||||
New Setting("HintHandInstall", False, Source:=Sources.Registry),
|
||||
New Setting("HintBuy", False, Source:=Sources.Registry),
|
||||
New Setting("HintClearRubbish", 0, Source:=Sources.Registry),
|
||||
New Setting("HintUpdateMod", False, Source:=Sources.Registry),
|
||||
New Setting("HintCustomCommand", False, Source:=Sources.Registry),
|
||||
New Setting("HintCustomWarn", False, Source:=Sources.Registry),
|
||||
New Setting("HintMoreAdvancedSetup", False, Source:=Sources.Registry),
|
||||
New Setting("HintIndieSetup", False, Source:=Sources.Registry),
|
||||
New Setting("HintExportConfig", False, Source:=Sources.Registry),
|
||||
New Setting("SystemEulaVersion", 0, Source:=Sources.Registry),
|
||||
New Setting("SystemCount", 0, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("SystemLaunchCount", 0, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("SystemLastVersionReg", 0, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("SystemHighestSavedBetaVersionReg", 0, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("SystemHighestBetaVersionReg", 0, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("SystemHighestAlphaVersionReg", 0, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("SystemHelpVersion", 0, Source:=Sources.Registry),
|
||||
New Setting("SystemDebugMode", False, Source:=Sources.Registry),
|
||||
New Setting("SystemDebugAnim", 9, Source:=Sources.Registry),
|
||||
New Setting("SystemDebugDelay", False, Source:=Sources.Registry),
|
||||
New Setting("SystemDebugSkipCopy", False, Source:=Sources.Registry),
|
||||
New Setting("SystemSystemCache", "", Source:=Sources.Registry),
|
||||
New Setting("SystemSystemUpdate", 0),
|
||||
New Setting("SystemSystemActivity", 0),
|
||||
New Setting("SystemSystemTelemetry", True, Source:=Sources.Registry),
|
||||
New Setting("CacheDrops", "", Source:=Sources.Registry),
|
||||
New Setting("CacheConfig", 0, Source:=Sources.Registry),
|
||||
New Setting("CacheExportConfig", "", Source:=Sources.Registry),
|
||||
New Setting("CacheSavedPageUrl", "", Source:=Sources.Registry),
|
||||
New Setting("CacheSavedPageVersion", "", Source:=Sources.Registry),
|
||||
New Setting("CacheMsOAuthRefresh", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsAccess", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsProfileJson", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsUuid", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsName", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2Migrated", False, Source:=Sources.Registry),
|
||||
New Setting("CacheMsV2OAuthRefresh", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2Access", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2ProfileJson", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2Uuid", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheMsV2Name", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNideAccess", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNideClient", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNideUuid", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNideName", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNideUsername", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNidePass", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheNideServer", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheAuthAccess", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheAuthClient", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheAuthUuid", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheAuthName", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheAuthUsername", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheAuthPass", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheAuthServerServer", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheAuthServerName", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheAuthServerRegister", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("CacheDownloadFolder", "", Source:=Sources.Registry),
|
||||
New Setting("CacheJavaListVersion", 0, Source:=Sources.Registry),
|
||||
New Setting("LoginRemember", True, Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("LoginLegacyName", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("LoginMsJson", "{}", Source:=Sources.Registry, Encrypted:=True), '{UserName: OAuthToken, ...}
|
||||
New Setting("LoginNideEmail", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("LoginNidePass", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("LoginAuthEmail", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("LoginAuthPass", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("LoginType", McLoginType.Legacy, Source:=Sources.Registry),
|
||||
New Setting("LoginPageType", 0),
|
||||
New Setting("LaunchSkinID", "", Source:=Sources.Registry, OnChanged:=Sub() PageLaunchLeft.SkinLegacy.Start()),
|
||||
New Setting("LaunchSkinType", 0, Source:=Sources.Registry, OnChanged:=AddressOf PageSetupLaunch.UpdateSkinType),
|
||||
New Setting("LaunchSkinSlim", False, Source:=Sources.Registry),
|
||||
New Setting("LaunchFolderSelect", ""),
|
||||
New Setting("LaunchFolders", "", Source:=Sources.Registry),
|
||||
New Setting("LaunchArgumentTitle", ""),
|
||||
New Setting("LaunchArgumentInfo", "PCL"),
|
||||
New Setting("LaunchArgumentJavaSelect", "", Source:=Sources.Registry),
|
||||
New Setting("LaunchArgumentJavaAll", "[]", Source:=Sources.Registry),
|
||||
New Setting("LaunchArgumentIndie", 0),
|
||||
New Setting("LaunchArgumentIndieV2", 4),
|
||||
New Setting("LaunchArgumentVisible", 5, Source:=Sources.Registry),
|
||||
New Setting("LaunchArgumentPriority", 1, Source:=Sources.Registry),
|
||||
New Setting("LaunchArgumentWindowWidth", 854),
|
||||
New Setting("LaunchArgumentWindowHeight", 480),
|
||||
New Setting("LaunchArgumentWindowType", 1),
|
||||
New Setting("LaunchArgumentRam", False, Source:=Sources.Registry),
|
||||
New Setting("LaunchAdvanceJvm", "-XX:-OmitStackTraceInFastThrow -Djdk.lang.Process.allowAmbiguousCommands=True -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True"),
|
||||
New Setting("LaunchAdvanceGame", ""),
|
||||
New Setting("LaunchAdvanceRun", ""),
|
||||
New Setting("LaunchAdvanceRunWait", True),
|
||||
New Setting("LaunchAdvanceDisableJLW", False),
|
||||
New Setting("LaunchAdvanceGraphicCard", True, Source:=Sources.Registry),
|
||||
New Setting("LaunchAdvanceGC", 4),
|
||||
New Setting("LaunchRamType", 0, OnChanged:=AddressOf PageSetupLaunch.UpdateRamType),
|
||||
New Setting("LaunchRamCustom", 15),
|
||||
New Setting("LinkLastAutoJoinInviteCode", "", Source:=Sources.Registry),
|
||||
New Setting("LinkLatencyMode", 0, Source:=Sources.Registry),
|
||||
New Setting("LinkCustomPeer", ""),
|
||||
New Setting("LinkEasyTierVersion", -1, Source:=Sources.Registry),
|
||||
New Setting("ToolHelpChinese", True, Source:=Sources.Registry),
|
||||
New Setting("ToolDownloadThread", 63, Source:=Sources.Registry),
|
||||
New Setting("ToolDownloadSpeed", 42, Source:=Sources.Registry, OnChanged:=AddressOf ModNet.UpdateNetTaskSpeedLimitHigh),
|
||||
New Setting("ToolDownloadSource", 1, Source:=Sources.Registry),
|
||||
New Setting("ToolDownloadVersion", 1, Source:=Sources.Registry),
|
||||
New Setting("ToolDownloadTranslate", 0, Source:=Sources.Registry),
|
||||
New Setting("ToolDownloadTranslateV2", 1, Source:=Sources.Registry),
|
||||
New Setting("ToolDownloadIgnoreQuilt", True, Source:=Sources.Registry),
|
||||
New Setting("ToolDownloadCert", False, Source:=Sources.Registry, OnChanged:=AddressOf ModNet.ShouldValidateSslCertificateOnLogin),
|
||||
New Setting("ToolDownloadMod", 2, Source:=Sources.Registry),
|
||||
New Setting("ToolModLocalNameStyle", 0, Source:=Sources.Registry),
|
||||
New Setting("ToolUpdateRelease", False, Source:=Sources.Registry),
|
||||
New Setting("ToolUpdateSnapshot", False, Source:=Sources.Registry),
|
||||
New Setting("ToolUpdateReleaseLast", "", Source:=Sources.Registry),
|
||||
New Setting("ToolUpdateSnapshotLast", "", Source:=Sources.Registry),
|
||||
New Setting("UiLauncherTransparent", 600, OnChanged:=Sub(Value As Integer) If FrmMain IsNot Nothing Then FrmMain.Opacity = Value / 1000 + 0.4), '避免与 PCL1 设置冲突(UiLauncherOpacity)
|
||||
New Setting("UiLauncherHue", 180),
|
||||
New Setting("UiLauncherSat", 80),
|
||||
New Setting("UiLauncherDelta", 90),
|
||||
New Setting("UiLauncherLight", 20),
|
||||
New Setting("UiLauncherTheme", 0, OnChanged:=AddressOf ThemeRefresh),
|
||||
New Setting("UiLauncherThemeGold", "", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("UiLauncherThemeHide", "0|1|2|3|4", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("UiLauncherThemeHide2", "0|1|2|3|4", Source:=Sources.Registry, Encrypted:=True),
|
||||
New Setting("UiLauncherLogo", True),
|
||||
New Setting("UiLauncherEmail", False),
|
||||
New Setting("UiBackgroundColorful", True, OnChanged:=Sub() ThemeRefresh()), '不传入参数
|
||||
New Setting("UiBackgroundOpacity", 1000, OnChanged:=AddressOf FormMain.UpdateBackgroundAndTitleBar),
|
||||
New Setting("UiBackgroundBlur", 0, OnChanged:=AddressOf FormMain.UpdateBackgroundAndTitleBar),
|
||||
New Setting("UiBackgroundSuit", 0, OnChanged:=AddressOf FormMain.UpdateBackgroundAndTitleBar),
|
||||
New Setting("UiCustomType", 0, OnChanged:=AddressOf PageSetupUI.OnUiCustomTypeChanged),
|
||||
New Setting("UiCustomPreset", 0),
|
||||
New Setting("UiCustomNet", ""),
|
||||
New Setting("UiLogoType", 1, OnChanged:=AddressOf FormMain.UpdateBackgroundAndTitleBar),
|
||||
New Setting("UiLogoText", "", OnChanged:=AddressOf FormMain.UpdateBackgroundAndTitleBar),
|
||||
New Setting("UiLogoLeft", False, OnChanged:=AddressOf FormMain.UpdateBackgroundAndTitleBar),
|
||||
New Setting("UiMusicVolume", 500),
|
||||
New Setting("UiMusicStop", False),
|
||||
New Setting("UiMusicStart", False),
|
||||
New Setting("UiMusicRandom", True),
|
||||
New Setting("UiMusicAuto", True),
|
||||
New Setting("UiHiddenPageDownload", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenPageLink", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenPageSetup", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenPageOther", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenFunctionSelect", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenFunctionModUpdate", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenFunctionHidden", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenSetupLaunch", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenSetupUi", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenSetupLink", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenSetupSystem", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenOtherHelp", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenOtherFeedback", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenOtherVote", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenOtherAbout", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("UiHiddenOtherTest", False, OnChanged:=AddressOf PageSetupUI.HiddenRefresh),
|
||||
New Setting("VersionAdvanceJvm", "", Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceGame", "", Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceAssets", 0, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceAssetsV2", False, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceJava", False, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceRun", "", Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceRunWait", True, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceDisableJLW", False, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceDisableModUpdate", False, Source:=Sources.Instance),
|
||||
New Setting("VersionAdvanceGC", 0, Source:=Sources.Instance),
|
||||
New Setting("VersionRamType", 2, Source:=Sources.Instance, OnChanged:=AddressOf PageInstanceSetup.OnVersionRamTypeChanged),
|
||||
New Setting("VersionRamCustom", 15, Source:=Sources.Instance),
|
||||
New Setting("VersionRamOptimize", 0, Source:=Sources.Instance),
|
||||
New Setting("VersionArgumentTitle", "", Source:=Sources.Instance),
|
||||
New Setting("VersionArgumentInfo", "", Source:=Sources.Instance),
|
||||
New Setting("VersionArgumentIndie", -1, Source:=Sources.Instance),
|
||||
New Setting("VersionArgumentIndieV2", False, Source:=Sources.Instance),
|
||||
New Setting("VersionArgumentJavaSelect", "使用全局设置", Source:=Sources.Instance),
|
||||
New Setting("VersionServerEnter", "", Source:=Sources.Instance),
|
||||
New Setting("VersionServerLogin", 0, Source:=Sources.Instance, OnChanged:=AddressOf PageInstanceSetup.OnVersionServerLoginChanged),
|
||||
New Setting("VersionServerNide", "", Source:=Sources.Instance),
|
||||
New Setting("VersionServerAuthRegister", "", Source:=Sources.Instance),
|
||||
New Setting("VersionServerAuthName", "", Source:=Sources.Instance),
|
||||
New Setting("VersionServerAuthServer", "", Source:=Sources.Instance)
|
||||
}).ToDictionary(Function(e) e.Key)
|
||||
|
||||
Private Enum Sources
|
||||
Normal
|
||||
Registry
|
||||
Instance
|
||||
End Enum
|
||||
Private Class Setting
|
||||
Public Key As String
|
||||
''' <summary>
|
||||
''' 若已调用过 Get 方法,则为当前值;否则为 Nothing。
|
||||
''' </summary>
|
||||
Public Value = Nothing
|
||||
Public Encrypted As Boolean
|
||||
Public DefaultValue
|
||||
Public Source As Sources
|
||||
''' <summary>
|
||||
''' 当设置项的值实际被改变时触发,参数为新值。
|
||||
''' </summary>
|
||||
Public OnChanged As Action(Of Object)
|
||||
''' <summary>
|
||||
''' 该设置的值的实际类型。
|
||||
''' </summary>
|
||||
Public Type As Type
|
||||
|
||||
Public Sub New(Key As String, Value As Object, Optional Source As Sources = Sources.Normal, Optional Encrypted As Boolean = False, Optional OnChanged As Action(Of Object) = Nothing)
|
||||
Try
|
||||
Me.Key = Key
|
||||
Me.DefaultValue = Value
|
||||
Me.Encrypted = Encrypted
|
||||
Me.Source = Source
|
||||
Me.Type = If(Value, "").GetType
|
||||
Me.OnChanged = OnChanged
|
||||
Catch ex As Exception
|
||||
Log(ex, "初始化设置项失败", LogLevel.Feedback) '#5095 的 fallback
|
||||
End Try
|
||||
End Sub
|
||||
End Class
|
||||
|
||||
''' <summary>
|
||||
''' 改变某个设置项的值。
|
||||
''' </summary>
|
||||
Public Shared Sub [Set](Key As String, Value As Object, Optional Instance As McInstance = Nothing)
|
||||
Dim Entry As Setting = Nothing
|
||||
If Not Entries.TryGetValue(Key, Entry) Then Throw New KeyNotFoundException("未找到设置项:" & Key)
|
||||
Try
|
||||
'判断是否一致
|
||||
If Entry.Value Is Nothing Then [Get](Key, Instance)
|
||||
Value = CTypeDynamic(Value, Entry.Type)
|
||||
If Entry.Value = Value Then Return
|
||||
'设置新值
|
||||
Entry.Value = Value
|
||||
If Entry.Encrypted Then
|
||||
Try
|
||||
If Value Is Nothing Then Value = ""
|
||||
Value = SecretEncrypt(Value, "PCL" & Identify)
|
||||
Catch ex As Exception
|
||||
Log(ex, "加密设置失败:" & Key, LogLevel.Developer)
|
||||
End Try
|
||||
End If
|
||||
Select Case Entry.Source
|
||||
Case Sources.Normal
|
||||
WriteIni("Setup", Key, Value)
|
||||
Case Sources.Registry
|
||||
WriteReg(Key, Value)
|
||||
Case Sources.Instance
|
||||
If Instance Is Nothing Then Throw New Exception($"更改版本设置 {Key} 时未提供目标版本")
|
||||
WriteIni(Instance.PathVersion & "PCL\Setup.ini", Key, Value)
|
||||
End Select
|
||||
'触发改变事件(必须在写入之后,以保证 VersionServerLogin 之类的在事件中读取到的是最新的值)
|
||||
If Entry.OnChanged IsNot Nothing Then Entry.OnChanged.Invoke(Value)
|
||||
Catch ex As Exception
|
||||
Log(ex, "设置设置项时出错(" & Key & ", " & Value & ")", LogLevel.Feedback)
|
||||
End Try
|
||||
End Sub
|
||||
''' <summary>
|
||||
''' 写入某个未经加密的设置项。
|
||||
''' 若该设置项经过了加密,则会抛出异常。
|
||||
''' </summary>
|
||||
Public Shared Sub SetSafe(Key As String, Value As Object, Optional Instance As McInstance = Nothing)
|
||||
Dim Entry As Setting = Nothing
|
||||
If Not Entries.TryGetValue(Key, Entry) Then Throw New KeyNotFoundException("未找到设置项:" & Key)
|
||||
If Entry.Encrypted Then Throw New InvalidOperationException("禁止写入加密设置项:" & Key)
|
||||
[Set](Key, Instance, Instance)
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' 获取某个设置项的值。
|
||||
''' </summary>
|
||||
Public Shared Function [Get](Key As String, Optional Instance As McInstance = Nothing)
|
||||
Dim Entry As Setting = Nothing
|
||||
If Not Entries.TryGetValue(Key, Entry) Then Throw New KeyNotFoundException("未找到设置项:" & Key)
|
||||
If Entry.Value IsNot Nothing Then Return Entry.Value
|
||||
'对部分设置强制赋值
|
||||
Static ForcedSettings As New Dictionary(Of String, Object) From {
|
||||
{"UiHiddenPageLink", True},
|
||||
{"UiHiddenSetupLink", True}
|
||||
}
|
||||
Dim ForcedSetting As Object = Nothing
|
||||
If ForcedSettings.TryGetValue(Key, ForcedSetting) Then
|
||||
Entry.Value = ForcedSetting
|
||||
Return Entry.Value
|
||||
End If
|
||||
'正常读取
|
||||
Try
|
||||
Dim GotValue As String = Nothing '先用 String 储存,避免类型转换
|
||||
Dim DefaultValue As String = If(Entry.Encrypted, SecretEncrypt(Entry.DefaultValue, "PCL" & Identify), Entry.DefaultValue)
|
||||
Select Case Entry.Source
|
||||
Case Sources.Normal
|
||||
GotValue = ReadIni("Setup", Key, DefaultValue)
|
||||
Case Sources.Registry
|
||||
GotValue = ReadReg(Key, DefaultValue)
|
||||
Case Sources.Instance
|
||||
If Instance Is Nothing Then
|
||||
Throw New Exception($"读取版本设置 {Key} 时未提供目标版本")
|
||||
Else
|
||||
GotValue = ReadIni(Instance.PathVersion & "PCL\Setup.ini", Key, DefaultValue)
|
||||
End If
|
||||
End Select
|
||||
If Entry.Encrypted Then
|
||||
If GotValue = DefaultValue Then
|
||||
GotValue = Entry.DefaultValue
|
||||
Else
|
||||
Try
|
||||
GotValue = SecretDecrypt(GotValue, "PCL" & Identify)
|
||||
Catch ex As Exception
|
||||
Log(ex, "解密设置失败:" & Key, LogLevel.Developer)
|
||||
GotValue = Entry.DefaultValue
|
||||
[Set](Key, Entry.DefaultValue)
|
||||
End Try
|
||||
End If
|
||||
End If
|
||||
Entry.Value = CTypeDynamic(GotValue, Entry.Type)
|
||||
Catch ex As Exception
|
||||
Log(ex, "读取设置失败:" & Key, LogLevel.Hint)
|
||||
Entry.Value = CTypeDynamic(Entry.DefaultValue, Entry.Type)
|
||||
End Try
|
||||
Return Entry.Value
|
||||
End Function
|
||||
''' <summary>
|
||||
''' 获取某个未经加密的设置项的值。
|
||||
''' 若该设置项经过了加密,则会抛出异常。
|
||||
''' </summary>
|
||||
Public Shared Function GetSafe(Key As String, Optional Instance As McInstance = Nothing)
|
||||
Dim Entry As Setting = Nothing
|
||||
If Not Entries.TryGetValue(Key, Entry) Then Throw New KeyNotFoundException("未找到设置项:" & Key)
|
||||
If Entry.Encrypted Then Throw New InvalidOperationException("禁止读取加密设置项:" & Key)
|
||||
Return [Get](Key, Instance)
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' 初始化某个设置项的值。
|
||||
''' </summary>
|
||||
Public Shared Sub Reset(Key As String, Optional Instance As McInstance = Nothing)
|
||||
Dim Entry As Setting = Nothing
|
||||
If Not Entries.TryGetValue(Key, Entry) Then Throw New KeyNotFoundException("未找到设置项:" & Key)
|
||||
Try
|
||||
'判断是否一致
|
||||
If Entry.Value Is Nothing Then [Get](Key, Instance)
|
||||
If Entry.Value = Entry.DefaultValue Then Return
|
||||
'设置新值
|
||||
Entry.Value = Entry.DefaultValue
|
||||
Select Case Entry.Source
|
||||
Case Sources.Normal
|
||||
DeleteIniKey("Setup", Key)
|
||||
Case Sources.Registry
|
||||
DeleteReg(Key)
|
||||
Case Sources.Instance
|
||||
If Instance Is Nothing Then Throw New Exception($"重置版本设置 {Key} 时未提供目标版本")
|
||||
DeleteIniKey(Instance.PathVersion & "PCL\Setup.ini", Key)
|
||||
End Select
|
||||
'触发改变事件
|
||||
If Entry.OnChanged IsNot Nothing Then Entry.OnChanged.Invoke(Entry.Value)
|
||||
Catch ex As Exception
|
||||
Log(ex, "重置设置项时出错(" & Key & ")", LogLevel.Feedback)
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
''' <summary>
|
||||
''' 获取某个设置项的默认值。
|
||||
''' </summary>
|
||||
Public Shared Function GetDefault(Key As String) As String
|
||||
Return Entries(Key).DefaultValue
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' 对应的注册表或文件是否已经储存了某个设置项。
|
||||
''' 若改成了和默认值一样的,在 2.12.3- 会储存更改,在 2.12.4+ 不会储存更改。
|
||||
''' </summary>
|
||||
Public Shared Function HasSaved(Key As String, Optional Instance As McInstance = Nothing) As Boolean
|
||||
Select Case Entries(Key).Source
|
||||
Case Sources.Normal
|
||||
Return HasIniKey("Setup", Key)
|
||||
Case Sources.Registry
|
||||
Return HasReg(Key)
|
||||
Case Else 'Source.Instance
|
||||
If Instance Is Nothing Then Throw New Exception($"判断版本设置 {Key} 是否存在时未提供目标版本")
|
||||
Return HasIniKey(Instance.PathVersion & "PCL\Setup.ini", Key)
|
||||
End Select
|
||||
End Function
|
||||
|
||||
''' <summary>
|
||||
''' 当前版本改变时,要求所有版本独立设置需要重新读取。
|
||||
''' </summary>
|
||||
Public Shared Sub MakeInstanceDirty()
|
||||
For Each Entry In Entries.Values
|
||||
If Entry.Source = Sources.Instance Then Entry.Value = Nothing
|
||||
Next
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
Reference in New Issue
Block a user