公开更多代码
This commit is contained in:
@@ -0,0 +1,691 @@
|
||||
Public Class ModSetup
|
||||
|
||||
''' <summary>
|
||||
''' 设置的更新号。
|
||||
''' </summary>
|
||||
Public Const VersionSetup As Integer = 1
|
||||
''' <summary>
|
||||
''' 设置列表。
|
||||
''' </summary>
|
||||
Private ReadOnly SetupDict As New Dictionary(Of String, SetupEntry) From {
|
||||
{"Identify", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"HintDownloadThread", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"HintNotice", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"HintDownload", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"HintInstallBack", New SetupEntry(False, 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)},
|
||||
{"TestSetupReader", New SetupEntry("", Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"SystemEula", New SetupEntry(False, 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)},
|
||||
{"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)},
|
||||
{"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)},
|
||||
{"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)},
|
||||
{"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:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -Dfml.ignoreInvalidMinecraftCertificates=True -Dfml.ignorePatchDiscrepancies=True -Dlog4j2.formatMsgNoLookups=true")},
|
||||
{"LaunchAdvanceGame", New SetupEntry("")},
|
||||
{"LaunchAdvanceRun", New SetupEntry("")},
|
||||
{"LaunchAdvanceRunWait", New SetupEntry(True)},
|
||||
{"LaunchAdvanceAssets", New SetupEntry(False)},
|
||||
{"LaunchAdvanceJava", New SetupEntry(False)},
|
||||
{"LaunchRamType", New SetupEntry(0)},
|
||||
{"LaunchRamCustom", New SetupEntry(15)},
|
||||
{"LinkEula", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"LinkName", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"LinkHiperCertLast", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"LinkHiperCertTime", New SetupEntry("", Source:=SetupSource.Registry)},
|
||||
{"LinkHiperCertWarn", New SetupEntry(True, Source:=SetupSource.Registry)},
|
||||
{"LinkIoiVersion", New SetupEntry(0, Source:=SetupSource.Registry, Encoded:=True)},
|
||||
{"ToolHelpChinese", New SetupEntry(True, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadThread", New SetupEntry(63, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadSpeed", New SetupEntry(42, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadVersion", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadTranslate", New SetupEntry(0, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadKeepModpack", New SetupEntry(False, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadIgnoreQuilt", New SetupEntry(True, Source:=SetupSource.Registry)},
|
||||
{"ToolDownloadCert", New SetupEntry(True, 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)},
|
||||
{"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.Version)},
|
||||
{"VersionAdvanceGame", New SetupEntry("", Source:=SetupSource.Version)},
|
||||
{"VersionAdvanceAssets", New SetupEntry(0, Source:=SetupSource.Version)},
|
||||
{"VersionAdvanceAssetsV2", New SetupEntry(False, Source:=SetupSource.Version)},
|
||||
{"VersionAdvanceJava", New SetupEntry(False, Source:=SetupSource.Version)},
|
||||
{"VersionAdvanceRun", New SetupEntry("", Source:=SetupSource.Version)},
|
||||
{"VersionAdvanceRunWait", New SetupEntry(True, Source:=SetupSource.Version)},
|
||||
{"VersionRamType", New SetupEntry(2, Source:=SetupSource.Version)},
|
||||
{"VersionRamCustom", New SetupEntry(15, Source:=SetupSource.Version)},
|
||||
{"VersionArgumentTitle", New SetupEntry("", Source:=SetupSource.Version)},
|
||||
{"VersionArgumentInfo", New SetupEntry("", Source:=SetupSource.Version)},
|
||||
{"VersionArgumentIndie", New SetupEntry(-1, Source:=SetupSource.Version)},
|
||||
{"VersionArgumentJavaSelect", New SetupEntry("使用全局设置", Source:=SetupSource.Version)},
|
||||
{"VersionServerEnter", New SetupEntry("", Source:=SetupSource.Version)},
|
||||
{"VersionServerLogin", New SetupEntry(0, Source:=SetupSource.Version)},
|
||||
{"VersionServerNide", New SetupEntry("", Source:=SetupSource.Version)},
|
||||
{"VersionServerAuthRegister", New SetupEntry("", Source:=SetupSource.Version)},
|
||||
{"VersionServerAuthName", New SetupEntry("", Source:=SetupSource.Version)},
|
||||
{"VersionServerAuthServer", New SetupEntry("", Source:=SetupSource.Version)}
|
||||
}
|
||||
|
||||
#Region "基础"
|
||||
|
||||
Private Enum SetupSource
|
||||
Normal
|
||||
Registry
|
||||
Version
|
||||
End Enum
|
||||
Private Class SetupEntry
|
||||
|
||||
Public Encoded As Boolean
|
||||
Public DefaultValue
|
||||
Public DefaultValueEncoded
|
||||
Public Value
|
||||
Public Source As SetupSource
|
||||
|
||||
'加载状态:0/未读取 1/已读取未处理 2/已处理
|
||||
Public State As Byte = 0
|
||||
Public Type
|
||||
|
||||
Public Sub New(Value, Optional Source = SetupSource.Normal, Optional Encoded = False)
|
||||
Me.DefaultValue = Value
|
||||
Me.DefaultValueEncoded = If(Encoded, SecretEncrypt(Value, "PCL" & UniqueAddress), Value)
|
||||
Me.Encoded = Encoded
|
||||
Me.Value = Value
|
||||
Me.Source = Source
|
||||
Type = If(Value, New Object).GetType
|
||||
End Sub
|
||||
|
||||
End Class
|
||||
|
||||
''' <summary>
|
||||
''' 改变某个设置项的值。
|
||||
''' </summary>
|
||||
Public Sub [Set](Key As String, Value As Object, Optional ForceReload As Boolean = False, Optional Version As McVersion = Nothing)
|
||||
[Set](Key, Value, SetupDict(Key), ForceReload, Version)
|
||||
End Sub
|
||||
Private Sub [Set](Key As String, Value As Object, E As SetupEntry, ForceReload As Boolean, Version As McVersion)
|
||||
Try
|
||||
|
||||
Value = CTypeDynamic(Value, E.Type)
|
||||
If E.State = 2 Then
|
||||
'如果已应用,且值相同,则无需再次更改
|
||||
If E.Value = Value AndAlso Not ForceReload Then Exit Sub
|
||||
Else
|
||||
'如果未应用,则直接更改并应用
|
||||
If E.Source <> SetupSource.Version Then E.State = 2
|
||||
End If
|
||||
'设置新值
|
||||
E.Value = Value
|
||||
'写入值
|
||||
If E.Encoded Then
|
||||
Try
|
||||
If Value Is Nothing Then Value = ""
|
||||
Value = SecretEncrypt(Value, "PCL" & UniqueAddress)
|
||||
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.Version
|
||||
If Version Is Nothing Then
|
||||
Throw New Exception("更改版本设置 " & Key & " 时未提供目标版本")
|
||||
Else
|
||||
WriteIni(Version.Path & "PCL\Setup.ini", Key, Value)
|
||||
End If
|
||||
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 Version As McVersion = Nothing)
|
||||
Return Load(Key, SetupDict(Key), ForceReload, Version)
|
||||
End Function
|
||||
Private Function Load(Key As String, E As SetupEntry, ForceReload As Boolean, Version As McVersion)
|
||||
'如果已经应用过,则什么也不干
|
||||
If E.State = 2 AndAlso Not ForceReload Then Return E.Value
|
||||
'读取,应用并设置状态
|
||||
Read(Key, E, Version)
|
||||
If E.Source <> SetupSource.Version 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 Version As McVersion = Nothing)
|
||||
If Not SetupDict.ContainsKey(Key) Then Throw New KeyNotFoundException("未找到设置项:" & Key) With {.Source = Key}
|
||||
Return [Get](Key, SetupDict(Key), Version)
|
||||
End Function
|
||||
Private Function [Get](Key As String, E As SetupEntry, Version As McVersion)
|
||||
'获取强制值
|
||||
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, Version)
|
||||
If E.Source <> SetupSource.Version 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 Version As McVersion = Nothing)
|
||||
Dim E As SetupEntry = SetupDict(Key)
|
||||
[Set](Key, E.DefaultValue, E, ForceReload, Version)
|
||||
End Sub
|
||||
|
||||
Private Sub Read(Key As String, ByRef E As SetupEntry, Version As McVersion)
|
||||
Try
|
||||
If Not E.State = 0 Then Exit Sub
|
||||
Dim SourceValue As String '先用 String 储存,避免类型转换
|
||||
Select Case E.Source
|
||||
Case SetupSource.Normal
|
||||
SourceValue = ReadIni("Setup", Key, E.DefaultValueEncoded)
|
||||
Case SetupSource.Registry
|
||||
SourceValue = ReadReg(Key, E.DefaultValueEncoded)
|
||||
Case Else 'SetupSource.Version
|
||||
If Version Is Nothing Then
|
||||
Throw New Exception("读取版本设置 " & Key & " 时未提供目标版本")
|
||||
Else
|
||||
SourceValue = ReadIni(Version.Path & "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" & UniqueAddress)
|
||||
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(PathMcFolder & "PCL.ini", "Version", If(IsNothing(McVersionCurrent), "", McVersionCurrent.Name))
|
||||
End Sub
|
||||
Public Sub LaunchFolderSelect(Value As String)
|
||||
Log("[Setup] 当前选择的 Minecraft 文件夹:" & Value.ToString.Replace("$", Path))
|
||||
PathMcFolder = Value.ToString.Replace("$", Path)
|
||||
End Sub
|
||||
|
||||
'游戏内存
|
||||
Public Sub LaunchRamType(Type As Integer)
|
||||
If FrmSetupLaunch Is Nothing Then Exit Sub
|
||||
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)
|
||||
Net.ServicePointManager.ServerCertificateValidationCallback =
|
||||
If(Value, Nothing, New Net.Security.RemoteCertificateValidationCallback(Function() True))
|
||||
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
|
||||
#If Not BETA Then
|
||||
Public Sub UiLauncherTheme(Value As Integer)
|
||||
ThemeRefresh(Value)
|
||||
End Sub
|
||||
#End If
|
||||
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 IsNothing(FrmMain.ImgBack.Background) Then Exit Sub
|
||||
Dim Width As Double = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
|
||||
Dim Height As Double = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
|
||||
If Value = 0 Then
|
||||
'智能:当图片较小时平铺,较大时适应
|
||||
If Width < FrmMain.PanMain.ActualWidth / 2 AndAlso Height < FrmMain.PanMain.ActualHeight / 2 Then
|
||||
Value = 4 '平铺
|
||||
Else
|
||||
Value = 2 '适应
|
||||
End If
|
||||
End If
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).TileMode = TileMode.None
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Viewport = New Rect(0, 0, 1, 1)
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).ViewportUnits = BrushMappingMode.RelativeToBoundingBox
|
||||
Select Case Value
|
||||
Case 1 '居中
|
||||
FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Center
|
||||
FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Center
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
|
||||
FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
|
||||
FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
|
||||
Case 2 '适应
|
||||
FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Stretch
|
||||
FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Stretch
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.UniformToFill
|
||||
FrmMain.ImgBack.Width = Double.NaN
|
||||
FrmMain.ImgBack.Height = Double.NaN
|
||||
Case 3 '拉伸
|
||||
FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Stretch
|
||||
FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Stretch
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.Fill
|
||||
FrmMain.ImgBack.Width = Double.NaN
|
||||
FrmMain.ImgBack.Height = Double.NaN
|
||||
Case 4 '平铺
|
||||
FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Stretch
|
||||
FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Stretch
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).TileMode = TileMode.Tile
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Viewport = New Rect(0, 0, CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width, CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height)
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).ViewportUnits = BrushMappingMode.Absolute
|
||||
FrmMain.ImgBack.Width = Double.NaN
|
||||
FrmMain.ImgBack.Height = Double.NaN
|
||||
Case 5 '左上
|
||||
FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Left
|
||||
FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Top
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
|
||||
FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
|
||||
FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
|
||||
Case 6 '右上
|
||||
FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Right
|
||||
FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Top
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
|
||||
FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
|
||||
FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
|
||||
Case 7 '左下
|
||||
FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Left
|
||||
FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Bottom
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
|
||||
FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
|
||||
FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
|
||||
Case 8 '右下
|
||||
FrmMain.ImgBack.HorizontalAlignment = HorizontalAlignment.Right
|
||||
FrmMain.ImgBack.VerticalAlignment = VerticalAlignment.Bottom
|
||||
CType(FrmMain.ImgBack.Background, ImageBrush).Stretch = Stretch.None
|
||||
FrmMain.ImgBack.Width = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Width
|
||||
FrmMain.ImgBack.Height = CType(FrmMain.ImgBack.Background, ImageBrush).ImageSource.Height
|
||||
End Select
|
||||
End Sub
|
||||
|
||||
'主页
|
||||
Public Sub UiCustomType(Value As Integer)
|
||||
If FrmSetupUI Is Nothing Then Exit Sub
|
||||
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
|
||||
Case 1 '本地
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Visible
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustom.Text = $"从 PCL 文件夹下的 Custom.xaml 读取主页内容。{vbCrLf}你可以手动编辑该文件,向主页添加文本、图片、常用网站、快捷启动等功能。"
|
||||
FrmSetupUI.HintCustom.EventType = ""
|
||||
FrmSetupUI.HintCustom.EventData = ""
|
||||
Case 2 '联网
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustom.Visibility = Visibility.Visible
|
||||
FrmSetupUI.HintCustom.Text = $"从指定网址联网获取主页内容。服主也可以用于动态更新服务器公告。{vbCrLf}如果你制作了稳定运行的联网主页,可以点击这条提示投稿,若合格即可加入预设!"
|
||||
FrmSetupUI.HintCustom.EventType = "打开网页"
|
||||
FrmSetupUI.HintCustom.EventData = "https://github.com/Hex-Dragon/PCL2/discussions/2528"
|
||||
Case 3 '预设
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Visible
|
||||
FrmSetupUI.PanCustomLocal.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.PanCustomNet.Visibility = Visibility.Collapsed
|
||||
FrmSetupUI.HintCustom.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 = New MyBitmap(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 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 FrmVersionSetup Is Nothing Then Exit Sub
|
||||
FrmVersionSetup.RamType(Type)
|
||||
End Sub
|
||||
|
||||
'服务器
|
||||
Public Sub VersionServerLogin(Type As Integer)
|
||||
If FrmVersionSetup Is Nothing Then Exit Sub
|
||||
'为第三方登录清空缓存以更新描述
|
||||
WriteIni(PathMcFolder & "PCL.ini", "VersionCache", "")
|
||||
If PageVersionLeft.Version Is Nothing Then Exit Sub
|
||||
PageVersionLeft.Version = New McVersion(PageVersionLeft.Version.Name).Load()
|
||||
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
End Class
|
||||
Reference in New Issue
Block a user