2.10.1
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
Return LabTitle.Text
|
||||
End Get
|
||||
Set(value As String)
|
||||
If LabTitle.Text = value Then Exit Property
|
||||
If LabTitle.Text = value Then Return
|
||||
LabTitle.Text = value
|
||||
End Set
|
||||
End Property
|
||||
@@ -30,7 +30,7 @@
|
||||
Return If(LabTitleRaw?.Text, "")
|
||||
End Get
|
||||
Set(value As String)
|
||||
If LabTitleRaw.Text = value Then Exit Property
|
||||
If LabTitleRaw.Text = value Then Return
|
||||
LabTitleRaw.Text = value
|
||||
LabTitleRaw.Visibility = If(value = "", Visibility.Collapsed, Visibility.Visible)
|
||||
End Set
|
||||
@@ -42,7 +42,7 @@
|
||||
Return LabInfo.Text
|
||||
End Get
|
||||
Set(value As String)
|
||||
If LabInfo.Text = value Then Exit Property
|
||||
If LabInfo.Text = value Then Return
|
||||
LabInfo.Text = value
|
||||
End Set
|
||||
End Property
|
||||
@@ -88,7 +88,7 @@
|
||||
Private Sub Button_MouseUp(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseLeftButtonUp
|
||||
If IsMouseDown Then
|
||||
RaiseEvent Click(sender, e)
|
||||
If e.Handled Then Exit Sub
|
||||
If e.Handled Then Return
|
||||
Log("[Control] 按下资源工程列表项:" & LabTitle.Text)
|
||||
End If
|
||||
End Sub
|
||||
@@ -185,7 +185,7 @@
|
||||
''' </summary>
|
||||
Public Property CanInteraction As Boolean = True
|
||||
Public Sub RefreshColor(sender As Object, e As EventArgs) Handles Me.MouseEnter, Me.MouseLeave, Me.MouseLeftButtonDown, Me.MouseLeftButtonUp
|
||||
If Not CanInteraction Then Exit Sub
|
||||
If Not CanInteraction Then Return
|
||||
'判断当前颜色
|
||||
Dim StateNew As String, Time As Integer
|
||||
If IsMouseOver Then
|
||||
@@ -200,7 +200,7 @@
|
||||
StateNew = "Idle"
|
||||
Time = 180
|
||||
End If
|
||||
If StateLast = StateNew Then Exit Sub
|
||||
If StateLast = StateNew Then Return
|
||||
StateLast = StateNew
|
||||
'触发颜色动画
|
||||
If IsLoaded AndAlso AniControlEnabled = 0 Then '防止默认属性变更触发动画
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
</StackPanel>
|
||||
</local:MyCard>
|
||||
<StackPanel x:Name="PanContent">
|
||||
<local:MyHint x:Name="HintError" Text="无法连接到 Modrinth,所以目前仅显示了来自 CurseForge 的内容,结果可能不全。
请尝试使用 VPN 或加速器以改善网络。" IsWarn="True" Margin="0,0,0,15" />
|
||||
<local:MyHint x:Name="HintError" HasBorder="True" Text="无法连接到 Modrinth,所以目前仅显示了来自 CurseForge 的内容,搜索结果可能不全。
请稍后重试,或使用 VPN 以改善网络环境。" Theme="Yellow" Margin="0,0,0,15" />
|
||||
<local:MyCard x:Name="CardProjects" UseAnimation="False">
|
||||
<StackPanel x:Name="PanProjects" Margin="12" />
|
||||
</local:MyCard>
|
||||
|
||||
@@ -108,19 +108,11 @@ Public Class PageComp
|
||||
Dim Request As New CompProjectRequest(PageType, Storage, (Page + 1) * PageSize)
|
||||
Dim GameVersion As String = If(TextSearchVersion.Text = "全部 (也可自行输入)", Nothing,
|
||||
If(TextSearchVersion.Text.Contains(".") OrElse TextSearchVersion.Text.Contains("w"), TextSearchVersion.Text, Nothing))
|
||||
Dim ModLoader As CompModLoaderType = CompModLoaderType.Any
|
||||
If PageType = CompType.Mod Then '只有 Mod 考虑加载器
|
||||
ModLoader = Val(ComboSearchLoader.SelectedItem.Tag)
|
||||
If GameVersion IsNot Nothing AndAlso GameVersion.Contains(".") AndAlso Val(GameVersion.Split(".")(1)) < 14 AndAlso '1.14-
|
||||
ModLoader = CompModLoaderType.Forge Then '选择了 Forge
|
||||
ModLoader = CompModLoaderType.Any '此时,视作没有筛选 Mod Loader(因为部分老 Mod 没有设置自己支持的加载器)
|
||||
End If
|
||||
End If
|
||||
With Request
|
||||
.SearchText = TextSearchName.Text
|
||||
.GameVersion = GameVersion
|
||||
.Tag = ComboSearchTag.SelectedItem.Tag
|
||||
.ModLoader = ModLoader
|
||||
.ModLoader = If(PageType = CompType.Mod, Val(ComboSearchLoader.SelectedItem.Tag), CompModLoaderType.Any)
|
||||
.Source = CType(Val(ComboSearchSource.SelectedItem.Tag), CompSourceType)
|
||||
End With
|
||||
Return Request
|
||||
@@ -188,7 +180,6 @@ Public Class PageComp
|
||||
End Sub
|
||||
|
||||
'切换页码
|
||||
|
||||
Private Sub BtnPageFirst_Click(sender As Object, e As RoutedEventArgs) Handles BtnPageFirst.Click
|
||||
ChangePage(0)
|
||||
End Sub
|
||||
|
||||
@@ -7,7 +7,9 @@
|
||||
"Comp File",
|
||||
Sub(Task)
|
||||
LoadTargetFromAdditional()
|
||||
Task.Output = CompFilesGet(Project.Id, Project.FromCurseForge)
|
||||
Dim Result = CompFilesGet(Project.Id, Project.FromCurseForge)
|
||||
If Task.IsAborted Then Return
|
||||
Task.Output = Result
|
||||
End Sub)
|
||||
|
||||
'初始化加载器信息
|
||||
@@ -204,7 +206,7 @@
|
||||
End If
|
||||
'增加提示
|
||||
If Pair.Key = "其他版本" Then
|
||||
NewStack.Children.Add(New MyHint With {.Text = "由于版本信息更新缓慢,可能无法识别刚更新的 MC 版本,只需等待几天即可自动恢复正常。", .IsWarn = False, .Margin = New Thickness(0, 0, 0, 7)})
|
||||
NewStack.Children.Add(New MyHint With {.Text = "由于版本信息更新缓慢,可能无法识别刚更新的 MC 版本。几天后即可正常识别。", .Theme = MyHint.Themes.Yellow, .Margin = New Thickness(5, 0, 0, 8)})
|
||||
End If
|
||||
Next
|
||||
'如果只有一张卡片,展开第一张卡片
|
||||
@@ -270,7 +272,7 @@
|
||||
Dim Validate As New ValidateFolderName(PathMcFolder & "versions")
|
||||
If Validate.Validate(PackName) <> "" Then PackName = ""
|
||||
Dim VersionName As String = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate})
|
||||
If String.IsNullOrEmpty(VersionName) Then Exit Sub
|
||||
If String.IsNullOrEmpty(VersionName) Then Return
|
||||
|
||||
'构造步骤加载器
|
||||
Dim Loaders As New List(Of LoaderBase)
|
||||
@@ -289,7 +291,7 @@
|
||||
Case LoadState.Aborted
|
||||
Hint(MyLoader.Name & "已取消!", HintType.Info)
|
||||
Case LoadState.Loading
|
||||
Exit Sub '不重新加载版本列表
|
||||
Return '不重新加载版本列表
|
||||
End Select
|
||||
McInstallFailedClearFolder(MyLoader)
|
||||
End Sub}
|
||||
@@ -319,83 +321,72 @@
|
||||
End Select
|
||||
'确认默认保存位置
|
||||
Dim DefaultFolder As String = Nothing
|
||||
Dim ResourceFolderName As String = ""
|
||||
Select Case Project.Type
|
||||
Case CompType.Mod : ResourceFolderName = "mods"
|
||||
Case CompType.ResourcePack : ResourceFolderName = "resourcepacks"
|
||||
Case CompType.Shader : ResourceFolderName = "shaderpacks"
|
||||
End Select
|
||||
Dim IsVersionSuitable As Func(Of McVersion, Boolean)
|
||||
If Project.Type = CompType.Mod Then
|
||||
'获取 Mod 所需的加载器种类
|
||||
Dim AllowForge As Boolean? = Nothing, AllowFabric As Boolean? = Nothing
|
||||
If File.ModLoaders.Any Then '从文件中获取
|
||||
AllowForge = File.ModLoaders.Contains(CompModLoaderType.Forge) OrElse File.ModLoaders.Contains(CompModLoaderType.NeoForge)
|
||||
AllowFabric = File.ModLoaders.Contains(CompModLoaderType.Fabric)
|
||||
ElseIf Project.ModLoaders.Any Then '从工程中获取
|
||||
AllowForge = Project.ModLoaders.Contains(CompModLoaderType.Forge) OrElse File.ModLoaders.Contains(CompModLoaderType.NeoForge)
|
||||
AllowFabric = Project.ModLoaders.Contains(CompModLoaderType.Fabric)
|
||||
If File.Type <> CompType.ModPack Then
|
||||
Dim SubFolder As String = Nothing
|
||||
Select Case Project.Type
|
||||
Case CompType.Mod : SubFolder = "mods\"
|
||||
Case CompType.ResourcePack : SubFolder = "resourcepacks\"
|
||||
Case CompType.Shader : SubFolder = "shaderpacks\"
|
||||
Case CompType.DataPack : SubFolder = "" '导航到版本根目录
|
||||
End Select
|
||||
Dim IsVersionSuitable As Func(Of McVersion, Boolean) = Nothing
|
||||
'获取资源所需的加载器
|
||||
Dim AllowedLoaders As New List(Of CompModLoaderType)
|
||||
If File.ModLoaders.Any Then
|
||||
AllowedLoaders = File.ModLoaders
|
||||
ElseIf Project.ModLoaders.Any Then
|
||||
AllowedLoaders = Project.ModLoaders
|
||||
End If
|
||||
If AllowForge IsNot Nothing AndAlso Not AllowForge AndAlso AllowFabric IsNot Nothing AndAlso Not AllowFabric Then
|
||||
AllowForge = Nothing : AllowFabric = Nothing
|
||||
End If
|
||||
Log("[Comp] 允许 Forge:" & If(AllowForge, "未知") & ",允许 Fabric:" & If(AllowFabric, "未知"))
|
||||
'判断某个版本是否符合 Mod 要求
|
||||
Log($"[Comp] {Desc}要求的加载器种类:" & If(AllowedLoaders.Any(), AllowedLoaders.Join(" / "), "无要求"))
|
||||
'判断某个版本是否符合资源要求
|
||||
IsVersionSuitable =
|
||||
Function(Version)
|
||||
If Not Version.IsLoaded Then Version.Load()
|
||||
If Not Version.Modable Then Return False
|
||||
If File.GameVersions.Any(Function(v) v.Contains(".")) AndAlso
|
||||
Not File.GameVersions.Any(Function(v) v.Contains(".") AndAlso v = Version.Version.McName) Then Return False
|
||||
If AllowForge Is Nothing OrElse AllowFabric Is Nothing Then Return True
|
||||
If AllowForge AndAlso (Version.Version.HasForge OrElse Version.Version.HasNeoForge) Then Return True
|
||||
If AllowFabric AndAlso Version.Version.HasFabric Then Return True
|
||||
'只对 Mod 和数据包进行版本检测
|
||||
If Project.Type = CompType.Mod OrElse Project.Type = CompType.DataPack Then
|
||||
If File.GameVersions.Any(Function(v) v.Contains(".")) AndAlso
|
||||
Not File.GameVersions.Any(Function(v) v.Contains(".") AndAlso v = Version.Version.McName) Then Return False
|
||||
End If
|
||||
'加载器
|
||||
If Not AllowedLoaders.Any() Then Return True '无要求
|
||||
If AllowedLoaders.Contains(CompModLoaderType.Forge) AndAlso Version.Version.HasForge Then Return True
|
||||
If AllowedLoaders.Contains(CompModLoaderType.Fabric) AndAlso Version.Version.HasFabric Then Return True
|
||||
If AllowedLoaders.Contains(CompModLoaderType.NeoForge) AndAlso Version.Version.HasNeoForge Then Return True
|
||||
If AllowedLoaders.Contains(CompModLoaderType.LiteLoader) AndAlso Version.Version.HasLiteLoader Then Return True
|
||||
Return False
|
||||
End Function
|
||||
ElseIf {CompType.ResourcePack, CompType.Shader}.Contains(Project.Type) Then
|
||||
'判断某个版本是否符合资源包和光影要求
|
||||
IsVersionSuitable =
|
||||
Function(Version)
|
||||
If Not Version.IsLoaded Then Version.Load()
|
||||
If File.GameVersions.Any(Function(v) v.Contains(".") AndAlso v = Version.Version.McName) Then Return True
|
||||
Return False
|
||||
End Function
|
||||
End If
|
||||
If Not String.IsNullOrWhiteSpace(ResourceFolderName) AndAlso IsVersionSuitable IsNot Nothing Then
|
||||
'获取常规资源默认下载位置
|
||||
If CachedFolder IsNot Nothing Then
|
||||
DefaultFolder = CachedFolder
|
||||
Log("[Comp] 使用上次下载时的文件夹作为默认下载位置")
|
||||
Log($"[Comp] 使用上次下载时的文件夹作为默认下载位置:{DefaultFolder}")
|
||||
ElseIf McVersionCurrent IsNot Nothing AndAlso IsVersionSuitable(McVersionCurrent) Then
|
||||
DefaultFolder = McVersionCurrent.PathIndie & $"{ResourceFolderName}\"
|
||||
DefaultFolder = $"{McVersionCurrent.PathIndie}{SubFolder}"
|
||||
Directory.CreateDirectory(DefaultFolder)
|
||||
Log($"[Comp] 使用当前版本的 {ResourceFolderName} 文件夹作为默认下载位置({McVersionCurrent.Name})")
|
||||
Log($"[Comp] 使用当前版本作为默认下载位置:{DefaultFolder}")
|
||||
Else
|
||||
'查找所有可能的版本
|
||||
Dim NeedLoad As Boolean = McVersionListLoader.State <> LoadState.Finished
|
||||
If NeedLoad Then
|
||||
Hint("正在查找适合的游戏版本……")
|
||||
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\", WaitForExit:=True)
|
||||
End If
|
||||
Dim SuitableVersions As New List(Of McVersion)
|
||||
For Each Version As McVersion In McVersionList.Values.SelectMany(Function(l) l)
|
||||
If IsVersionSuitable(Version) Then SuitableVersions.Add(Version)
|
||||
Next
|
||||
If Not SuitableVersions.Any() Then
|
||||
Dim SuitableVersions = McVersionList.Values.SelectMany(Function(l) l).Where(Function(v) IsVersionSuitable(v)).
|
||||
Select(Function(v) New DirectoryInfo($"{v.PathIndie}{SubFolder}"))
|
||||
If SuitableVersions.Any Then
|
||||
Dim SelectedVersion = SuitableVersions.
|
||||
OrderByDescending(Function(Dir) If(Dir.Exists, Dir.LastWriteTimeUtc, Date.MinValue)). '先按文件夹更改时间降序
|
||||
ThenByDescending(Function(Dir) If(Dir.Exists, Dir.GetFiles().Length, -1)). '再按文件夹中的文件数量降序
|
||||
First()
|
||||
DefaultFolder = SelectedVersion.FullName
|
||||
Directory.CreateDirectory(DefaultFolder)
|
||||
Log($"[Comp] 使用适合的游戏版本作为默认下载位置:{DefaultFolder}")
|
||||
Else
|
||||
DefaultFolder = PathMcFolder
|
||||
If NeedLoad Then
|
||||
Hint("当前 MC 文件夹中没有找到适合此资源文件的版本!")
|
||||
Hint("当前 MC 文件夹中没有找到适合此资源的版本!")
|
||||
Else
|
||||
Log("[Comp] 由于当前版本不兼容,使用当前的 MC 文件夹作为默认下载位置")
|
||||
End If
|
||||
Else '选择资源数量最多的版本
|
||||
Dim SelectedVersion = SuitableVersions.OrderBy(
|
||||
Function(v)
|
||||
Dim Info As New DirectoryInfo(v.PathIndie & $"{ResourceFolderName}\")
|
||||
Return If(Info.Exists, Info.GetFiles().Length, -1)
|
||||
End Function).LastOrDefault()
|
||||
DefaultFolder = SelectedVersion.PathIndie & $"{ResourceFolderName}\"
|
||||
Directory.CreateDirectory(DefaultFolder)
|
||||
Log("[Comp] 使用适合的游戏版本作为默认下载位置(" & SelectedVersion.Name & ")")
|
||||
End If
|
||||
End If
|
||||
End If
|
||||
@@ -428,7 +419,7 @@
|
||||
If(File.Type = CompType.Mod,
|
||||
If(File.FileName.EndsWith(".litemod"), "*.litemod", "*.jar"),
|
||||
If(File.FileName.EndsWith(".mrpack"), "*.mrpack", "*.zip")), DefaultFolder)
|
||||
If Not Target.Contains("\") Then Exit Sub
|
||||
If Not Target.Contains("\") Then Return
|
||||
'构造步骤加载器
|
||||
Dim LoaderName As String = Desc & "下载:" & GetFileNameWithoutExtentionFromPath(Target) & " "
|
||||
If Target <> DefaultFolder AndAlso File.Type = CompType.Mod Then CachedFolder = GetPathFromFullPath(Target)
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="卡通风" Tag="/cartoon" />
|
||||
|
||||
<local:MyComboBoxItem Content="特性" IsEnabled="False" />
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="原版可用" Tag="/vanilla" ToolTip="作为资源包加载,可以直接在原版游戏里使用。" ToolTipService.HorizontalOffset="70" />
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="彩色光照" Tag="/colored-lighting" />
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="路径追踪" Tag="/path-tracing" />
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="PBR" Tag="/pbr" />
|
||||
@@ -26,6 +25,10 @@
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="低" Tag="/low" />
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="中" Tag="/medium" />
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="高" Tag="/high" />
|
||||
|
||||
|
||||
<local:MyComboBoxItem Content="加载器" IsEnabled="False" />
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="原版可用s" Tag="/vanilla" ToolTip="作为资源包加载,可以直接在原版游戏里使用。" ToolTipService.HorizontalOffset="70" />
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="Iris" Tag="/iris" />
|
||||
<local:MyComboBoxItem Margin="15,0,0,0" Content="OptiFine" Tag="/optifine" />
|
||||
</local:PageComp>
|
||||
</local:MyPageRight>
|
||||
|
||||
@@ -217,14 +217,14 @@ Public Module ModDownloadLib
|
||||
Dim Id = Version.Title
|
||||
Dim JsonUrl = Version.Tag("url").ToString
|
||||
Dim VersionFolder As String = SelectFolder()
|
||||
If Not VersionFolder.Contains("\") Then Exit Sub
|
||||
If Not VersionFolder.Contains("\") Then Return
|
||||
VersionFolder = VersionFolder & Id & "\"
|
||||
|
||||
'重复任务检查
|
||||
For Each OngoingLoader In LoaderTaskbar.ToList()
|
||||
If OngoingLoader.Name <> $"Minecraft {Id} 服务端下载" Then Continue For
|
||||
Hint("该服务端正在下载中!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Next
|
||||
|
||||
Dim Loaders As New List(Of LoaderBase)
|
||||
@@ -244,7 +244,7 @@ Public Module ModDownloadLib
|
||||
Hint($"Mojang 没有给 Minecraft {Id} 提供官方服务端下载,没法下,撤退!", HintType.Critical)
|
||||
Thread.Sleep(2000) '等玩家把上一个提示看完
|
||||
Task.Abort()
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Dim JarUrl As String = McVersion.JsonObject("downloads")("server")("url")
|
||||
Dim Checker As New FileChecker(MinSize:=1024, ActualSize:=If(McVersion.JsonObject("downloads")("server")("size"), -1), Hash:=McVersion.JsonObject("downloads")("server")("sha1"))
|
||||
@@ -294,14 +294,14 @@ pause"
|
||||
Dim Id = Version.Title
|
||||
Dim JsonUrl = Version.Tag("url").ToString
|
||||
Dim VersionFolder As String = SelectFolder()
|
||||
If Not VersionFolder.Contains("\") Then Exit Sub
|
||||
If Not VersionFolder.Contains("\") Then Return
|
||||
VersionFolder = VersionFolder & Id & "\"
|
||||
|
||||
'重复任务检查
|
||||
For Each OngoingLoader In LoaderTaskbar.ToList()
|
||||
If OngoingLoader.Name <> $"Minecraft {Id} 下载" Then Continue For
|
||||
Hint("该版本正在下载中!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Next
|
||||
|
||||
Dim Loaders As New List(Of LoaderBase)
|
||||
@@ -383,7 +383,7 @@ pause"
|
||||
WikiName = "Java版Pre-classic_" & Id
|
||||
Else
|
||||
Log("[Error] 未知的版本格式:" & Id & "。", LogLevel.Feedback)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
OpenWebsite("https://zh.minecraft.wiki/w/" & WikiName.Replace("_experimental-snapshot-", "-exp"))
|
||||
End Sub
|
||||
@@ -396,13 +396,13 @@ pause"
|
||||
Try
|
||||
Dim Id As String = DownloadInfo.NameVersion
|
||||
Dim Target As String = SelectSaveFile("选择保存位置", DownloadInfo.NameFile, "OptiFine Jar (*.jar)|*.jar")
|
||||
If Not Target.Contains("\") Then Exit Sub
|
||||
If Not Target.Contains("\") Then Return
|
||||
|
||||
'重复任务检查
|
||||
For Each OngoingLoader In LoaderTaskbar.ToList()
|
||||
If OngoingLoader.Name <> $"OptiFine {DownloadInfo.NameDisplay} 下载" Then Continue For
|
||||
Hint("该版本正在下载中!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Next
|
||||
|
||||
Dim Loader As New LoaderCombo(Of DlOptiFineListEntry)("OptiFine " & DownloadInfo.NameDisplay & " 下载", McDownloadOptiFineSaveLoader(DownloadInfo, Target)) With {.OnStateChanged = AddressOf LoaderStateChangedHintOnly}
|
||||
@@ -434,7 +434,7 @@ pause"
|
||||
End Try
|
||||
'检查下载结果
|
||||
Java = JavaSelect("已取消安装。", New Version(1, 8, 0, 0))
|
||||
If Task.IsAborted Then Exit Sub
|
||||
If Task.IsAborted Then Return
|
||||
If Java Is Nothing Then Throw New Exception("由于未找到 Java,已取消安装。")
|
||||
End If
|
||||
End SyncLock
|
||||
@@ -584,7 +584,7 @@ pause"
|
||||
Loaders.Add(New LoaderTask(Of List(Of NetFile), Boolean)("等待原版下载",
|
||||
Sub(Task As LoaderTask(Of List(Of NetFile), Boolean))
|
||||
'等待原版文件下载完成
|
||||
If ClientDownloadLoader Is Nothing Then Exit Sub
|
||||
If ClientDownloadLoader Is Nothing Then Return
|
||||
Dim TargetLoaders As List(Of LoaderBase) =
|
||||
ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
||||
Where(Function(l) l.State <> LoadState.Finished).ToList
|
||||
@@ -593,9 +593,9 @@ pause"
|
||||
TargetLoaders = TargetLoaders.Where(Function(l) l.State <> LoadState.Finished).ToList
|
||||
Thread.Sleep(50)
|
||||
Loop
|
||||
If Task.IsAborted Then Exit Sub
|
||||
If Task.IsAborted Then Return
|
||||
'拷贝原版文件
|
||||
If Not IsCustomFolder Then Exit Sub
|
||||
If Not IsCustomFolder Then Return
|
||||
SyncLock VanillaSyncLock
|
||||
Dim ClientName As String = GetFolderNameFromPath(ClientFolder)
|
||||
Directory.CreateDirectory(McFolder & "versions\" & DownloadInfo.Inherit)
|
||||
@@ -707,7 +707,7 @@ Retry:
|
||||
'下载支持库
|
||||
If FixLibrary Then
|
||||
Loaders.Add(New LoaderTask(Of String, List(Of NetFile))("分析 OptiFine 支持库文件",
|
||||
Sub(Task As LoaderTask(Of String, List(Of NetFile))) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
||||
Sub(Task) Task.Output = McLibFix(New McVersion(VersionFolder))) With {.ProgressWeight = 1, .Show = False})
|
||||
Loaders.Add(New LoaderDownload("下载 OptiFine 支持库文件", New List(Of NetFile)) With {.ProgressWeight = 4})
|
||||
End If
|
||||
|
||||
@@ -831,7 +831,7 @@ Retry:
|
||||
For Each OngoingLoader In LoaderTaskbar.ToList()
|
||||
If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For
|
||||
Hint("该版本正在下载中!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Next
|
||||
|
||||
'已有版本检查
|
||||
@@ -840,7 +840,7 @@ Retry:
|
||||
File.Delete(VersionFolder & VersionName & ".jar")
|
||||
File.Delete(VersionFolder & VersionName & ".json")
|
||||
Else
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
End If
|
||||
|
||||
@@ -859,13 +859,13 @@ Retry:
|
||||
Try
|
||||
Dim Id As String = DownloadInfo.Inherit
|
||||
Dim Target As String = SelectSaveFile("选择保存位置", DownloadInfo.FileName.Replace("-SNAPSHOT", ""), "LiteLoader 安装器 (*.jar)|*.jar")
|
||||
If Not Target.Contains("\") Then Exit Sub
|
||||
If Not Target.Contains("\") Then Return
|
||||
|
||||
'重复任务检查
|
||||
For Each OngoingLoader In LoaderTaskbar.ToList()
|
||||
If OngoingLoader.Name <> $"LiteLoader {Id} 下载" Then Continue For
|
||||
Hint("该版本正在下载中!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Next
|
||||
|
||||
'构造步骤加载器
|
||||
@@ -1041,13 +1041,13 @@ Retry:
|
||||
Dim Target As String = SelectSaveFile("选择保存位置", $"{Info.LoaderName}-{Info.Inherit}-{Info.VersionName}.{Info.FileExtension}",
|
||||
$"{Info.LoaderName} 安装器 (*.{Info.FileExtension})|*.{Info.FileExtension}")
|
||||
Dim DisplayName As String = $"{Info.LoaderName} {Info.Inherit} - {Info.VersionName}"
|
||||
If Not Target.Contains("\") Then Exit Sub
|
||||
If Not Target.Contains("\") Then Return
|
||||
|
||||
'重复任务检查
|
||||
For Each OngoingLoader In LoaderTaskbar.ToList()
|
||||
If OngoingLoader.Name <> $"{DisplayName} 下载" Then Continue For
|
||||
Hint("该版本正在下载中!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Next
|
||||
|
||||
'获取下载地址
|
||||
@@ -1103,7 +1103,7 @@ Retry:
|
||||
End Try
|
||||
'检查下载结果
|
||||
Java = JavaSelect("已取消安装。", New Version(1, 8, 0, 60))
|
||||
If Task.IsAborted Then Exit Sub
|
||||
If Task.IsAborted Then Return
|
||||
If Java Is Nothing Then Throw New Exception("由于未找到 Java,已取消安装。")
|
||||
End If
|
||||
End SyncLock
|
||||
@@ -1189,7 +1189,7 @@ Retry:
|
||||
errorWaitHandle.WaitOne(10000)
|
||||
process.Dispose()
|
||||
'检查是否安装成功:最后 5 行中是否有 true(true 可能在倒数数行,见 #832)
|
||||
If LastResults.Reverse().Take(5).Any(Function(l) l = "true") Then Exit Sub
|
||||
If LastResults.Reverse().Take(5).Any(Function(l) l = "true") Then Return
|
||||
Log(Join(LastResults, vbCrLf))
|
||||
Dim LastLines As String = ""
|
||||
For i As Integer = Math.Max(0, LastResults.Count - 5) To LastResults.Count - 1 '最后 5 行
|
||||
@@ -1237,7 +1237,7 @@ Retry:
|
||||
Task.Progress = 0.91
|
||||
Case Else
|
||||
If ModeDebug Then Log("[Installer] " & Content)
|
||||
Exit Sub
|
||||
Return
|
||||
End Select
|
||||
Log("[Installer] " & Content)
|
||||
End Sub
|
||||
@@ -1282,7 +1282,7 @@ Retry:
|
||||
For Each ForgeVersion In ForgeLoader.Output
|
||||
If VersionSortInteger(ForgeVersion.Version.ToString, LoaderVersion) = 0 Then
|
||||
Info = ForgeVersion
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Next
|
||||
Throw New Exception($"未能找到 {LoaderName} " & Inherit & "-" & LoaderVersion & " 的详细信息!")
|
||||
@@ -1385,7 +1385,7 @@ Retry:
|
||||
#End Region
|
||||
#Region "原版文件"
|
||||
'等待原版文件下载完成
|
||||
If ClientDownloadLoader Is Nothing Then Exit Sub
|
||||
If ClientDownloadLoader Is Nothing Then Return
|
||||
Dim TargetLoaders As List(Of LoaderBase) =
|
||||
ClientDownloadLoader.GetLoaderList.Where(Function(l) l.Name = McDownloadClientLibName OrElse l.Name = McDownloadClientJsonName).
|
||||
Where(Function(l) l.State <> LoadState.Finished).ToList()
|
||||
@@ -1394,9 +1394,9 @@ Retry:
|
||||
TargetLoaders = TargetLoaders.Where(Function(l) l.State <> LoadState.Finished).ToList
|
||||
Thread.Sleep(50)
|
||||
Loop
|
||||
If Task.IsAborted Then Exit Sub
|
||||
If Task.IsAborted Then Return
|
||||
'拷贝原版文件
|
||||
If Not IsCustomFolder Then Exit Sub
|
||||
If Not IsCustomFolder Then Return
|
||||
SyncLock VanillaSyncLock
|
||||
Dim ClientName As String = GetFolderNameFromPath(ClientFolder)
|
||||
Directory.CreateDirectory(McFolder & "versions\" & Inherit)
|
||||
@@ -1639,7 +1639,7 @@ Retry:
|
||||
''' 尝试刷新 Forge 推荐版本缓存。
|
||||
''' </summary>
|
||||
Public Sub McDownloadForgeRecommendedRefresh()
|
||||
If IsForgeRecommendedRefreshed Then Exit Sub
|
||||
If IsForgeRecommendedRefreshed Then Return
|
||||
IsForgeRecommendedRefreshed = True
|
||||
RunInNewThread(Sub()
|
||||
Try
|
||||
@@ -1795,13 +1795,13 @@ Retry:
|
||||
Dim FileName As String = GetFileNameFromPath(Url)
|
||||
Dim Version As String = GetFileNameFromPath(DownloadInfo("version").ToString)
|
||||
Dim Target As String = SelectSaveFile("选择保存位置", FileName, "Fabric 安装器 (*.jar)|*.jar")
|
||||
If Not Target.Contains("\") Then Exit Sub
|
||||
If Not Target.Contains("\") Then Return
|
||||
|
||||
'重复任务检查
|
||||
For Each OngoingLoader In LoaderTaskbar.ToList()
|
||||
If OngoingLoader.Name <> $"Fabric {Version} 安装器下载" Then Continue For
|
||||
Hint("该版本正在下载中!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Next
|
||||
|
||||
'构造步骤加载器
|
||||
@@ -2006,7 +2006,7 @@ Retry:
|
||||
Case LoadState.Aborted
|
||||
Hint(Loader.Name & "已取消!", HintType.Info)
|
||||
Case LoadState.Loading
|
||||
Exit Sub '不重新加载版本列表
|
||||
Return '不重新加载版本列表
|
||||
End Select
|
||||
McInstallFailedClearFolder(Loader)
|
||||
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
End If
|
||||
End Sub
|
||||
Public Sub Forge_StateChanged(sender As MyLoading, newState As MyLoading.MyLoadingState, oldState As MyLoading.MyLoadingState)
|
||||
If newState <> MyLoading.MyLoadingState.Stop Then Exit Sub
|
||||
If newState <> MyLoading.MyLoadingState.Stop Then Return
|
||||
|
||||
Dim Card As MyCard = CType(sender.Parent, FrameworkElement).Parent
|
||||
Dim Loader As LoaderTask(Of String, List(Of DlForgeVersionEntry)) = sender.State
|
||||
|
||||
@@ -23,10 +23,10 @@
|
||||
<local:MyImage x:Name="ImgLogo" Margin="52,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Left" Height="32" RenderOptions.BitmapScalingMode="HighQuality" />
|
||||
<local:MyTextBox Margin="93,0,16,0" Padding="-1,0" MinHeight="30" FontSize="15" VerticalAlignment="Center" x:Name="TextSelectName" MaxLength="70" HasBackground="False" />
|
||||
</local:MyCard>
|
||||
<local:MyHint Text="如果不安装 Fabric API,大多数 Mod 都会无法使用!" Margin="0,10,0,0" x:Name="HintFabricAPI" IsWarn="True" />
|
||||
<local:MyHint Text="必须安装 OptiFabric 才能正常使用 OptiFine!" Margin="0,10,0,0" x:Name="HintOptiFabric" IsWarn="True" />
|
||||
<local:MyHint Text="安装结束后,请在 Mod 下载中搜索 OptiFabric Origins 并下载,否则 OptiFine 会无法使用!" Margin="0,10,0,0" x:Name="HintOptiFabricOld" IsWarn="False" />
|
||||
<local:MyHint Text="OptiFine 与一部分 Mod 的兼容性不佳,请谨慎安装。" Margin="0,10,0,0" x:Name="HintModOptiFine" IsWarn="False" />
|
||||
<local:MyHint Text="如果不安装 Fabric API,大多数 Mod 都会无法使用!" Margin="0,10,0,0" x:Name="HintFabricAPI" Theme="Red" />
|
||||
<local:MyHint Text="必须安装 OptiFabric 才能正常使用 OptiFine!" Margin="0,10,0,0" x:Name="HintOptiFabric" Theme="Red" />
|
||||
<local:MyHint Text="安装结束后,请在 Mod 下载中搜索 OptiFabric Origins 并下载,否则 OptiFine 会无法使用!" Margin="0,10,0,0" x:Name="HintOptiFabricOld" Theme="Yellow" />
|
||||
<local:MyHint Text="OptiFine 与一部分 Mod 的兼容性不佳,请谨慎安装。" Margin="0,10,0,0" x:Name="HintModOptiFine" Theme="Yellow" />
|
||||
<local:MyCard Title="Forge" Height="40" Margin="0,12,0,0" x:Name="CardForge" IsSwaped="True" CanSwap="True" SwapLogoRight="True">
|
||||
<StackPanel Margin="20,40,18,15" VerticalAlignment="Top" Name="PanForge" />
|
||||
<Grid x:Name="PanForgeInfo" Height="18" Margin="132,11,15,0" VerticalAlignment="Top" Tag="True">
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
SelectReload()
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoad Then Exit Sub
|
||||
If IsLoad Then Return
|
||||
IsLoad = True
|
||||
|
||||
McDownloadForgeRecommendedRefresh()
|
||||
@@ -38,7 +38,7 @@
|
||||
Public IsInSelectPage As Boolean = False
|
||||
Private IsFirstLoaded As Boolean = False
|
||||
Private Sub EnterSelectPage()
|
||||
If IsInSelectPage Then Exit Sub
|
||||
If IsInSelectPage Then Return
|
||||
IsInSelectPage = True
|
||||
|
||||
PanInner.Margin = New Thickness(25, 10, 25, 40)
|
||||
@@ -87,8 +87,8 @@
|
||||
DlOptiFabricLoader.Start()
|
||||
|
||||
AniStart({
|
||||
AaOpacity(PanMinecraft, -PanMinecraft.Opacity, 90, 10),
|
||||
AaTranslateX(PanMinecraft, -50 - CType(PanMinecraft.RenderTransform, TranslateTransform).X, 100, 10),
|
||||
AaOpacity(PanMinecraft, -PanMinecraft.Opacity, 70, 10),
|
||||
AaTranslateX(PanMinecraft, -50 - CType(PanMinecraft.RenderTransform, TranslateTransform).X, 90, 10),
|
||||
AaCode(
|
||||
Sub()
|
||||
PanBack.ScrollToHome()
|
||||
@@ -103,13 +103,13 @@
|
||||
SelectReload()
|
||||
PanMinecraft.Visibility = Visibility.Collapsed
|
||||
End Sub, After:=True),
|
||||
AaOpacity(PanSelect, 1 - PanSelect.Opacity, 90, 100),
|
||||
AaTranslateX(PanSelect, -CType(PanSelect.RenderTransform, TranslateTransform).X, 200, 100, Ease:=New AniEaseOutFluent(AniEasePower.ExtraStrong)),
|
||||
AaOpacity(PanSelect, 1 - PanSelect.Opacity, 70, 100),
|
||||
AaTranslateX(PanSelect, -CType(PanSelect.RenderTransform, TranslateTransform).X, 160, 100, Ease:=New AniEaseOutFluent(AniEasePower.ExtraStrong)),
|
||||
AaCode(
|
||||
Sub()
|
||||
PanBack.IsHitTestVisible = True
|
||||
'初始化 Binding
|
||||
If IsFirstLoaded Then Exit Sub
|
||||
If IsFirstLoaded Then Return
|
||||
IsFirstLoaded = True
|
||||
BtnOptiFineClearInner.SetBinding(Shapes.Path.FillProperty, New Binding("Foreground") With {.Source = CardOptiFine.MainTextBlock, .Mode = BindingMode.OneWay})
|
||||
BtnLiteLoaderClearInner.SetBinding(Shapes.Path.FillProperty, New Binding("Foreground") With {.Source = CardLiteLoader.MainTextBlock, .Mode = BindingMode.OneWay})
|
||||
@@ -122,7 +122,7 @@
|
||||
}, "FrmDownloadInstall SelectPageSwitch", True)
|
||||
End Sub
|
||||
Public Sub ExitSelectPage() Handles BtnBack.Click
|
||||
If Not IsInSelectPage Then Exit Sub
|
||||
If Not IsInSelectPage Then Return
|
||||
IsInSelectPage = False
|
||||
|
||||
PanInner.Margin = New Thickness(25, 10, 25, 25)
|
||||
@@ -137,11 +137,11 @@
|
||||
PanBack.ScrollToHome()
|
||||
|
||||
AniStart({
|
||||
AaOpacity(PanSelect, -PanSelect.Opacity, 90, 10),
|
||||
AaTranslateX(PanSelect, 50 - CType(PanSelect.RenderTransform, TranslateTransform).X, 100, 10),
|
||||
AaOpacity(PanSelect, -PanSelect.Opacity, 70, 10),
|
||||
AaTranslateX(PanSelect, 50 - CType(PanSelect.RenderTransform, TranslateTransform).X, 90, 10),
|
||||
AaCode(Sub() PanBack.ScrollToHome(), After:=True),
|
||||
AaOpacity(PanMinecraft, 1 - PanMinecraft.Opacity, 90, 100),
|
||||
AaTranslateX(PanMinecraft, -CType(PanMinecraft.RenderTransform, TranslateTransform).X, 200, 100, Ease:=New AniEaseOutFluent(AniEasePower.ExtraStrong)),
|
||||
AaOpacity(PanMinecraft, 1 - PanMinecraft.Opacity, 70, 100),
|
||||
AaTranslateX(PanMinecraft, -CType(PanMinecraft.RenderTransform, TranslateTransform).X, 160, 100, Ease:=New AniEaseOutFluent(AniEasePower.ExtraStrong)),
|
||||
AaCode(
|
||||
Sub()
|
||||
PanSelect.Visibility = Visibility.Collapsed
|
||||
@@ -168,19 +168,19 @@
|
||||
'OptiFine
|
||||
Private SelectedOptiFine As DlOptiFineListEntry = Nothing
|
||||
Private Sub SetOptiFineInfoShow(IsShow As String)
|
||||
If PanOptiFineInfo.Tag = IsShow Then Exit Sub
|
||||
If PanOptiFineInfo.Tag = IsShow Then Return
|
||||
PanOptiFineInfo.Tag = IsShow
|
||||
If IsShow = "True" Then
|
||||
'显示信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanOptiFineInfo, -CType(PanOptiFineInfo.RenderTransform, TranslateTransform).Y, 270, 100, Ease:=New AniEaseOutBack),
|
||||
AaOpacity(PanOptiFineInfo, 1 - PanOptiFineInfo.Opacity, 100, 90)
|
||||
AaTranslateY(PanOptiFineInfo, -CType(PanOptiFineInfo.RenderTransform, TranslateTransform).Y, 200, 100, Ease:=New AniEaseOutFluent),
|
||||
AaOpacity(PanOptiFineInfo, 1 - PanOptiFineInfo.Opacity, 80, 90)
|
||||
}, "SetOptiFineInfoShow")
|
||||
Else
|
||||
'隐藏信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanOptiFineInfo, 6 - CType(PanOptiFineInfo.RenderTransform, TranslateTransform).Y, 200),
|
||||
AaOpacity(PanOptiFineInfo, -PanOptiFineInfo.Opacity, 100)
|
||||
AaTranslateY(PanOptiFineInfo, 6 - CType(PanOptiFineInfo.RenderTransform, TranslateTransform).Y, 120),
|
||||
AaOpacity(PanOptiFineInfo, -PanOptiFineInfo.Opacity, 50)
|
||||
}, "SetOptiFineInfoShow")
|
||||
End If
|
||||
End Sub
|
||||
@@ -188,19 +188,19 @@
|
||||
'LiteLoader
|
||||
Private SelectedLiteLoader As DlLiteLoaderListEntry = Nothing
|
||||
Private Sub SetLiteLoaderInfoShow(IsShow As String)
|
||||
If PanLiteLoaderInfo.Tag = IsShow Then Exit Sub
|
||||
If PanLiteLoaderInfo.Tag = IsShow Then Return
|
||||
PanLiteLoaderInfo.Tag = IsShow
|
||||
If IsShow = "True" Then
|
||||
'显示信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanLiteLoaderInfo, -CType(PanLiteLoaderInfo.RenderTransform, TranslateTransform).Y, 270, 100, Ease:=New AniEaseOutBack),
|
||||
AaOpacity(PanLiteLoaderInfo, 1 - PanLiteLoaderInfo.Opacity, 100, 90)
|
||||
AaTranslateY(PanLiteLoaderInfo, -CType(PanLiteLoaderInfo.RenderTransform, TranslateTransform).Y, 200, 100, Ease:=New AniEaseOutFluent),
|
||||
AaOpacity(PanLiteLoaderInfo, 1 - PanLiteLoaderInfo.Opacity, 80, 90)
|
||||
}, "SetLiteLoaderInfoShow")
|
||||
Else
|
||||
'隐藏信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanLiteLoaderInfo, 6 - CType(PanLiteLoaderInfo.RenderTransform, TranslateTransform).Y, 200),
|
||||
AaOpacity(PanLiteLoaderInfo, -PanLiteLoaderInfo.Opacity, 100)
|
||||
AaTranslateY(PanLiteLoaderInfo, 6 - CType(PanLiteLoaderInfo.RenderTransform, TranslateTransform).Y, 120),
|
||||
AaOpacity(PanLiteLoaderInfo, -PanLiteLoaderInfo.Opacity, 50)
|
||||
}, "SetLiteLoaderInfoShow")
|
||||
End If
|
||||
End Sub
|
||||
@@ -208,19 +208,19 @@
|
||||
'Forge
|
||||
Private SelectedForge As DlForgeVersionEntry = Nothing
|
||||
Private Sub SetForgeInfoShow(IsShow As String)
|
||||
If PanForgeInfo.Tag = IsShow Then Exit Sub
|
||||
If PanForgeInfo.Tag = IsShow Then Return
|
||||
PanForgeInfo.Tag = IsShow
|
||||
If IsShow = "True" Then
|
||||
'显示信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanForgeInfo, -CType(PanForgeInfo.RenderTransform, TranslateTransform).Y, 270, 100, Ease:=New AniEaseOutBack),
|
||||
AaOpacity(PanForgeInfo, 1 - PanForgeInfo.Opacity, 100, 90)
|
||||
AaTranslateY(PanForgeInfo, -CType(PanForgeInfo.RenderTransform, TranslateTransform).Y, 200, 100, Ease:=New AniEaseOutFluent),
|
||||
AaOpacity(PanForgeInfo, 1 - PanForgeInfo.Opacity, 80, 90)
|
||||
}, "SetForgeInfoShow")
|
||||
Else
|
||||
'隐藏信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanForgeInfo, 6 - CType(PanForgeInfo.RenderTransform, TranslateTransform).Y, 200),
|
||||
AaOpacity(PanForgeInfo, -PanForgeInfo.Opacity, 100)
|
||||
AaTranslateY(PanForgeInfo, 6 - CType(PanForgeInfo.RenderTransform, TranslateTransform).Y, 120),
|
||||
AaOpacity(PanForgeInfo, -PanForgeInfo.Opacity, 50)
|
||||
}, "SetForgeInfoShow")
|
||||
End If
|
||||
End Sub
|
||||
@@ -228,19 +228,19 @@
|
||||
'NeoForge
|
||||
Private SelectedNeoForge As DlNeoForgeListEntry = Nothing
|
||||
Private Sub SetNeoForgeInfoShow(IsShow As String)
|
||||
If PanNeoForgeInfo.Tag = IsShow Then Exit Sub
|
||||
If PanNeoForgeInfo.Tag = IsShow Then Return
|
||||
PanNeoForgeInfo.Tag = IsShow
|
||||
If IsShow = "True" Then
|
||||
'显示信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanNeoForgeInfo, -CType(PanNeoForgeInfo.RenderTransform, TranslateTransform).Y, 270, 100, Ease:=New AniEaseOutBack),
|
||||
AaOpacity(PanNeoForgeInfo, 1 - PanNeoForgeInfo.Opacity, 100, 90)
|
||||
AaTranslateY(PanNeoForgeInfo, -CType(PanNeoForgeInfo.RenderTransform, TranslateTransform).Y, 200, 100, Ease:=New AniEaseOutFluent),
|
||||
AaOpacity(PanNeoForgeInfo, 1 - PanNeoForgeInfo.Opacity, 80, 90)
|
||||
}, "SetNeoForgeInfoShow")
|
||||
Else
|
||||
'隐藏信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanNeoForgeInfo, 6 - CType(PanNeoForgeInfo.RenderTransform, TranslateTransform).Y, 200),
|
||||
AaOpacity(PanNeoForgeInfo, -PanNeoForgeInfo.Opacity, 100)
|
||||
AaTranslateY(PanNeoForgeInfo, 6 - CType(PanNeoForgeInfo.RenderTransform, TranslateTransform).Y, 120),
|
||||
AaOpacity(PanNeoForgeInfo, -PanNeoForgeInfo.Opacity, 50)
|
||||
}, "SetNeoForgeInfoShow")
|
||||
End If
|
||||
End Sub
|
||||
@@ -248,19 +248,19 @@
|
||||
'Fabric
|
||||
Private SelectedFabric As String = Nothing
|
||||
Private Sub SetFabricInfoShow(IsShow As String)
|
||||
If PanFabricInfo.Tag = IsShow Then Exit Sub
|
||||
If PanFabricInfo.Tag = IsShow Then Return
|
||||
PanFabricInfo.Tag = IsShow
|
||||
If IsShow = "True" Then
|
||||
'显示信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanFabricInfo, -CType(PanFabricInfo.RenderTransform, TranslateTransform).Y, 270, 100, Ease:=New AniEaseOutBack),
|
||||
AaOpacity(PanFabricInfo, 1 - PanFabricInfo.Opacity, 100, 90)
|
||||
AaTranslateY(PanFabricInfo, -CType(PanFabricInfo.RenderTransform, TranslateTransform).Y, 200, 100, Ease:=New AniEaseOutFluent),
|
||||
AaOpacity(PanFabricInfo, 1 - PanFabricInfo.Opacity, 80, 90)
|
||||
}, "SetFabricInfoShow")
|
||||
Else
|
||||
'隐藏信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanFabricInfo, 6 - CType(PanFabricInfo.RenderTransform, TranslateTransform).Y, 200),
|
||||
AaOpacity(PanFabricInfo, -PanFabricInfo.Opacity, 100)
|
||||
AaTranslateY(PanFabricInfo, 6 - CType(PanFabricInfo.RenderTransform, TranslateTransform).Y, 120),
|
||||
AaOpacity(PanFabricInfo, -PanFabricInfo.Opacity, 50)
|
||||
}, "SetFabricInfoShow")
|
||||
End If
|
||||
End Sub
|
||||
@@ -268,19 +268,19 @@
|
||||
'FabricApi
|
||||
Private SelectedFabricApi As CompFile = Nothing
|
||||
Private Sub SetFabricApiInfoShow(IsShow As String)
|
||||
If PanFabricApiInfo.Tag = IsShow Then Exit Sub
|
||||
If PanFabricApiInfo.Tag = IsShow Then Return
|
||||
PanFabricApiInfo.Tag = IsShow
|
||||
If IsShow = "True" Then
|
||||
'显示信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanFabricApiInfo, -CType(PanFabricApiInfo.RenderTransform, TranslateTransform).Y, 270, 100, Ease:=New AniEaseOutBack),
|
||||
AaOpacity(PanFabricApiInfo, 1 - PanFabricApiInfo.Opacity, 100, 90)
|
||||
AaTranslateY(PanFabricApiInfo, -CType(PanFabricApiInfo.RenderTransform, TranslateTransform).Y, 200, 100, Ease:=New AniEaseOutFluent),
|
||||
AaOpacity(PanFabricApiInfo, 1 - PanFabricApiInfo.Opacity, 80, 90)
|
||||
}, "SetFabricApiInfoShow")
|
||||
Else
|
||||
'隐藏信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanFabricApiInfo, 6 - CType(PanFabricApiInfo.RenderTransform, TranslateTransform).Y, 200),
|
||||
AaOpacity(PanFabricApiInfo, -PanFabricApiInfo.Opacity, 100)
|
||||
AaTranslateY(PanFabricApiInfo, 6 - CType(PanFabricApiInfo.RenderTransform, TranslateTransform).Y, 120),
|
||||
AaOpacity(PanFabricApiInfo, -PanFabricApiInfo.Opacity, 50)
|
||||
}, "SetFabricApiInfoShow")
|
||||
End If
|
||||
End Sub
|
||||
@@ -288,19 +288,19 @@
|
||||
'OptiFabric
|
||||
Private SelectedOptiFabric As CompFile = Nothing
|
||||
Private Sub SetOptiFabricInfoShow(IsShow As String)
|
||||
If PanOptiFabricInfo.Tag = IsShow Then Exit Sub
|
||||
If PanOptiFabricInfo.Tag = IsShow Then Return
|
||||
PanOptiFabricInfo.Tag = IsShow
|
||||
If IsShow = "True" Then
|
||||
'显示信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanOptiFabricInfo, -CType(PanOptiFabricInfo.RenderTransform, TranslateTransform).Y, 270, 100, Ease:=New AniEaseOutBack),
|
||||
AaOpacity(PanOptiFabricInfo, 1 - PanOptiFabricInfo.Opacity, 100, 90)
|
||||
AaTranslateY(PanOptiFabricInfo, -CType(PanOptiFabricInfo.RenderTransform, TranslateTransform).Y, 200, 100, Ease:=New AniEaseOutFluent),
|
||||
AaOpacity(PanOptiFabricInfo, 1 - PanOptiFabricInfo.Opacity, 80, 90)
|
||||
}, "SetOptiFabricInfoShow")
|
||||
Else
|
||||
'隐藏信息栏
|
||||
AniStart({
|
||||
AaTranslateY(PanOptiFabricInfo, 6 - CType(PanOptiFabricInfo.RenderTransform, TranslateTransform).Y, 200),
|
||||
AaOpacity(PanOptiFabricInfo, -PanOptiFabricInfo.Opacity, 100)
|
||||
AaTranslateY(PanOptiFabricInfo, 6 - CType(PanOptiFabricInfo.RenderTransform, TranslateTransform).Y, 120),
|
||||
AaOpacity(PanOptiFabricInfo, -PanOptiFabricInfo.Opacity, 50)
|
||||
}, "SetOptiFabricInfoShow")
|
||||
End If
|
||||
End Sub
|
||||
@@ -310,7 +310,7 @@
|
||||
''' 重载已选择的项目的显示。
|
||||
''' </summary>
|
||||
Private Sub SelectReload() Handles CardOptiFine.Swap, LoadOptiFine.StateChanged, CardForge.Swap, LoadForge.StateChanged, CardNeoForge.Swap, LoadNeoForge.StateChanged, CardFabric.Swap, LoadFabric.StateChanged, CardFabricApi.Swap, LoadFabricApi.StateChanged, CardOptiFabric.Swap, LoadOptiFabric.StateChanged, CardLiteLoader.Swap, LoadLiteLoader.StateChanged
|
||||
If SelectedMinecraftId Is Nothing OrElse IsReloading Then Exit Sub
|
||||
If SelectedMinecraftId Is Nothing OrElse IsReloading Then Return
|
||||
IsReloading = True
|
||||
'主预览
|
||||
SelectNameUpdate()
|
||||
@@ -540,13 +540,13 @@
|
||||
Private IsSelectNameEdited As Boolean = False
|
||||
Private IsSelectNameChanging As Boolean = False
|
||||
Private Sub SelectNameUpdate()
|
||||
If IsSelectNameEdited OrElse IsSelectNameChanging Then Exit Sub
|
||||
If IsSelectNameEdited OrElse IsSelectNameChanging Then Return
|
||||
IsSelectNameChanging = True
|
||||
TextSelectName.Text = GetSelectName()
|
||||
IsSelectNameChanging = False
|
||||
End Sub
|
||||
Private Sub TextSelectName_TextChanged(sender As Object, e As TextChangedEventArgs) Handles TextSelectName.TextChanged
|
||||
If IsSelectNameChanging Then Exit Sub
|
||||
If IsSelectNameChanging Then Return
|
||||
IsSelectNameEdited = True
|
||||
SelectReload()
|
||||
End Sub
|
||||
@@ -717,7 +717,7 @@
|
||||
''' </summary>
|
||||
Private Sub OptiFine_Loaded() Handles LoadOptiFine.StateChanged
|
||||
Try
|
||||
If DlOptiFineListLoader.State <> LoadState.Finished Then Exit Sub
|
||||
If DlOptiFineListLoader.State <> LoadState.Finished Then Return
|
||||
|
||||
'获取版本列表
|
||||
Dim Versions As New List(Of DlOptiFineListEntry)
|
||||
@@ -725,7 +725,7 @@
|
||||
If SelectedForge IsNot Nothing AndAlso Not IsOptiFineSuitForForge(Version, SelectedForge) Then Continue For
|
||||
If Version.NameDisplay.StartsWith(SelectedMinecraftId & " ") Then Versions.Add(Version)
|
||||
Next
|
||||
If Not Versions.Any() Then Exit Sub
|
||||
If Not Versions.Any() Then Return
|
||||
'排序
|
||||
Versions = Versions.Sort(
|
||||
Function(Left As DlOptiFineListEntry, Right As DlOptiFineListEntry) As Boolean
|
||||
@@ -791,13 +791,13 @@
|
||||
''' </summary>
|
||||
Private Sub LiteLoader_Loaded() Handles LoadLiteLoader.StateChanged
|
||||
Try
|
||||
If DlLiteLoaderListLoader.State <> LoadState.Finished Then Exit Sub
|
||||
If DlLiteLoaderListLoader.State <> LoadState.Finished Then Return
|
||||
'获取版本列表
|
||||
Dim Versions As New List(Of DlLiteLoaderListEntry)
|
||||
For Each Version As DlLiteLoaderListEntry In DlLiteLoaderListLoader.Output.Value
|
||||
If Version.Inherit = SelectedMinecraftId Then Versions.Add(Version)
|
||||
Next
|
||||
If Not Versions.Any() Then Exit Sub
|
||||
If Not Versions.Any() Then Return
|
||||
'可视化
|
||||
PanLiteLoader.Children.Clear()
|
||||
For Each Version In Versions
|
||||
@@ -871,13 +871,13 @@
|
||||
''' </summary>
|
||||
Private Sub Forge_Loaded() Handles LoadForge.StateChanged
|
||||
Try
|
||||
If Not LoadForge.State.IsLoader Then Exit Sub
|
||||
If Not LoadForge.State.IsLoader Then Return
|
||||
Dim Loader As LoaderTask(Of String, List(Of DlForgeVersionEntry)) = LoadForge.State
|
||||
If SelectedMinecraftId <> Loader.Input Then Exit Sub
|
||||
If Loader.State <> LoadState.Finished Then Exit Sub
|
||||
If SelectedMinecraftId <> Loader.Input Then Return
|
||||
If Loader.State <> LoadState.Finished Then Return
|
||||
'获取要显示的版本
|
||||
Dim Versions = Loader.Output.ToList '复制数组,以免 Output 在实例化后变空
|
||||
If Not Loader.Output.Any() Then Exit Sub
|
||||
If Not Loader.Output.Any() Then Return
|
||||
PanForge.Children.Clear()
|
||||
Versions = Versions.Where(
|
||||
Function(v)
|
||||
@@ -942,9 +942,9 @@
|
||||
Private Sub NeoForge_Loaded() Handles LoadNeoForge.StateChanged
|
||||
Try
|
||||
'获取版本列表
|
||||
If DlNeoForgeListLoader.State <> LoadState.Finished Then Exit Sub
|
||||
If DlNeoForgeListLoader.State <> LoadState.Finished Then Return
|
||||
Dim Versions = DlNeoForgeListLoader.Output.Value.Where(Function(v) v.Inherit = SelectedMinecraftId).ToList
|
||||
If Not Versions.Any() Then Exit Sub
|
||||
If Not Versions.Any() Then Return
|
||||
'可视化
|
||||
PanNeoForge.Children.Clear()
|
||||
NeoForgeDownloadListItemPreload(PanNeoForge, Versions, AddressOf NeoForge_Selected, False)
|
||||
@@ -1001,10 +1001,10 @@
|
||||
''' </summary>
|
||||
Private Sub Fabric_Loaded() Handles LoadFabric.StateChanged
|
||||
Try
|
||||
If DlFabricListLoader.State <> LoadState.Finished Then Exit Sub
|
||||
If DlFabricListLoader.State <> LoadState.Finished Then Return
|
||||
'获取版本列表
|
||||
Dim Versions As JArray = DlFabricListLoader.Output.Value("loader")
|
||||
If Not Versions.Any() Then Exit Sub
|
||||
If Not Versions.Any() Then Return
|
||||
'可视化
|
||||
PanFabric.Children.Clear()
|
||||
PanFabric.Tag = Versions
|
||||
@@ -1106,8 +1106,8 @@
|
||||
''' </summary>
|
||||
Private Sub FabricApi_Loaded() Handles LoadFabricApi.StateChanged
|
||||
Try
|
||||
If DlFabricApiLoader.State <> LoadState.Finished Then Exit Sub
|
||||
If SelectedMinecraftId Is Nothing OrElse SelectedFabric Is Nothing Then Exit Sub
|
||||
If DlFabricApiLoader.State <> LoadState.Finished Then Return
|
||||
If SelectedMinecraftId Is Nothing OrElse SelectedFabric Is Nothing Then Return
|
||||
'获取版本列表
|
||||
Dim Versions As New List(Of CompFile)
|
||||
For Each Version In DlFabricApiLoader.Output
|
||||
@@ -1119,7 +1119,7 @@
|
||||
Versions.Add(Version)
|
||||
End If
|
||||
Next
|
||||
If Not Versions.Any() Then Exit Sub
|
||||
If Not Versions.Any() Then Return
|
||||
Versions = Versions.OrderByDescending(Function(v) v.ReleaseDate).ToList
|
||||
'可视化
|
||||
PanFabricApi.Children.Clear()
|
||||
@@ -1202,14 +1202,14 @@
|
||||
''' </summary>
|
||||
Private Sub OptiFabric_Loaded() Handles LoadOptiFabric.StateChanged
|
||||
Try
|
||||
If DlOptiFabricLoader.State <> LoadState.Finished Then Exit Sub
|
||||
If SelectedMinecraftId Is Nothing OrElse SelectedFabric Is Nothing OrElse SelectedOptiFine Is Nothing Then Exit Sub
|
||||
If DlOptiFabricLoader.State <> LoadState.Finished Then Return
|
||||
If SelectedMinecraftId Is Nothing OrElse SelectedFabric Is Nothing OrElse SelectedOptiFine Is Nothing Then Return
|
||||
'获取版本列表
|
||||
Dim Versions As New List(Of CompFile)
|
||||
For Each Version In DlOptiFabricLoader.Output
|
||||
If IsSuitableOptiFabric(Version, SelectedMinecraftId) Then Versions.Add(Version)
|
||||
Next
|
||||
If Not Versions.Any() Then Exit Sub
|
||||
If Not Versions.Any() Then Return
|
||||
'排序
|
||||
Versions = Versions.OrderByDescending(Function(v) v.ReleaseDate).ToList
|
||||
'可视化
|
||||
@@ -1257,7 +1257,7 @@
|
||||
If MyMsgBox("你尚未开启版本隔离,多个 MC 版本会共用同一个 Mod 文件夹。" & vbCrLf &
|
||||
"因此,游戏可能会因为读取到与当前版本不符的 Mod 而崩溃。" & vbCrLf &
|
||||
"推荐先在 设置 → 启动选项 → 默认版本隔离 中开启版本隔离!", "版本隔离提示", "取消下载", "继续") = 1 Then
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
End If
|
||||
'提交安装申请
|
||||
@@ -1275,7 +1275,7 @@
|
||||
.OptiFabric = SelectedOptiFabric,
|
||||
.LiteLoaderEntry = SelectedLiteLoader
|
||||
}
|
||||
If Not McInstall(Request) Then Exit Sub
|
||||
If Not McInstall(Request) Then Return
|
||||
'返回,这样在再次进入安装页面时这个版本就会显示文件夹已重复
|
||||
ExitSelectPage()
|
||||
End Sub
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
''' 切换现有页面。
|
||||
''' </summary>
|
||||
Public Sub PageChange(ID As FormMain.PageSubType)
|
||||
If PageID = ID Then Exit Sub
|
||||
If PageID = ID Then Return
|
||||
AniControlEnabled += 1
|
||||
Try
|
||||
PageChangeRun(PageGet(ID))
|
||||
@@ -187,13 +187,13 @@
|
||||
|
||||
'点击返回
|
||||
Private Sub ItemInstall_Click(sender As Object, e As MouseButtonEventArgs) Handles ItemInstall.Click
|
||||
If Not ItemInstall.Checked Then Exit Sub
|
||||
If Not ItemInstall.Checked Then Return
|
||||
FrmDownloadInstall.ExitSelectPage()
|
||||
End Sub
|
||||
|
||||
'展开手动安装
|
||||
Private Sub ItemHand_Click(sender As Object, e As RouteEventArgs) Handles ItemHand.Changed
|
||||
If ItemHand.Checked = False Then Exit Sub
|
||||
If ItemHand.Checked = False Then Return
|
||||
e.Handled = True
|
||||
AniControlEnabled += 1
|
||||
If Not Setup.Get("HintHandInstall") Then
|
||||
@@ -202,7 +202,7 @@
|
||||
"在自动安装页面先选择 MC 版本,然后就可以选择 OptiFine、Forge 等组件,让 PCL 自动进行安装了。", "自动安装提示", "返回自动安装", "继续下载手动安装包") = 1 Then
|
||||
FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.Download}, FormMain.PageSubType.DownloadInstall)
|
||||
AniControlEnabled -= 1
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
End If
|
||||
ItemHand.Visibility = Visibility.Collapsed
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
LabTitle.Text = "登录 Minecraft"
|
||||
LabCaption.Text =
|
||||
$"登录网页将自动开启,请在网页中输入 {UserCode}(已自动复制)。" & vbCrLf & vbCrLf &
|
||||
$"如果网络环境不佳,网页可能一直加载不出来,届时请使用 VPN 并重试。" & vbCrLf &
|
||||
$"如果网络环境不佳,网页可能一直加载不出来,届时请使用使用加速器或 VPN 以改善网络环境。" & vbCrLf &
|
||||
$"你也可以用其他设备打开 {Website} 并输入上述代码。"
|
||||
Btn1.EventData = Website
|
||||
Btn2.EventData = UserCode
|
||||
@@ -97,7 +97,7 @@
|
||||
|
||||
Private Sub WorkThread()
|
||||
Thread.Sleep(3000)
|
||||
If MyConverter.IsExited Then Exit Sub
|
||||
If MyConverter.IsExited Then Return
|
||||
OpenWebsite(Website)
|
||||
ClipboardSet(UserCode)
|
||||
Thread.Sleep((Data("interval").ToObject(Of Integer) - 1) * 1000)
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
If Not Loader.State = LoadState.Finished Then
|
||||
Hint("皮肤正在获取中,请稍候!", HintType.Critical)
|
||||
If Not Loader.State = LoadState.Loading Then Loader.Start()
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Try
|
||||
Dim FileAddress As String = SelectSaveFile("选取保存皮肤的位置", GetFileNameFromPath(Address), "皮肤图片文件(*.png)|*.png")
|
||||
@@ -87,7 +87,7 @@
|
||||
Catch ex As Exception '#2272
|
||||
Log(ex, $"皮肤文件已损坏:{Address}", LogLevel.Hint)
|
||||
File.Delete(Address)
|
||||
Exit Sub
|
||||
Return
|
||||
End Try
|
||||
ImgBack.Tag = Address
|
||||
'大小检查
|
||||
@@ -209,11 +209,11 @@
|
||||
'检查条件,获取新披风
|
||||
If IsChanging Then
|
||||
Hint("正在更改披风中,请稍候!")
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
If McLoginMsLoader.State = LoadState.Failed Then
|
||||
Hint("登录失败,无法更改披风!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Hint("正在获取披风列表,请稍候……")
|
||||
IsChanging = True
|
||||
@@ -226,7 +226,7 @@ Retry:
|
||||
If McLoginMsLoader.State <> LoadState.Finished Then McLoginMsLoader.WaitForExit(PageLoginMsSkin.GetLoginData())
|
||||
If McLoginMsLoader.State <> LoadState.Finished Then
|
||||
Hint("登录失败,无法更改披风!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Dim AccessToken As String = McLoginMsLoader.Output.AccessToken
|
||||
Dim Uuid As String = McLoginMsLoader.Output.Uuid
|
||||
@@ -243,7 +243,8 @@ Retry:
|
||||
{"Minecon2013", "Minecon 2013 参与者披风"}, {"Minecon2015", "Minecon 2015 参与者披风"}, {"Minecon2016", "Minecon 2016 参与者披风"},
|
||||
{"Cherry Blossom", "樱花披风"}, {"15th Anniversary", "15 周年纪念披风"}, {"Purple Heart", "紫色心形披风"},
|
||||
{"Follower's", "追随者披风"}, {"MCC 15th Year", "MCC 15 周年披风"}, {"Minecraft Experience", "村民救援披风"},
|
||||
{"Mojang Office", "Mojang 办公室披风"}, {"Home", "家园披风"}, {"Menace", "入侵披风"}, {"Yearn", "渴望披风"}, {"Common", "普通披风"}, {"Pan", "薄煎饼披风"}, {"Founder's", "创始人披风"}
|
||||
{"Mojang Office", "Mojang 办公室披风"}, {"Home", "家园披风"}, {"Menace", "入侵披风"}, {"Yearn", "渴望披风"},
|
||||
{"Common", "普通披风"}, {"Pan", "薄煎饼披风"}, {"Founder's", "创始人披风"}
|
||||
}
|
||||
Dim SelectionControl As New List(Of IMyRadio) From {New MyRadioBox With {.Text = "无披风"}}
|
||||
For Each Cape In SkinData("capes")
|
||||
@@ -256,7 +257,7 @@ Retry:
|
||||
Log(ex, "获取玩家皮肤列表失败", LogLevel.Feedback)
|
||||
End Try
|
||||
End Sub)
|
||||
If SelId Is Nothing Then Exit Sub
|
||||
If SelId Is Nothing Then Return
|
||||
'发送请求
|
||||
Dim Result As String = NetRequestRetry("https://api.minecraftservices.com/minecraft/profile/capes/active",
|
||||
If(SelId = 0, "DELETE", "PUT"),
|
||||
@@ -264,7 +265,7 @@ Retry:
|
||||
"application/json", Headers:=New Dictionary(Of String, String) From {{"Authorization", "Bearer " & AccessToken}})
|
||||
If Result.Contains("""errorMessage""") Then
|
||||
Hint("更改披风失败:" & GetJson(Result)("errorMessage"), HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Else
|
||||
Hint("更改披风成功!", HintType.Finish)
|
||||
End If
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
AprilPosTrans.X = 0
|
||||
AprilPosTrans.Y = 0
|
||||
|
||||
If IsLoad Then Exit Sub
|
||||
If IsLoad Then Return
|
||||
IsLoad = True
|
||||
AniControlEnabled += 1
|
||||
|
||||
@@ -353,7 +353,7 @@ UnknownType:
|
||||
GoTo UnknownType
|
||||
End Select
|
||||
'刷新页面
|
||||
If PageCurrent = Type Then Exit Sub
|
||||
If PageCurrent = Type Then Return
|
||||
PageChange(Type, Anim).Reload(KeepInput)
|
||||
Dim Control As MyRadioButton = FindName("RadioLoginType" & Setup.Get("LoginType"))
|
||||
If Control IsNot Nothing Then Control.Checked = True
|
||||
@@ -393,7 +393,7 @@ UnknownType:
|
||||
Catch ex As Exception
|
||||
If ex.GetType.Name = "ThreadInterruptedException" Then
|
||||
Data.Output = ""
|
||||
Exit Sub
|
||||
Return
|
||||
ElseIf GetExceptionSummary(ex).Contains("429") Then
|
||||
Data.Output = PathImage & "Skins/" & McSkinSex(McLoginLegacyUuid(UserName)) & ".png"
|
||||
Log("[Minecraft] 获取正版皮肤失败(" & UserName & "):获取皮肤太过频繁,请 5 分钟后再试!", LogLevel.Hint)
|
||||
@@ -463,7 +463,7 @@ UseDefault:
|
||||
Catch ex As Exception
|
||||
If ex.GetType.Name = "ThreadInterruptedException" Then
|
||||
Data.Output = ""
|
||||
Exit Sub
|
||||
Return
|
||||
ElseIf GetExceptionSummary(ex).Contains("429") Then
|
||||
Data.Output = PathImage & "Skins/" & McSkinSex(McLoginLegacyUuid(ID)) & ".png"
|
||||
Log("获取离线登录使用的正版皮肤失败(" & ID & "):获取皮肤太过频繁,请 5 分钟后再试!")
|
||||
@@ -515,7 +515,7 @@ UseDefault:
|
||||
Catch ex As Exception
|
||||
If ex.GetType.Name = "ThreadInterruptedException" Then
|
||||
Data.Output = ""
|
||||
Exit Sub
|
||||
Return
|
||||
ElseIf GetExceptionSummary(ex).Contains("429") Then
|
||||
Data.Output = PathImage & "Skins/Steve.png"
|
||||
Log("[Minecraft] 获取统一通行证皮肤失败(" & UserName & "):获取皮肤太过频繁,请 5 分钟后再试!", LogLevel.Hint)
|
||||
@@ -563,7 +563,7 @@ Finish:
|
||||
Catch ex As Exception
|
||||
If ex.GetType.Name = "ThreadInterruptedException" Then
|
||||
Data.Output = ""
|
||||
Exit Sub
|
||||
Return
|
||||
ElseIf GetExceptionSummary(ex).Contains("429") Then
|
||||
Data.Output = PathImage & "Skins/Steve.png"
|
||||
Log("[Minecraft] 获取 Authlib-Injector 皮肤失败(" & UserName & "):获取皮肤太过频繁,请 5 分钟后再试!", LogLevel.Hint)
|
||||
@@ -592,13 +592,13 @@ Finish:
|
||||
|
||||
'版本选择按钮
|
||||
Private Sub BtnVersion_Click(sender As Object, e As EventArgs) Handles BtnVersion.Click
|
||||
If McLaunchLoader.State = LoadState.Loading Then Exit Sub
|
||||
If McLaunchLoader.State = LoadState.Loading Then Return
|
||||
FrmMain.PageChange(FormMain.PageType.VersionSelect)
|
||||
End Sub
|
||||
'启动按钮
|
||||
Public Sub LaunchButtonClick() Handles BtnLaunch.Click
|
||||
If McLaunchLoader.State = LoadState.Loading OrElse Not BtnLaunch.IsEnabled OrElse
|
||||
(FrmMain.PageRight IsNot Nothing AndAlso FrmMain.PageRight.PageState <> MyPageRight.PageStates.ContentStay AndAlso FrmMain.PageRight.PageState <> MyPageRight.PageStates.ContentEnter) Then Exit Sub
|
||||
(FrmMain.PageRight IsNot Nothing AndAlso FrmMain.PageRight.PageState <> MyPageRight.PageStates.ContentStay AndAlso FrmMain.PageRight.PageState <> MyPageRight.PageStates.ContentEnter) Then Return
|
||||
'愚人节处理
|
||||
If IsAprilEnabled AndAlso Not IsAprilGiveup Then
|
||||
ThemeUnlock(12, False, "隐藏主题 滑稽彩 已解锁!")
|
||||
@@ -619,7 +619,7 @@ Finish:
|
||||
Private BtnLaunchState As Integer = 0
|
||||
Private BtnLaunchVersion As McVersion = Nothing
|
||||
Public Sub RefreshButtonsUI() Handles BtnLaunch.Loaded
|
||||
If Not BtnLaunch.IsLoaded Then Exit Sub
|
||||
If Not BtnLaunch.IsLoaded Then Return
|
||||
'获取当前状态
|
||||
Dim CurrentState As Integer
|
||||
If (Not IsLoadFinished) OrElse McVersionListLoader.State = LoadState.Loading OrElse McFolderListLoader.State = LoadState.Loading Then
|
||||
@@ -695,7 +695,7 @@ ExitRefresh:
|
||||
End Sub
|
||||
'版本设置按钮
|
||||
Private Sub BtnMore_Click(sender As Object, e As EventArgs) Handles BtnMore.Click
|
||||
If McLaunchLoader.State = LoadState.Loading Then Exit Sub
|
||||
If McLaunchLoader.State = LoadState.Loading Then Return
|
||||
McVersionCurrent.Load()
|
||||
PageVersionLeft.Version = McVersionCurrent
|
||||
FrmMain.PageChange(FormMain.PageType.VersionSetup, 0)
|
||||
@@ -705,7 +705,7 @@ ExitRefresh:
|
||||
''' </summary>
|
||||
Public Sub LaunchingRefresh()
|
||||
Try
|
||||
If McLaunchLoaderReal.State = LoadState.Aborted Then Exit Sub
|
||||
If McLaunchLoaderReal.State = LoadState.Aborted Then Return
|
||||
'阶段状态获取
|
||||
Dim IsLaunched As Boolean = False '是否已经启动游戏,只是在等待窗口
|
||||
Try
|
||||
@@ -719,7 +719,7 @@ ExitRefresh:
|
||||
LabLaunchingStage.Text = "已完成"
|
||||
Catch ex As Exception
|
||||
Log(ex, "获取是否启动完成失败,可能是由于启动状态改变导致集合已修改")
|
||||
Exit Sub
|
||||
Return
|
||||
End Try
|
||||
If AniIsRun("Launch State Page") Then IsLaunched = False '等待页面切换动画完成
|
||||
'计算应显示的进度
|
||||
@@ -789,7 +789,7 @@ ExitRefresh:
|
||||
Private ActualUsedWidth As Double
|
||||
Private Sub PanLaunchingInfo_SizeChangedW(sender As Object, e As SizeChangedEventArgs) Handles PanLaunchingInfo.SizeChanged
|
||||
Dim DeltaWidth As Double = e.NewSize.Width - e.PreviousSize.Width
|
||||
If e.PreviousSize.Width = 0 OrElse IsWidthAnimating OrElse Math.Abs(DeltaWidth) < 1 OrElse PanLaunchingInfo.ActualWidth = 0 Then Exit Sub
|
||||
If e.PreviousSize.Width = 0 OrElse IsWidthAnimating OrElse Math.Abs(DeltaWidth) < 1 OrElse PanLaunchingInfo.ActualWidth = 0 Then Return
|
||||
AniStart({
|
||||
AaWidth(PanLaunchingInfo, DeltaWidth, 180,, New AniEaseOutFluent),
|
||||
AaCode(Sub()
|
||||
@@ -805,7 +805,7 @@ ExitRefresh:
|
||||
Private ActualUsedHeight As Double
|
||||
Private Sub PanLaunchingInfo_SizeChangedH(sender As Object, e As SizeChangedEventArgs) Handles PanLaunchingInfo.SizeChanged
|
||||
Dim DeltaHeight As Double = e.NewSize.Height - e.PreviousSize.Height
|
||||
If e.PreviousSize.Height = 0 OrElse IsHeightAnimating OrElse Math.Abs(DeltaHeight) < 1 OrElse PanLaunchingInfo.ActualHeight = 0 Then Exit Sub
|
||||
If e.PreviousSize.Height = 0 OrElse IsHeightAnimating OrElse Math.Abs(DeltaHeight) < 1 OrElse PanLaunchingInfo.ActualHeight = 0 Then Return
|
||||
AniStart({
|
||||
AaHeight(PanLaunchingInfo, DeltaHeight, 180,, New AniEaseOutFluent),
|
||||
AaCode(Sub()
|
||||
|
||||
@@ -65,7 +65,7 @@ Download:
|
||||
RunInUiWait(Sub() LoadContent("")) '在加载结束前清空页面
|
||||
Setup.Set("CacheSavedPageVersion", "")
|
||||
OnlineLoader.Start(Url) '下载完成后将会再次触发更新
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Case 3
|
||||
Select Case Setup.Get("UiCustomPreset")
|
||||
@@ -146,7 +146,7 @@ Download:
|
||||
VersionAddress = Address.BeforeFirst("?")
|
||||
If Not VersionAddress.EndsWith("/") Then VersionAddress += "/"
|
||||
VersionAddress += "version"
|
||||
If Address.Contains("?") Then VersionAddress += Address.AfterLast("?")
|
||||
If Address.Contains("?") Then VersionAddress += "?" & Address.AfterFirst("?")
|
||||
End If
|
||||
'校验版本
|
||||
Dim Version As String = ""
|
||||
@@ -174,7 +174,7 @@ Download:
|
||||
WriteFile(PathTemp & "Cache\Custom.xaml", FileContent)
|
||||
End If
|
||||
'要求刷新
|
||||
Refresh()
|
||||
RunInUi(AddressOf Refresh) '不直接调用 Refresh,以防止死循环(#6245)
|
||||
Catch ex As Exception
|
||||
Log(ex, $"下载主页失败({Address})", If(ModeDebug, LogLevel.Msgbox, LogLevel.Hint))
|
||||
End Try
|
||||
@@ -215,7 +215,7 @@ Download:
|
||||
SyncLock LoadContentLock
|
||||
'如果加载目标内容一致则不加载
|
||||
Dim Hash = Content.GetHashCode()
|
||||
If Hash = LoadedContentHash Then Exit Sub
|
||||
If Hash = LoadedContentHash Then Return
|
||||
LoadedContentHash = Hash
|
||||
'实际加载内容
|
||||
PanCustom.Children.Clear()
|
||||
@@ -223,6 +223,7 @@ Download:
|
||||
Log($"[Page] 实例化:清空主页 UI,来源为空")
|
||||
Return
|
||||
End If
|
||||
Dim LoadStartTime As Date = Date.Now
|
||||
Try
|
||||
'修改时应同时修改 PageOtherHelpDetail.Init
|
||||
Content = HelpArgumentReplace(Content)
|
||||
@@ -240,8 +241,11 @@ Download:
|
||||
Else
|
||||
Log(ex, "加载主页界面失败", LogLevel.Hint)
|
||||
End If
|
||||
Return
|
||||
End Try
|
||||
Log($"[Page] 实例化:加载主页 UI 完成")
|
||||
Dim LoadCostTime = (Date.Now - LoadStartTime).Milliseconds
|
||||
Log($"[Page] 实例化:加载主页 UI 完成,耗时 {LoadCostTime}ms")
|
||||
If LoadCostTime > 3000 Then Hint($"主页加载过于缓慢(花费了 {Math.Round(LoadCostTime / 1000, 1)} 秒),请向主页作者反馈此问题,或暂时停止使用该主页")
|
||||
End SyncLock
|
||||
Return
|
||||
Refresh:
|
||||
|
||||
@@ -49,11 +49,10 @@
|
||||
Log("[Launch] 要求更换角色,但登录加载器繁忙", LogLevel.Debug)
|
||||
If CType(McLoginLoader.Input, McLoginServer).ForceReselectProfile Then
|
||||
Hint("正在尝试更换,请稍候!")
|
||||
Exit Sub
|
||||
Else
|
||||
Hint("正在登录中,请稍后再更换角色!", HintType.Critical)
|
||||
Exit Sub
|
||||
End If
|
||||
Return
|
||||
End If
|
||||
Hint("正在尝试更换,请稍候!")
|
||||
Setup.Set("CacheAuthUuid", "") '清空选择缓存
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
xmlns:local="clr-namespace:PCL"
|
||||
mc:Ignorable="d" d:DesignWidth="297.6">
|
||||
<StackPanel Margin="0,0,0,5">
|
||||
<local:MyHint x:Name="HintChinese" Text="玩家名如果包含英文、数字、下划线以外的内容,可能会无法进入 Minecraft 1.18 以后的世界!" Margin="0,0,0,15" Visibility="Collapsed" />
|
||||
<local:MyHint x:Name="HintChinese" Theme="Red" Text="玩家名如果包含英文、数字、下划线以外的内容,可能会无法进入 Minecraft 1.18 以后的世界!" Margin="0,0,0,15" Visibility="Collapsed" />
|
||||
<local:MySkin HorizontalAlignment="Center" x:Name="Skin" HasCape="False" Margin="0,0,0,15" />
|
||||
<local:MyComboBox IsEditable="True" x:Name="ComboName" Height="28" IsTextSearchEnabled="False" HintText="游戏用户名" />
|
||||
</StackPanel>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
ComboAccounts.SelectedIndex = If(KeepInput, Math.Max(0, IndexBefore), 0)
|
||||
End Sub
|
||||
Private Sub ComboAccounts_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboAccounts.SelectionChanged
|
||||
If AniControlEnabled <> 0 OrElse ComboAccounts.SelectedItem Is Nothing OrElse ComboAccounts.ContentPresenter Is Nothing Then Exit Sub
|
||||
If AniControlEnabled <> 0 OrElse ComboAccounts.SelectedItem Is Nothing OrElse ComboAccounts.ContentPresenter Is Nothing Then Return
|
||||
If TypeOf ComboAccounts.SelectedItem Is MyListItem Then
|
||||
ComboAccounts.ContentPresenter.Content = CType(ComboAccounts.SelectedItem, MyListItem).Title
|
||||
ElseIf TypeOf ComboAccounts.SelectedItem Is MyComboBoxItem Then
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
AniStart(AaOpacity(PanButtons, 1 - PanButtons.Opacity, 120), "PageLoginMsSkin Button")
|
||||
End Sub
|
||||
Public Sub HidePanel() Handles PanData.MouseLeave
|
||||
If BtnEdit.ContextMenu.IsOpen OrElse BtnSkin.ContextMenu.IsOpen OrElse PanData.IsMouseOver Then Exit Sub
|
||||
If BtnEdit.ContextMenu.IsOpen OrElse BtnSkin.ContextMenu.IsOpen OrElse PanData.IsMouseOver Then Return
|
||||
AniStart(AaOpacity(PanButtons, -PanButtons.Opacity, 120), "PageLoginMsSkin Button")
|
||||
End Sub
|
||||
|
||||
@@ -74,14 +74,14 @@
|
||||
'检查条件,获取新皮肤
|
||||
If IsChanging Then
|
||||
Hint("正在更改皮肤中,请稍候!")
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
If McLoginLoader.State = LoadState.Failed Then
|
||||
Hint("登录失败,无法更改皮肤!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Dim SkinInfo As McSkinInfo = McSkinSelect()
|
||||
If Not SkinInfo.IsVaild Then Exit Sub
|
||||
If Not SkinInfo.IsVaild Then Return
|
||||
Hint("正在更改皮肤……")
|
||||
IsChanging = True
|
||||
'开始实际获取
|
||||
@@ -108,7 +108,7 @@ Retry:
|
||||
GoTo Retry
|
||||
ElseIf Result.Contains("""error""") Then
|
||||
Hint("更改皮肤失败:" & GetJson(Result)("error"), HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'获取新皮肤地址
|
||||
Log("[Skin] 皮肤修改返回值:" & vbCrLf & Result)
|
||||
@@ -117,7 +117,7 @@ Retry:
|
||||
For Each Skin As JObject In ResultJson("skins")
|
||||
If Skin("state").ToString = "ACTIVE" Then
|
||||
MySkin.ReloadCache(Skin("url"))
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Next
|
||||
Throw New Exception("未知错误(" & Result & ")")
|
||||
|
||||
@@ -103,7 +103,6 @@
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="1*" />
|
||||
</Grid.RowDefinitions>
|
||||
<!--<local:MyHint IsWarn="True" Text="这是错误文本。" x:Name="HintTypeError" Visibility="Collapsed" Grid.ColumnSpan="5" Grid.RowSpan="5" Margin="15,15,15,0" VerticalAlignment="Top" />-->
|
||||
<local:MyCard x:Name="BtnSelectCreate" Grid.Column="1" Grid.Row="1">
|
||||
<Grid Margin="35,0,25,0" IsHitTestVisible="False">
|
||||
<Grid.RowDefinitions>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
Private IsLoad As Boolean = False
|
||||
Private Sub OnLoaded() Handles Me.Loaded
|
||||
FormMain.EndProgramForce(ProcessReturnValues.Aborted)
|
||||
If IsLoad Then Exit Sub
|
||||
If IsLoad Then Return
|
||||
IsLoad = True
|
||||
'启动监视线程
|
||||
If Not IsWatcherStarted Then RunInNewThread(AddressOf WatcherThread, "Hiper Watcher")
|
||||
@@ -149,7 +149,7 @@
|
||||
|
||||
'每 1 秒执行的 Timer
|
||||
Private Sub WatcherTimer1()
|
||||
If HiperState <> LoadState.Finished Then Exit Sub
|
||||
If HiperState <> LoadState.Finished Then Return
|
||||
RunInUi(Sub()
|
||||
'索引码剩余时间
|
||||
Dim Span As TimeSpan = HiperCertTime - Date.Now
|
||||
@@ -178,7 +178,7 @@
|
||||
HiperExit(True)
|
||||
ShowWindowToTop(Handle)
|
||||
Beep()
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'网络质量
|
||||
Dim QualityScore As Integer = If(IpIsInChina, 0, -2)
|
||||
@@ -272,7 +272,7 @@
|
||||
Log("[Hiper] 连接步骤:" & Intro)
|
||||
LoadStep = [Step]
|
||||
RunInUiWait(Sub()
|
||||
If FrmLinkHiper Is Nothing OrElse Not FrmLinkHiper.LabLoadDesc.IsLoaded Then Exit Sub
|
||||
If FrmLinkHiper Is Nothing OrElse Not FrmLinkHiper.LabLoadDesc.IsLoaded Then Return
|
||||
FrmLinkHiper.LabLoadDesc.Text = Intro
|
||||
FrmLinkHiper.UpdateProgress()
|
||||
End Sub)
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
'承接重试
|
||||
Private Sub CardLoad_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles CardLoad.MouseLeftButtonUp
|
||||
If Not InitLoader.State = LoadState.Failed Then Exit Sub
|
||||
If Not InitLoader.State = LoadState.Failed Then Return
|
||||
InitLoader.Start(IsForceRestart:=True)
|
||||
End Sub
|
||||
|
||||
@@ -299,7 +299,7 @@
|
||||
Private Sub UpdateProgress(Optional Value As Double = -1)
|
||||
If Value = -1 Then Value = InitLoader.Progress
|
||||
Dim DisplayingProgress As Double = ColumnProgressA.Width.Value
|
||||
If Math.Round(Value - DisplayingProgress, 3) = 0 Then Exit Sub
|
||||
If Math.Round(Value - DisplayingProgress, 3) = 0 Then Return
|
||||
If DisplayingProgress > Value Then
|
||||
ColumnProgressA.Width = New GridLength(Value, GridUnitType.Star)
|
||||
ColumnProgressB.Width = New GridLength(1 - Value, GridUnitType.Star)
|
||||
@@ -327,7 +327,7 @@
|
||||
|
||||
'退出
|
||||
Private Sub BtnFinishExit_Click(sender As Object, e As EventArgs) Handles BtnFinishExit.Click
|
||||
If IsServerSide AndAlso MyMsgBox("你确定要关闭联机房间吗?", "确认退出", "确定", "取消", IsWarn:=True) = 2 Then Exit Sub
|
||||
If IsServerSide AndAlso MyMsgBox("你确定要关闭联机房间吗?", "确认退出", "确定", "取消", IsWarn:=True) = 2 Then Return
|
||||
HiperExit(False)
|
||||
End Sub
|
||||
|
||||
@@ -338,7 +338,7 @@
|
||||
'Ping 房主
|
||||
Private Sub BtnFinishPing_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) Handles BtnFinishPing.MouseLeftButtonUp
|
||||
LabFinishPing.Text = "检测中"
|
||||
If TaskPingHost.State = LoadState.Loading Then Exit Sub
|
||||
If TaskPingHost.State = LoadState.Loading Then Return
|
||||
TaskPingHost.Start(True, IsForceRestart:=True)
|
||||
End Sub
|
||||
Private Shared TaskPingHost As New LoaderTask(Of Boolean, Integer)("HiPer Ping Host",
|
||||
@@ -362,7 +362,7 @@
|
||||
Return _CurrentSubpage
|
||||
End Get
|
||||
Set(value As Subpages)
|
||||
If _CurrentSubpage = value Then Exit Property
|
||||
If _CurrentSubpage = value Then Return
|
||||
_CurrentSubpage = value
|
||||
Log("[Hiper] 子页面更改为 " & GetStringFromEnum(value))
|
||||
PageOnContentExit()
|
||||
@@ -384,7 +384,7 @@
|
||||
If InitLoader.State = LoadState.Loading Then InitLoader.Abort()
|
||||
If InitLoader.State = LoadState.Failed Then InitLoader.State = LoadState.Waiting
|
||||
RunInUi(Sub()
|
||||
If FrmLinkHiper Is Nothing OrElse Not FrmLinkHiper.IsLoaded Then Exit Sub
|
||||
If FrmLinkHiper Is Nothing OrElse Not FrmLinkHiper.IsLoaded Then Return
|
||||
FrmLinkHiper.CurrentSubpage = If(ExitToCertPage, Subpages.PanCert, Subpages.PanSelect)
|
||||
FrmLinkHiper.PageOnContentExit()
|
||||
End Sub)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<StackPanel Orientation="Vertical" Margin="25,10">
|
||||
<local:MyCard Margin="0,15,0,0" x:Name="CardUser" Title="已连接的玩家 (0)">
|
||||
<StackPanel Margin="20,37,20,15">
|
||||
<local:MyHint Margin="5,2,5,8" x:Name="LabHint" IsWarn="False" />
|
||||
<local:MyHint Margin="5,2,5,8" x:Name="LabHint" />
|
||||
<StackPanel x:Name="PanUserList" />
|
||||
<Grid Height="35" Margin="5,8,5,5">
|
||||
<Grid.ColumnDefinitions>
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
Private IsLoad As Boolean = False
|
||||
Private IsPageSwitched As Boolean = False '如果在 Loaded 前切换到其他页面,会导致触发 Loaded 时再次切换一次
|
||||
Private Sub PageLinkLeft_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
|
||||
If IsLoad Then Exit Sub
|
||||
If IsLoad Then Return
|
||||
IsLoad = True
|
||||
'切换默认页面
|
||||
If IsPageSwitched Then Exit Sub
|
||||
If IsPageSwitched Then Return
|
||||
ItemHiper.SetChecked(True, False, False)
|
||||
End Sub
|
||||
Private Sub PageOtherLeft_Unloaded(sender As Object, e As RoutedEventArgs) Handles Me.Unloaded
|
||||
@@ -56,7 +56,7 @@
|
||||
''' 切换现有页面。
|
||||
''' </summary>
|
||||
Public Sub PageChange(ID As FormMain.PageSubType)
|
||||
If PageID = ID Then Exit Sub
|
||||
If PageID = ID Then Return
|
||||
AniControlEnabled += 1
|
||||
IsPageSwitched = True
|
||||
Try
|
||||
|
||||
@@ -104,197 +104,295 @@
|
||||
</local:MyCard>
|
||||
<local:MyCard Margin="0,0,0,15" Title="赞助者">
|
||||
<StackPanel Margin="25,40,10,20">
|
||||
<TextBlock HorizontalAlignment="Left" Text="以下是 2025 年 3 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
|
||||
<WrapPanel Margin="0,0,0,10">␍ <TextBlock Width="120" Margin="0,1.5" Text="micheal276" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="吃面不加葱" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="想去看那倒悬山" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="隳之狐" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="QY熹微" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="LZL" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="老卡费" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="散." />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="续笙_xusheng" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="HappyGhast0123" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Tong" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="15158206433" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="一抹蓝色和粉色" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="UcFB" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="哦" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="T2222" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Toudesu" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="苏利" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="DW." />
|
||||
<TextBlock HorizontalAlignment="Left" Text="以下是 2025 年 4 月的高级赞助者们!感谢各位对 PCL 和伟大的咕咕咕事业的支持!" Margin="0,0,25,5.5" TextTrimming="None" TextWrapping="WrapWithOverflow" />
|
||||
<WrapPanel Margin="0,0,0,10">␍ <TextBlock Width="120" Margin="0,1.5" Text="秦屎皇" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Hyacinth" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="hjk" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="JiechuAik" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="ls" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Alleyne" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="泠羽洛" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="user0527" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="zxgcugdyb" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Night_Fall" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="冷酷们" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="迅卩" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="WTFdog" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="NID" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="LexSar" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="巡洋舰7179" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="不允许使用的昵称" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="DLINX" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="仄仄仄" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="abc" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="胖虎贼懒" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="次月" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="芝士绒散" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="桂月兔子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="TT" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Wah" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="卅载风雪满故园" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="左手肘击,右手元神" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="幸运星" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="SphereBall" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="doubi_sir" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Tencelll" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="bigby" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Musire" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="YouMi" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="冉棠" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="白噪音" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="恶俗狗" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="空濛是只大笨狐狸" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="KSGDBCA" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="ALYESY" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="火花狐" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="LovePGKD" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Ls00w" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小洋和小昊" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="五月" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="绝沓" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="辻渃" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="又想玉玉了QWQ" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="雨沫云汐" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="回青观落日" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="猫七七" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="泉东居士" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="猫猫念余年" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="yoseya" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="雨" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="MRCA_MLU" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="不要太狗血" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="zhaoesaf" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="月球领航员" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="IsolatedLam" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="1818" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="ghjklbnm144" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Good night" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="盖着被子就跑" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="shabbyunicorn3" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="LEMON TEA" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="冰激凌天尊" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="向东114514" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Wangderful555" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="JDS123" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Nalyne" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="uglyduckling" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小孩" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="长宁QAQ" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="WYXiLYH" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="蔡徐坤" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="风清_GuDER" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="nananatuki" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="绯星" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="非牛非马先生小姐" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="......" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="MaTTer" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="grizzly" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="樱井落花" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="那个谁" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Hiang224855" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Mingze Du" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="yuuio" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Flowing_Shadow" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="buluo" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Gannet09" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="惠子呀惠子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="PMapleLP" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="p_p" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="冉皓Kamiya" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="陈陈陈陈最" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="纳兰叶秋" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="++0" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Duskbean" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="mc_宣羽" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="八两大西瓜" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Madam企鹅" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="PMm" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="无敌钢筋大玉" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="诸葛千绝" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="风华一指流砂" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小阿君" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="桃乐志" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="把你switch借我玩玩" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="林宇" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="星辰星空" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="幽寂" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="BasaltSlrtean" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="智子10086号" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="op" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="seasonlog" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="guxuyuming" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Marshmallow" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="孤单" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="甘李子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="xaslat-渊" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Sweecol" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="木瓜牛奶布丁" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="午夜里的猫爱睡觉" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="超级番薯Pro" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="宝盖木" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="守着那个它" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="橙子dc" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="FY_dusty" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Mr." />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="星辰" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="ko8888ko" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Rutriste" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="坐轮椅的猫师傅" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="洛圣都劲夫" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="hyh" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="无刃幻越" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="JRgril" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="西宫硝子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Loneliness" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="青青草" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="童璃" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="北极光" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="玲妹儿" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="SuLiHuaSong" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="多米" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="PigTheCreeper" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Finext652" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="秋禾_Hikari" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="steven" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="akergo" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="锦菌" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="阿銓" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="茉莉花茶少糖" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="凯" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="广寒宫中金蟾炖兔子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="BUBU" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="yzt" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Eyedazzler" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="空白" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="薛十一" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="胡克霍霍" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="S1767" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="沐雪于梦" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="门一多" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="dy2022" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="幽谷响" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="我的世界" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Bobsteve" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="EthanCAi" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="老鼠大" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="公孙月" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="nayo" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="白夜与黑昼" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="J-10" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="jade_lin" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="马不露肉" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="PANDA" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="子夜" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="墨霜二十一" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="August" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="CarrotMan_CD" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="yuguya" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="瞳鱼" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小妤情绪零碎" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="777" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="林海珠" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Mikey" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="君莫笑" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="梦璃素弦" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="一只果粒" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="我裂开啊" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="半个景煦子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="售票员发通报??" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="蓝莓呢" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Golfl." />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="彧隳" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="吃灰的浅影" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="222" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="雅书" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="成长中的羽翼" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="伊仔今天也很非" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="DARTS_STUDIOS." />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="。" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="redblock" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="白上林" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="炒面炒面林" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text=": D" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="聆世音" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="量籽嘉素" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Watanuki" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="HUGO37211" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="忍小建" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="朝夕" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="lazier" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="忧化中" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="子八年" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="A decadent person" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Rrzttc" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="FancyBitz" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="chihaya anon" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Mc__XiaoYao" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="诺伊" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小生饭盒" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="伊之心" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Kelvin_0" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="林小鸭" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="松鼠" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="亦似花落亦如霞" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="掺了牛奶的水" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="河里的螃蟹" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="BesidU" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="抛抛不是泡泡" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="无名小卒" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="lgl" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="mk" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="鲨鱼不是鱼" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Momizi_Azusa" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="oseki" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="精?华?夏?" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="术士的黑猫" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="theagin" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="狗杞わ枸子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="别凶不二啦" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="枫叶落江" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Tianwai来物" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="如风FC" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="fan" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="雨恋芳歌" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="neko" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="陌上云暮迟迟归" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="121" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="SGYH" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Lelouch" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="tisky" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="禹餘" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="MoYou" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="?HONEY HONEY BOOM?" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="流雪无痕" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="yourenA" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="当归与蜜糖" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="提瓦特太保" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="weidao-云天" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Yangxl" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="zero" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="guoomg" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="孤念鬱海" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="李晨曦" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="dyh" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="didibubu" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="way_" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="浅冥" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="LightTeaHear" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="kiki" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="洛山阳" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="月下独酌" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="阿晴" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="论猫的液体可能性" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="微尔丶白折" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="超凡大谱系" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="麻圣" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="八宝饭" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="张不易" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="1" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="望Wang" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="alrin" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="无心态" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="MelonEater88" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="白日梦" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="FEssyyzplane" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="札卜铎徳勒" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="星河" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="老王1233" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="王等等等" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="橘子233" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="wyhll" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="SiMen_774" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Klcos" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="pepsi" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="FORGE" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="李青团" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Zmr2333" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="CWKF" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="兜帽人evei622130" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="毒奶神探女" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="赤诚之心" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="藏白" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="某零子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="WJMAS" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="骨头" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Starying" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="钱小穷" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="casper" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Summer丿皓月" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小促" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="御坂美琴" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="闲的没事干啥呢" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="aiyu" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="shuaitiao" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小真寻" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="清离风" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="FateIsYetUncertain" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Olympia" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="橘如望九" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="木涵" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="2147483647" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="YJ-StarBlock" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="欲予卿" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="haolanne" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="浅夏" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="MCxiaobai" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="未知数x酱" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="有事打钱" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Setsuna" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="电脑" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="mpty" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小兔噗噗" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="超级白羊大王" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="奈奈" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="12345" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="fshj" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Langfeige" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="聆风岱岳" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Fier" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="张怀民" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="minecraftmc22" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="爱蹈琯子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="何心慈" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="睏欤" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="熙里糊涂" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="落叶" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="阿坎尔德" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="杜野凛世" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="呆呆" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="我和琳妮特有个孩子" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Fishking_qwe" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="惠惠" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="黑暗风暴" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Oxsheep" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Clove_Cloud" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="今は最高" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="YuiuY" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="George0307" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="游子桀" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="玄之" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="海绵宝宝低顺钠" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="杜先生" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="黑火c" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="落日余音" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="mojanng_" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="聿丏" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="ClarkeTAT" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="东方浅浅" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="王ZEAN" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="ayu" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="无所畏惧冷圈人" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="馨軟" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="白加黑" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="梦境之中" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="青枝望月" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="m1nato__" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="18858019934" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="钩子Goou_Zi" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="开心快乐每一天" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="财阀" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小小小柴" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="晓游明" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="吃不饱的小云云" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="RandomQAQ" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Ahhhh" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="dingwenbo" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="法老" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="和十奕" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="give" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="我是只面包猫" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="柒安" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="YUU" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="月下初拥" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="白叶夕秋" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="酸奶炸鱼" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="灵喻" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="_暮霭" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="TylerDeng" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="我不在线" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Hugh" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Qiyue" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="CHAKKS" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Silver_1572" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="WIFTAB" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="hmal" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="通大小学弟" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="htenet" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="逆行若羽" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Cloud5321" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="ETERNALpause" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="小怕" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="mycraftgod2014111" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="xueling" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="拉的一坨" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="典急蚌孝豹" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="MENGXI_梦惜" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="baicai1339" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="xvp1563" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="库洛米" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="空心清风" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="素年锦时" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="浅色" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="绪方田月" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="bootspuss" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="万万大喜" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="FORxiaomo" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="躺床上发霉" />
|
||||
<TextBlock Width="240" Margin="0,1.5" Text="wuuuuuuuuuuud" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="xinyue_game" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="天灵雪" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="笙默语℡" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="QQGG" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="暮色极夜" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="陆舫" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="以炙面包" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Craig" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Hamider" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="狂仙儿" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="ggg" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="原色龙" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="江黎洛" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="大花曼陀罗" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="弎十五" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="肆意" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="phoximity" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="Saga_Xuan" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="噜啦啦啦" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="cicada" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="星索" />
|
||||
<TextBlock Width="120" Margin="0,1.5" Text="泠LINg" />
|
||||
</WrapPanel>
|
||||
<Grid Height="35">
|
||||
<Grid.ColumnDefinitions>
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
PanBack.ScrollToHome()
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoaded Then Exit Sub
|
||||
If IsLoaded Then Return
|
||||
IsLoaded = True
|
||||
|
||||
ItemAboutPcl.Info = ItemAboutPcl.Info.Replace("%VERSION%", VersionDisplayName).Replace("%VERSIONCODE%", VersionCode).Replace("%BRANCH%", VersionBranchCode)
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
If ItemTest.Checked AndAlso Setup.Get("UiHiddenOtherTest") Then IsHiddenPage = True
|
||||
If PageSetupUI.HiddenForceShow Then IsHiddenPage = False
|
||||
'若页面错误,或尚未加载,则继续
|
||||
If IsLoad AndAlso Not IsHiddenPage Then Exit Sub
|
||||
If IsLoad AndAlso Not IsHiddenPage Then Return
|
||||
IsLoad = True
|
||||
'刷新子页面隐藏情况
|
||||
PageSetupUI.HiddenRefresh()
|
||||
'选择第一个未被禁用的子页面
|
||||
If IsPageSwitched Then Exit Sub
|
||||
If IsPageSwitched Then Return
|
||||
If Not Setup.Get("UiHiddenOtherHelp") Then
|
||||
ItemHelp.SetChecked(True, False, False)
|
||||
ElseIf Not Setup.Get("UiHiddenOtherAbout") Then
|
||||
@@ -76,7 +76,7 @@
|
||||
''' 切换现有页面。
|
||||
''' </summary>
|
||||
Public Sub PageChange(ID As FormMain.PageSubType)
|
||||
If PageID = ID Then Exit Sub
|
||||
If PageID = ID Then Return
|
||||
AniControlEnabled += 1
|
||||
IsPageSwitched = True
|
||||
Try
|
||||
@@ -126,13 +126,13 @@
|
||||
|
||||
'打开网页
|
||||
Private Sub TryFeedback(sender As Object, e As RouteEventArgs) Handles ItemFeedback.Changed
|
||||
If Not ItemFeedback.Checked Then Exit Sub
|
||||
If Not ItemFeedback.Checked Then Return
|
||||
TryFeedback()
|
||||
e.Handled = True
|
||||
End Sub
|
||||
Public Shared Sub TryFeedback()
|
||||
If Not CanFeedback(True) Then Exit Sub
|
||||
Select Case MyMsgBox("在提交新反馈前,建议先搜索反馈列表,以避免重复提交。" & vbCrLf & "如果无法打开该网页,请尝试使用加速器或 VPN。",
|
||||
If Not CanFeedback(True) Then Return
|
||||
Select Case MyMsgBox("在提交新反馈前,建议先搜索反馈列表,以避免重复提交。" & vbCrLf & "如果无法打开该网页,请使用 VPN 以改善网络环境。",
|
||||
"反馈", "提交新反馈", "查看反馈列表", "取消")
|
||||
Case 1
|
||||
Feedback(True, False)
|
||||
@@ -141,13 +141,13 @@
|
||||
End Select
|
||||
End Sub
|
||||
Private Sub TryVote(sender As Object, e As RouteEventArgs) Handles ItemVote.Changed
|
||||
If Not ItemVote.Checked Then Exit Sub
|
||||
If Not ItemVote.Checked Then Return
|
||||
TryVote()
|
||||
e.Handled = True
|
||||
End Sub
|
||||
Public Shared Sub TryVote()
|
||||
If MyMsgBox("是否要打开新功能投票网页?" & vbCrLf & "如果无法打开该网页,请尝试使用加速器或 VPN。",
|
||||
"新功能投票", "打开", "取消") = 2 Then Exit Sub
|
||||
If MyMsgBox("是否要打开新功能投票网页?" & vbCrLf & "如果无法打开该网页,请使用 VPN 以改善网络环境。",
|
||||
"新功能投票", "打开", "取消") = 2 Then Return
|
||||
OpenWebsite("https://github.com/Hex-Dragon/PCL2/discussions/categories/%E5%8A%9F%E8%83%BD%E6%8A%95%E7%A5%A8?discussions_q=category%3A%E5%8A%9F%E8%83%BD%E6%8A%95%E7%A5%A8+sort%3Adate_created")
|
||||
End Sub
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
Exit For
|
||||
End If
|
||||
Next
|
||||
If IsEqual Then Exit Sub
|
||||
If IsEqual Then Return
|
||||
End If
|
||||
McFolderListLast = McFolderList
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
For i = 0 To McFolderList.Count - 1
|
||||
If McFolderList(i).Path = PathMcFolder Then
|
||||
CType(FrmSelectLeft.PanList.Children(i + 1), MyListItem).Checked = True '去掉第一个标题
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Next
|
||||
If Not McFolderList.Any() Then
|
||||
@@ -151,20 +151,20 @@
|
||||
'检查是否有下载任务
|
||||
If HasDownloadingTask() Then
|
||||
Hint("在下载任务进行时,无法添加游戏文件夹!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Try
|
||||
'获取输入
|
||||
NewFolder = SelectFolder()
|
||||
If NewFolder = "" Then Exit Sub
|
||||
If NewFolder.Contains("!") OrElse NewFolder.Contains(";") Then Hint("Minecraft 文件夹路径中不能含有感叹号或分号!", HintType.Critical) : Exit Sub
|
||||
If NewFolder = "" Then Return
|
||||
If NewFolder.Contains("!") OrElse NewFolder.Contains(";") Then Hint("Minecraft 文件夹路径中不能含有感叹号或分号!", HintType.Critical) : Return
|
||||
'要求输入显示名称
|
||||
Dim SplitedNames As String() = NewFolder.TrimEnd("\").Split("\")
|
||||
Dim DefaultName As String = If(SplitedNames.Last = ".minecraft", If(SplitedNames.Count >= 3, SplitedNames(SplitedNames.Count - 2), ""), SplitedNames.Last)
|
||||
If DefaultName.Length > 40 Then DefaultName = DefaultName.Substring(0, 39)
|
||||
Dim NewName As String = MyMsgBoxInput("输入显示名称", "输入该文件夹在左边栏列表中显示的名称。", DefaultName,
|
||||
New ObjectModel.Collection(Of Validate) From {New ValidateNullOrWhiteSpace, New ValidateLength(1, 30), New ValidateExcept({">", "|"})})
|
||||
If String.IsNullOrWhiteSpace(NewName) Then Exit Sub
|
||||
If String.IsNullOrWhiteSpace(NewName) Then Return
|
||||
'添加文件夹
|
||||
AddFolder(NewFolder, NewName, True)
|
||||
Catch ex As Exception
|
||||
@@ -183,7 +183,7 @@
|
||||
If Not CheckPermission(FolderPath) Then
|
||||
If ShowHint Then
|
||||
Hint("添加文件夹失败:PCL 没有访问该文件夹的权限!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Else
|
||||
Throw New Exception("PCL 没有访问文件夹的权限:" & FolderPath)
|
||||
End If
|
||||
@@ -208,7 +208,7 @@
|
||||
IsAdded = True
|
||||
If Folder.Split(">")(0) = DisplayName Then
|
||||
If ShowHint Then Hint("此文件夹已在列表中!", HintType.Info)
|
||||
Exit Sub
|
||||
Return
|
||||
Else
|
||||
Folders(i) = DisplayName & ">" & FolderPath
|
||||
IsReplace = True
|
||||
@@ -225,15 +225,15 @@
|
||||
Setup.Set("LaunchFolderSelect", FolderPath.Replace(Path, "$"))
|
||||
McFolderListLoader.Start(IsForceRestart:=True)
|
||||
'提示
|
||||
If IsReplace Then Exit Sub
|
||||
If IsReplace Then Return
|
||||
If ShowHint Then Hint("文件夹 " & DisplayName & " 已添加!", HintType.Finish)
|
||||
'检查是否为根目录整合包,自动关闭版本隔离
|
||||
'1. 根目录中存在数个 Mod
|
||||
Dim ModFolder As New DirectoryInfo(FolderPath & "mods\")
|
||||
If Not (ModFolder.Exists AndAlso ModFolder.EnumerateFiles.Count >= 3) Then Exit Sub
|
||||
If Not (ModFolder.Exists AndAlso ModFolder.EnumerateFiles.Count >= 3) Then Return
|
||||
'2. 版本数较少,可能为整合包
|
||||
Dim VersionFolder As New DirectoryInfo(FolderPath & "versions\")
|
||||
If Not (VersionFolder.Exists AndAlso VersionFolder.EnumerateDirectories.Count <= 3) Then Exit Sub
|
||||
If Not (VersionFolder.Exists AndAlso VersionFolder.EnumerateDirectories.Count <= 3) Then Return
|
||||
'3. 能够找到可安装 Mod 的版本
|
||||
For Each VersionPath In VersionFolder.EnumerateDirectories
|
||||
Dim Version As New McVersion(VersionPath.FullName)
|
||||
@@ -241,7 +241,7 @@
|
||||
If Not Version.Modable Then Continue For
|
||||
'4. 该版本的隔离文件夹下不存在 mods
|
||||
Dim ModIndieFolder As New DirectoryInfo(Version.Path & "mods\")
|
||||
If ModIndieFolder.Exists AndAlso ModIndieFolder.EnumerateFiles.Any Then Exit Sub
|
||||
If ModIndieFolder.Exists AndAlso ModIndieFolder.EnumerateFiles.Any Then Return
|
||||
'满足以上全部条件则视为根目录整合包
|
||||
Setup.Set("VersionArgumentIndie", 2, Version:=Version)
|
||||
Setup.Set("VersionArgumentIndieV2", False, Version:=Version)
|
||||
@@ -258,7 +258,7 @@
|
||||
'检查是否有下载任务
|
||||
If HasDownloadingTask() Then
|
||||
Hint("在下载任务进行时,无法创建游戏文件夹!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
If Not Directory.Exists(Path & ".minecraft\") Then
|
||||
Directory.CreateDirectory(Path & ".minecraft\")
|
||||
@@ -290,7 +290,7 @@
|
||||
'不删除
|
||||
Case 3
|
||||
'取消
|
||||
Exit Sub
|
||||
Return
|
||||
End Select
|
||||
End If
|
||||
'若修改了本部分代码,应对应修改 Delete_Click 中的代码
|
||||
@@ -317,8 +317,8 @@
|
||||
Public Sub Delete_Click(sender As Object, e As RoutedEventArgs)
|
||||
Dim Folder As McFolder = CType(CType(CType(sender.Parent, ContextMenu).Parent, Primitives.Popup).PlacementTarget, MyListItem).Tag
|
||||
Dim DeleteText As String = If((Folder.Type = McFolderType.Original OrElse Folder.Type = McFolderType.RenamedOriginal) AndAlso Folder.Path = Path & ".minecraft\" AndAlso McFolderList.Count = 1, "清空", "删除")
|
||||
If MyMsgBox("你确定要" & DeleteText & "这个文件夹吗?" & vbCrLf & "目标文件夹:" & Folder.Path & vbCrLf & vbCrLf & "这会导致该文件夹中的所有存档与其他文件永久丢失,且不可恢复!", "删除警告", "取消", "确认", "取消") <> 2 Then Exit Sub
|
||||
If MyMsgBox("如果你在该文件夹中存放了除 MC 以外的其他文件,这些文件也会被一同删除!" & vbCrLf & "继续删除会导致该文件夹中的所有文件永久丢失,请在仔细确认后再继续!" & vbCrLf & "目标文件夹:" & Folder.Path & vbCrLf & vbCrLf & "这是最后一次警告!", "删除警告", "确认" & DeleteText, "取消", IsWarn:=True) <> 1 Then Exit Sub
|
||||
If MyMsgBox("你确定要" & DeleteText & "这个文件夹吗?" & vbCrLf & "目标文件夹:" & Folder.Path & vbCrLf & vbCrLf & "这会导致该文件夹中的所有存档与其他文件永久丢失,且不可恢复!", "删除警告", "取消", "确认", "取消") <> 2 Then Return
|
||||
If MyMsgBox("如果你在该文件夹中存放了除 MC 以外的其他文件,这些文件也会被一同删除!" & vbCrLf & "继续删除会导致该文件夹中的所有文件永久丢失,请在仔细确认后再继续!" & vbCrLf & "目标文件夹:" & Folder.Path & vbCrLf & vbCrLf & "这是最后一次警告!", "删除警告", "确认" & DeleteText, "取消", IsWarn:=True) <> 1 Then Return
|
||||
'移出列表
|
||||
If Folder.Type = McFolderType.Custom Then
|
||||
Dim Folders As New List(Of String)(Setup.Get("LaunchFolders").ToString.Split("|"))
|
||||
@@ -369,7 +369,7 @@
|
||||
Dim NewName As String =
|
||||
MyMsgBoxInput("输入新名称", "", Folder.Name,
|
||||
New ObjectModel.Collection(Of Validate) From {New ValidateNullOrWhiteSpace, New ValidateLength(1, 30), New ValidateExcept({">", "|"})})
|
||||
If String.IsNullOrWhiteSpace(NewName) Then Exit Sub
|
||||
If String.IsNullOrWhiteSpace(NewName) Then Return
|
||||
'修改自定义名
|
||||
Dim Folders As New List(Of String)(Setup.Get("LaunchFolders").ToString.Split("|"))
|
||||
Dim IsAdded As Boolean = False
|
||||
@@ -380,7 +380,7 @@
|
||||
IsAdded = True
|
||||
If FolderCurrent.Split(">")(0) = NewName Then
|
||||
'名称未修改
|
||||
Exit Sub
|
||||
Return
|
||||
Else
|
||||
Folders(i) = NewName & ">" & Folder.Path
|
||||
End If
|
||||
@@ -400,12 +400,12 @@
|
||||
|
||||
'点击选项
|
||||
Public Sub Folder_Change(sender As MyListItem, e As RouteEventArgs)
|
||||
If Not e.RaiseByMouse OrElse Not sender.Checked Then Exit Sub
|
||||
If Not e.RaiseByMouse OrElse Not sender.Checked Then Return
|
||||
'检查是否有下载任务
|
||||
If HasDownloadingTask(True) Then
|
||||
Hint("在下载任务进行时,无法切换游戏文件夹!", HintType.Critical)
|
||||
e.Handled = True
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'更换
|
||||
Setup.Set("LaunchFolderSelect", CType(sender.Tag, McFolder).Path.Replace(Path, "$"))
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
Hint("版本 " & Version.Name & " 已删除到回收站!", HintType.Finish)
|
||||
End If
|
||||
Case 2
|
||||
Exit Sub
|
||||
Return
|
||||
End Select
|
||||
'从 UI 中移除
|
||||
If Version.DisplayType = McVersionCardType.Hidden OrElse Not Version.IsStar Then
|
||||
|
||||
@@ -246,7 +246,7 @@
|
||||
Value = CTypeDynamic(Value, E.Type)
|
||||
If E.State = 2 Then
|
||||
'如果已应用,且值相同,则无需再次更改
|
||||
If E.Value = Value AndAlso Not ForceReload Then Exit Sub
|
||||
If E.Value = Value AndAlso Not ForceReload Then Return
|
||||
Else
|
||||
'如果未应用,则直接更改并应用
|
||||
If E.Source <> SetupSource.Version Then E.State = 2
|
||||
@@ -363,7 +363,7 @@
|
||||
''' </summary>
|
||||
Private Sub Read(Key As String, ByRef E As SetupEntry, Version As McVersion)
|
||||
Try
|
||||
If Not E.State = 0 Then Exit Sub
|
||||
If Not E.State = 0 Then Return
|
||||
Dim SourceValue As String = Nothing '先用 String 储存,避免类型转换
|
||||
Select Case E.Source
|
||||
Case SetupSource.Normal
|
||||
@@ -423,7 +423,7 @@
|
||||
|
||||
'游戏内存
|
||||
Public Sub LaunchRamType(Type As Integer)
|
||||
If FrmSetupLaunch Is Nothing Then Exit Sub
|
||||
If FrmSetupLaunch Is Nothing Then Return
|
||||
FrmSetupLaunch.RamType(Type)
|
||||
End Sub
|
||||
|
||||
@@ -494,11 +494,9 @@
|
||||
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
|
||||
@@ -516,7 +514,7 @@
|
||||
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
|
||||
If IsNothing(FrmMain.ImgBack.Background) Then Return
|
||||
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
|
||||
@@ -587,7 +585,7 @@
|
||||
|
||||
'主页
|
||||
Public Sub UiCustomType(Value As Integer)
|
||||
If FrmSetupUI Is Nothing Then Exit Sub
|
||||
If FrmSetupUI Is Nothing Then Return
|
||||
Select Case Value
|
||||
Case 0 '无
|
||||
FrmSetupUI.PanCustomPreset.Visibility = Visibility.Collapsed
|
||||
@@ -749,16 +747,16 @@
|
||||
|
||||
'游戏内存
|
||||
Public Sub VersionRamType(Type As Integer)
|
||||
If FrmVersionSetup Is Nothing Then Exit Sub
|
||||
If FrmVersionSetup Is Nothing Then Return
|
||||
FrmVersionSetup.RamType(Type)
|
||||
End Sub
|
||||
|
||||
'服务器
|
||||
Public Sub VersionServerLogin(Type As Integer)
|
||||
If FrmVersionSetup Is Nothing Then Exit Sub
|
||||
If FrmVersionSetup Is Nothing Then Return
|
||||
'为第三方登录清空缓存以更新描述
|
||||
WriteIni(PathMcFolder & "PCL.ini", "VersionCache", "")
|
||||
If PageVersionLeft.Version Is Nothing Then Exit Sub
|
||||
If PageVersionLeft.Version Is Nothing Then Return
|
||||
PageVersionLeft.Version = New McVersion(PageVersionLeft.Version.Name).Load()
|
||||
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
||||
End Sub
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
</local:MyCard>
|
||||
<local:MyCard Margin="0,0,0,15" Title="游戏内存">
|
||||
<StackPanel Margin="25,40,25,15">
|
||||
<local:MyHint x:Name="LabRamWarn" Text="32 位 Java 最多只能分配 1 GB 内存,建议安装 64 位 Java!" IsWarn="True" Margin="0,0,0,12" />
|
||||
<local:MyHint x:Name="LabRamWarn" Visibility="Visible" Text="32 位 Java 只能分配最多 1 GB 的内存。强烈建议换用 64 位的 Java!" Theme="Yellow" Margin="0,0,0,12" />
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
@@ -173,7 +173,7 @@
|
||||
</local:MyCard>
|
||||
<local:MyCard x:Name="CardSkin" Margin="0,0,0,15" Title="离线皮肤" CanSwap="True" IsSwaped="True">
|
||||
<StackPanel Margin="25,40,25,15">
|
||||
<local:MyHint Text="由于技术问题,此功能只保证对 1.19.2 以前的版本有效!" IsWarn="True" Margin="0,0,0,10" />
|
||||
<local:MyHint Text="由于技术问题,此功能只保证对 1.19.2 以前的版本有效!" Theme="Yellow" Margin="0,0,0,10" />
|
||||
<Grid Margin="-1,0,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition />
|
||||
@@ -226,37 +226,37 @@
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="9" />
|
||||
<RowDefinition Height="28" />
|
||||
<RowDefinition Height="9" />
|
||||
<RowDefinition Height="28" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="9" />
|
||||
<RowDefinition Height="28" />
|
||||
<RowDefinition Height="9" />
|
||||
<RowDefinition Height="28" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
<local:MyHint Text="你可以在版本独立设置中找到更多高级启动选项。" Margin="0,2,0,12" IsWarn="False" Grid.ColumnSpan="2"
|
||||
CanClose="True" RelativeSetup="HintMoreAdvancedSetup" />
|
||||
<StackPanel Grid.Row="1" VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,0,25,0">
|
||||
<StackPanel VerticalAlignment="Center" Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,0,25,0">
|
||||
<TextBlock Text="JVM 参数头部" VerticalAlignment="Center" />
|
||||
<local:MyIconButton Height="23" Margin="0,1,0,0" x:Name="BtnAdvanceJvmReset" VerticalAlignment="Center"
|
||||
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.Row="1" Grid.ColumnSpan="2" Tag="LaunchAdvanceJvm" Grid.Column="1" ToolTip="启动 Minecraft 时使用的额外 JVM 参数,除非有确定把握,否则请不要修改" MaxLength="4000"
|
||||
<local:MyTextBox x:Name="TextAdvanceJvm" Grid.ColumnSpan="2" Tag="LaunchAdvanceJvm" Grid.Column="1" ToolTip="启动 Minecraft 时使用的额外 JVM 参数,除非有确定把握,否则请不要修改" MaxLength="4000"
|
||||
Height="100" AcceptsReturn="True" TextWrapping="Wrap" VerticalContentAlignment="Top" Padding="0,5" VerticalScrollBarVisibility="Auto" />
|
||||
<TextBlock Grid.Row="3" VerticalAlignment="Center" HorizontalAlignment="Left" Text="游戏参数尾部" Margin="0,0,25,0" />
|
||||
<local:MyTextBox x:Name="TextAdvanceGame" Grid.Row="3" Grid.ColumnSpan="2" Tag="LaunchAdvanceGame" Grid.Column="1" ToolTip="文本框中的内容将会被直接拼合在启动参数的末尾。
例如输入 --demo 则会以试玩模式启动游戏。" />
|
||||
<TextBlock Grid.Row="5" VerticalAlignment="Center" HorizontalAlignment="Left" Text="启动前执行命令" Margin="0,0,25,0" />
|
||||
<local:MyTextBox x:Name="TextAdvanceRun" Grid.Row="5" Grid.ColumnSpan="2" Tag="LaunchAdvanceRun" Grid.Column="1" HintText=""
|
||||
<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 则会以试玩模式启动游戏。" />
|
||||
<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 的命令提示符一致。

可以使用以下替换标记实现相对路径(路径均以 \ 结尾):
 · {path}:PCL 的 exe 文件所在的文件夹
 · {minecraft}:.minecraft 文件夹
 · {verpath}:版本文件夹(.minecraft\versions\版本名\)
 · {verindie}:开启版本隔离时等同版本文件夹,未开启时等同 .minecraft 文件夹
 · {java}:游戏运行时的 Java 文件夹

除此之外,也支持以下替换标记:
 · {user}:玩家名字
 · {login}:玩家的登录方式
 · {uuid}:玩家的 UUID
 · {name}:游戏版本名
 · {date}、{time}:当前的系统时间
 · {version}:游戏对应的原版版本号

例如:
 · "{verpath}test.exe" :运行版本文件夹下的 test.exe 程序
 · "{java}java.exe" -jar "{verpath}test.jar" :用 Java 运行版本文件夹下的 test.jar
 · notepad "{verindie}options.txt" :使用记事本打开该版本的设置文件

涉及路径的操作最好都打上双引号,以避免路径中的空格导致运行失败。
执行命令时,命令行所在的目录是当前的 .minecraft 文件夹。" />
|
||||
<local:MyCheckBox Grid.Row="6" Grid.Column="1" x:Name="CheckAdvanceRunWait" Tag="LaunchAdvanceRunWait" Visibility="Collapsed"
|
||||
<local:MyCheckBox Grid.Row="5" Grid.Column="1" x:Name="CheckAdvanceRunWait" Tag="LaunchAdvanceRunWait" Visibility="Collapsed"
|
||||
Text="等待命令执行完成后再继续启动" Margin="0,8,0,7" />
|
||||
<StackPanel Margin="0,12,0,4" Grid.Row="7" Grid.ColumnSpan="2" HorizontalAlignment="Left">
|
||||
<StackPanel Margin="0,12,0,4" Grid.Row="6" Grid.ColumnSpan="2" HorizontalAlignment="Left">
|
||||
<local:MyCheckBox Height="28" Text="禁用 Java Launch Wrapper" x:Name="CheckAdvanceDisableJLW" Tag="LaunchAdvanceDisableJLW"
|
||||
ToolTipService.Placement="Right" ToolTip="PCL 会使用 Java Launch Wrapper 来修复老版本 Java 在中文路径下无法启动的问题。
如果这被反作弊拦截,或遇到其他问题,也可以将其关闭。" />
|
||||
<local:MyCheckBox Height="28" Text="要求 Java 使用高性能显卡" x:Name="CheckAdvanceGraphicCard" Tag="LaunchAdvanceGraphicCard"
|
||||
ToolTipService.Placement="Right" ToolTip="自动在 Windows 设置 → 系统 → 屏幕 → 显示卡 中将 Java 改为使用高性能显卡。
如果电脑同时有集显和独显,这能确保 MC 使用独显进行渲染,以大幅提高性能。" />
|
||||
</StackPanel>
|
||||
<local:MyHint Text="你还可以在版本独立设置中找到更多高级启动选项。" Margin="0,5,0,10" Theme="Blue" Grid.Row="7" Grid.ColumnSpan="2"
|
||||
CanClose="True" RelativeSetup="HintMoreAdvancedSetup" />
|
||||
</Grid>
|
||||
</local:MyCard>
|
||||
<local:MyExtraTextButton HorizontalAlignment="Center" Margin="0,-5,0,15"
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
End If
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoad Then Exit Sub
|
||||
If IsLoad Then Return
|
||||
IsLoad = True
|
||||
|
||||
AniControlEnabled += 1
|
||||
@@ -122,18 +122,18 @@
|
||||
|
||||
Private Sub BtnSkinChange_Click(sender As Object, e As EventArgs) Handles BtnSkinChange.Click
|
||||
Dim SkinInfo As McSkinInfo = McSkinSelect()
|
||||
If Not SkinInfo.IsVaild Then Exit Sub
|
||||
If Not SkinInfo.IsVaild Then Return
|
||||
ChangeSkin(SkinInfo)
|
||||
End Sub
|
||||
Private Sub RadioSkinType3_Check(sender As Object, e As RouteEventArgs) Handles RadioSkinType4.PreviewCheck
|
||||
If Not (AniControlEnabled = 0 AndAlso e.RaiseByMouse) Then Exit Sub
|
||||
If Not (AniControlEnabled = 0 AndAlso e.RaiseByMouse) Then Return
|
||||
'已有图片则不再选择
|
||||
If File.Exists(PathAppdata & "CustomSkin.png") Then Exit Sub
|
||||
If File.Exists(PathAppdata & "CustomSkin.png") Then Return
|
||||
'没有图片则要求选择
|
||||
Dim SkinInfo As McSkinInfo = McSkinSelect()
|
||||
If Not SkinInfo.IsVaild Then
|
||||
e.Handled = True
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'正式改变
|
||||
If Not ChangeSkin(SkinInfo) Then e.Handled = True
|
||||
@@ -187,7 +187,7 @@
|
||||
#Region "游戏内存"
|
||||
|
||||
Public Sub RamType(Type As Integer)
|
||||
If SliderRamCustom Is Nothing Then Exit Sub
|
||||
If SliderRamCustom Is Nothing Then Return
|
||||
SliderRamCustom.IsEnabled = (Type = 1)
|
||||
End Sub
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
''' 刷新 UI 上的 RAM 显示。
|
||||
''' </summary>
|
||||
Public Sub RefreshRam(ShowAnim As Boolean)
|
||||
If LabRamGame Is Nothing OrElse LabRamUsed Is Nothing OrElse FrmMain.PageCurrent <> FormMain.PageType.Setup OrElse FrmSetupLeft.PageID <> FormMain.PageSubType.SetupLaunch Then Exit Sub
|
||||
If LabRamGame Is Nothing OrElse LabRamUsed Is Nothing OrElse FrmMain.PageCurrent <> FormMain.PageType.Setup OrElse FrmSetupLeft.PageID <> FormMain.PageSubType.SetupLaunch Then Return
|
||||
'获取内存情况
|
||||
Dim RamGame As Double = Math.Round(GetRam(McVersionCurrent, False), 5)
|
||||
Dim RamTotal As Double = Math.Round(My.Computer.Info.TotalPhysicalMemory / 1024 / 1024 / 1024, 1)
|
||||
@@ -409,7 +409,7 @@ PreFin:
|
||||
|
||||
'刷新 Java 下拉框显示
|
||||
Public Sub RefreshJavaComboBox()
|
||||
If ComboArgumentJava Is Nothing Then Exit Sub
|
||||
If ComboArgumentJava Is Nothing Then Return
|
||||
'初始化列表
|
||||
ComboArgumentJava.Items.Clear()
|
||||
ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "自动选择合适的 Java", .Tag = "自动选择"})
|
||||
@@ -448,9 +448,9 @@ PreFin:
|
||||
|
||||
'下拉框选择更改
|
||||
Private Sub JavaSelectionUpdate() Handles ComboArgumentJava.SelectionChanged
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
'Java 不可用时也不清空,会导致刷新时找不到对象
|
||||
If ComboArgumentJava.SelectedItem Is Nothing OrElse ComboArgumentJava.SelectedItem.Tag Is Nothing Then Exit Sub
|
||||
If ComboArgumentJava.SelectedItem Is Nothing OrElse ComboArgumentJava.SelectedItem.Tag Is Nothing Then Return
|
||||
'设置新的 Java
|
||||
Dim SelectedJava = ComboArgumentJava.SelectedItem.Tag
|
||||
If "自动选择".Equals(SelectedJava) Then
|
||||
@@ -469,11 +469,11 @@ PreFin:
|
||||
Private Sub BtnArgumentJavaSelect_Click(sender As Object, e As EventArgs) Handles BtnArgumentJavaSelect.Click
|
||||
If JavaSearchLoader.State = LoadState.Loading Then
|
||||
Hint("正在搜索 Java,请稍候!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'选择 Java
|
||||
Dim JavaSelected As String = SelectFile("javaw.exe|javaw.exe", "选择 bin 文件夹中的 javaw.exe 文件")
|
||||
If JavaSelected = "" Then Exit Sub
|
||||
If JavaSelected = "" Then Return
|
||||
JavaSelected = GetPathFromFullPath(JavaSelected)
|
||||
Try
|
||||
'验证 Java 可用
|
||||
@@ -492,14 +492,14 @@ PreFin:
|
||||
Hint("已将该 Java 加入 Java 列表!", HintType.Finish)
|
||||
Catch ex As Exception
|
||||
Log(ex, "该 Java 存在异常,无法使用", LogLevel.Msgbox, "异常的 Java")
|
||||
Exit Sub
|
||||
Return
|
||||
End Try
|
||||
End Sub
|
||||
'自动查找
|
||||
Private Sub BtnArgumentJavaSearch_Click(sender As Object, e As EventArgs) Handles BtnArgumentJavaSearch.Click
|
||||
If JavaSearchLoader.State = LoadState.Loading Then
|
||||
Hint("正在搜索 Java,请稍候!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
RunInThread(
|
||||
Sub()
|
||||
@@ -518,7 +518,7 @@ PreFin:
|
||||
#Region "其他选项"
|
||||
|
||||
Private Sub WindowTypeUIRefresh() Handles ComboArgumentWindowType.SelectionChanged
|
||||
If ComboArgumentWindowType Is Nothing Then Exit Sub
|
||||
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
|
||||
@@ -532,7 +532,7 @@ PreFin:
|
||||
|
||||
'可见性选择直接关闭的警告
|
||||
Private Sub ComboArgumentVisibie_SizeChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboArgumentVisibie.SelectionChanged
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
If ComboArgumentVisibie.SelectedIndex = 0 Then
|
||||
If MyMsgBox("若在游戏启动后立即关闭启动器,崩溃检测、更改游戏标题等功能将失效。" & vbCrLf &
|
||||
"如果想保留这些功能,可以选择让启动器在游戏启动后隐藏,游戏退出后自动关闭。", "提醒", "继续", "取消") = 2 Then
|
||||
@@ -543,7 +543,7 @@ PreFin:
|
||||
|
||||
'开启自动内存优化的警告
|
||||
Private Sub CheckArgumentRam_Change() Handles CheckArgumentRam.Change
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
If Not CheckArgumentRam.Checked Then Return
|
||||
If MyMsgBox("内存优化会显著延长启动耗时,建议仅在内存不足时开启。" & vbCrLf &
|
||||
"如果你在使用机械硬盘,这还可能导致一小段时间的严重卡顿。" &
|
||||
@@ -555,8 +555,8 @@ PreFin:
|
||||
|
||||
'版本隔离提示
|
||||
Private Sub ComboArgumentIndie_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboArgumentIndieV2.SelectionChanged
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
MyMsgBox("默认策略只会对今后新安装的版本生效。" & vbCrLf & "已有版本的隔离策略需要在它的版本设置中调整。")
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
MyMsgBox("本设置仅会对之后新安装的版本生效。" & vbCrLf & "如果要修改已安装的版本的隔离方式,请在它的版本独立设置中调整。")
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
|
||||
@@ -11,12 +11,12 @@
|
||||
If ItemLink.Checked AndAlso Setup.Get("UiHiddenSetupLink") Then IsHiddenPage = True
|
||||
If PageSetupUI.HiddenForceShow Then IsHiddenPage = False
|
||||
'若页面错误,或尚未加载,则继续
|
||||
If IsLoad AndAlso Not IsHiddenPage Then Exit Sub
|
||||
If IsLoad AndAlso Not IsHiddenPage Then Return
|
||||
IsLoad = True
|
||||
'刷新子页面隐藏情况
|
||||
PageSetupUI.HiddenRefresh()
|
||||
'选择第一个未被禁用的子页面
|
||||
If IsPageSwitched Then Exit Sub
|
||||
If IsPageSwitched Then Return
|
||||
If Not Setup.Get("UiHiddenSetupLaunch") Then
|
||||
ItemLaunch.SetChecked(True, False, False)
|
||||
ElseIf Not Setup.Get("UiHiddenSetupUi") Then
|
||||
@@ -91,7 +91,7 @@
|
||||
''' 切换现有页面。
|
||||
''' </summary>
|
||||
Public Sub PageChange(ID As FormMain.PageSubType)
|
||||
If PageID = ID Then Exit Sub
|
||||
If PageID = ID Then Return
|
||||
AniControlEnabled += 1
|
||||
IsPageSwitched = True
|
||||
Try
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
PanBack.ScrollToHome()
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoaded Then Exit Sub
|
||||
If IsLoaded Then Return
|
||||
IsLoaded = True
|
||||
|
||||
AniControlEnabled += 1
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#End If
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoaded Then Exit Sub
|
||||
If IsLoaded Then Return
|
||||
IsLoaded = True
|
||||
|
||||
AniControlEnabled += 1
|
||||
@@ -124,7 +124,7 @@
|
||||
SliderDebugAnim.GetHintText = Function(v) If(v > 29, "关闭", (v / 10 + 0.1) & "x")
|
||||
End Sub
|
||||
Private Sub SliderDownloadThread_PreviewChange(sender As Object, e As RouteEventArgs) Handles SliderDownloadThread.PreviewChange
|
||||
If SliderDownloadThread.Value < 100 Then Exit Sub
|
||||
If SliderDownloadThread.Value < 100 Then Return
|
||||
If Not Setup.Get("HintDownloadThread") Then
|
||||
Setup.Set("HintDownloadThread", True)
|
||||
MyMsgBox("如果设置过多的下载线程,可能会导致下载时出现非常严重的卡顿。" & vbCrLf &
|
||||
@@ -147,8 +147,8 @@
|
||||
|
||||
'自动更新
|
||||
Private Sub ComboSystemActivity_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboSystemActivity.SelectionChanged
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If ComboSystemActivity.SelectedIndex <> 2 Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
If ComboSystemActivity.SelectedIndex <> 2 Then Return
|
||||
If MyMsgBox("若选择此项,即使在将来出现严重问题时,你也无法获取相关通知。" & vbCrLf &
|
||||
"例如,如果发现某个版本游戏存在严重 Bug,你可能就会因为无法得到通知而导致无法预知的后果。" & vbCrLf & vbCrLf &
|
||||
"一般选择 仅在有重要通知时显示公告 就可以让你尽量不受打扰了。" & vbCrLf &
|
||||
@@ -157,8 +157,8 @@
|
||||
End If
|
||||
End Sub
|
||||
Private Sub ComboSystemUpdate_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboSystemUpdate.SelectionChanged
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If ComboSystemUpdate.SelectedIndex <> 3 Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
If ComboSystemUpdate.SelectedIndex <> 3 Then Return
|
||||
If MyMsgBox("若选择此项,即使在启动器将来出现严重问题时,你也无法获取更新并获得修复。" & vbCrLf &
|
||||
"例如,如果官方修改了登录方式,从而导致现有启动器无法登录,你可能就会因为无法更新而无法开始游戏。" & vbCrLf & vbCrLf &
|
||||
"一般选择 仅在有重大漏洞更新时显示提示 就可以让你尽量不受打扰了。" & vbCrLf &
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
<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 在低性能电脑上可以流畅运行。" />
|
||||
</Grid>
|
||||
<local:MyCheckBox Text="使用彩色背景" Margin="-1,0,0,8" Height="22" x:Name="CheckBackgroundColorful" Tag="UiBackgroundColorful" />
|
||||
<local:MyCheckBox Text="叠加彩色背景" Margin="-1,0,0,8" Height="22" x:Name="CheckBackgroundColorful" Tag="UiBackgroundColorful" />
|
||||
<Grid Height="35" Margin="0,2,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
|
||||
@@ -206,9 +206,9 @@
|
||||
<local:MyRadioBox Text="读取本地文件" x:Name="RadioCustomType1" Height="22" Tag="UiCustomType/1" Grid.Column="2" />
|
||||
<local:MyRadioBox Text="联网更新" x:Name="RadioCustomType2" Height="22" Tag="UiCustomType/2" Grid.Column="3" />
|
||||
</Grid>
|
||||
<local:MyHint Margin="0,15,0,-9" Text="在使用陌生人提供的主页前请务必谨慎,恶意的主页可能会造成损害!" IsWarn="True" x:Name="HintCustomWarn"
|
||||
<local:MyHint Margin="0,15,0,-4" Text="内容见 ModSetup" Theme="Blue" x:Name="HintCustom" />
|
||||
<local:MyHint Margin="0,15,0,6" Text="请谨慎使用陌生人提供的主页,恶意代码可能会造成损害!" Theme="Yellow" x:Name="HintCustomWarn"
|
||||
CanClose="True" RelativeSetup="HintCustomWarn" />
|
||||
<local:MyHint Margin="0,15,0,1" Text="内容见 ModSetup" IsWarn="False" x:Name="HintCustom" />
|
||||
<Grid Height="35" x:Name="PanCustomLocal" Visibility="Collapsed" Margin="0,10,0,5">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
|
||||
@@ -293,7 +293,7 @@
|
||||
<local:MyCheckBox Height="22" VerticalAlignment="Center" Grid.Row="3" Grid.Column="5" Text="反馈" x:Name="CheckHiddenOtherFeedback" Tag="UiHiddenOtherFeedback" />
|
||||
<local:MyCheckBox Height="22" VerticalAlignment="Center" Grid.Row="3" Grid.Column="6" Text="新功能投票" x:Name="CheckHiddenOtherVote" Tag="UiHiddenOtherVote" />
|
||||
<TextBlock Grid.Row="4" VerticalAlignment="Center" HorizontalAlignment="Left" Text="特定功能" />
|
||||
<local:MyCheckBox Height="22" VerticalAlignment="Center" Grid.Row="4" Grid.Column="2" Text="邮箱隐藏" x:Name="CheckLauncherEmail" Tag="UiLauncherEmail" ToolTip="隐藏第三方登录的账号邮箱显示,并尽量将邮箱打码,以避免隐私泄露。
此选项的更改将在重启启动器后生效。" />
|
||||
<local:MyCheckBox Height="22" VerticalAlignment="Center" Grid.Row="4" Grid.Column="2" Text="邮箱隐藏" x:Name="CheckLauncherEmail" Tag="UiLauncherEmail" ToolTip="隐藏第三方登录的账号邮箱显示,以避免隐私泄露。
此选项的更改将在重启启动器后生效。" />
|
||||
<local:MyCheckBox Height="22" VerticalAlignment="Center" Grid.Row="4" Grid.Column="3" Text="版本管理" x:Name="CheckHiddenFunctionSelect" Tag="UiHiddenFunctionSelect" ToolTip="隐藏启动按钮下方的版本选择与版本设置入口。" />
|
||||
<local:MyCheckBox Height="22" VerticalAlignment="Center" Grid.Row="4" Grid.Column="4" Text="Mod 更新" x:Name="CheckHiddenFunctionModUpdate" Tag="UiHiddenFunctionModUpdate" ToolTip="禁止在 Mod 管理页面更新 Mod。" />
|
||||
<local:MyCheckBox Height="22" VerticalAlignment="Center" Grid.Row="4" Grid.Column="5" Text="功能隐藏" x:Name="CheckHiddenFunctionHidden" Tag="UiHiddenFunctionHidden" ToolTip="仅隐藏本选项卡,设置的禁用内容依然有效。
可以在保留个性化设置页面的情况下避免隐藏设置被修改。" />
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
AniControlEnabled -= 1
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoaded Then Exit Sub
|
||||
If IsLoaded Then Return
|
||||
IsLoaded = True
|
||||
|
||||
SliderLoad()
|
||||
@@ -89,7 +89,7 @@
|
||||
Catch
|
||||
Setup.Reset("UiCustomPreset")
|
||||
End Try
|
||||
CType(FindName("RadioCustomType" & Setup.Load("UiCustomType",ForceReload:=True)), MyRadioBox).Checked = True
|
||||
CType(FindName("RadioCustomType" & Setup.Load("UiCustomType", ForceReload:=True)), MyRadioBox).Checked = True
|
||||
TextCustomNet.Text = Setup.Get("UiCustomNet")
|
||||
|
||||
'功能隐藏
|
||||
@@ -195,7 +195,7 @@
|
||||
BackgroundRefresh(True, True)
|
||||
End Sub
|
||||
Public Sub BackgroundRefreshUI(Show As Boolean, Count As Integer)
|
||||
If IsNothing(PanBackgroundOpacity) Then Exit Sub
|
||||
If IsNothing(PanBackgroundOpacity) Then Return
|
||||
If Show Then
|
||||
PanBackgroundOpacity.Visibility = Visibility.Visible
|
||||
PanBackgroundBlur.Visibility = Visibility.Visible
|
||||
@@ -275,7 +275,7 @@
|
||||
'顶部栏
|
||||
Private Sub BtnLogoChange_Click(sender As Object, e As EventArgs) Handles BtnLogoChange.Click
|
||||
Dim FileName As String = SelectFile("常用图片文件(*.png;*.jpg;*.gif;*.webp)|*.png;*.jpg;*.gif;*.webp", "选择图片")
|
||||
If FileName = "" Then Exit Sub
|
||||
If FileName = "" Then Return
|
||||
Try
|
||||
'拷贝文件
|
||||
File.Delete(Path & "PCL\Logo.png")
|
||||
@@ -294,11 +294,12 @@
|
||||
End Try
|
||||
End Sub
|
||||
Private Sub RadioLogoType3_Check(sender As Object, e As RouteEventArgs) Handles RadioLogoType3.PreviewCheck
|
||||
If Not (AniControlEnabled = 0 AndAlso e.RaiseByMouse) Then Exit Sub
|
||||
If Not (AniControlEnabled = 0 AndAlso e.RaiseByMouse) Then Return
|
||||
Refresh:
|
||||
'已有图片则不再选择
|
||||
If File.Exists(Path & "PCL\Logo.png") Then
|
||||
Try
|
||||
FrmMain.ImageTitleLogo.Source = Nothing '防止因为 Source 属性前后的值相同而不更新 (#5628)
|
||||
FrmMain.ImageTitleLogo.Source = Path & "PCL\Logo.png"
|
||||
Catch ex As Exception
|
||||
If ex.Message.Contains("参数无效") Then
|
||||
@@ -315,7 +316,7 @@ Refresh:
|
||||
Log(exx, "清理错误的标题栏图片失败", LogLevel.Msgbox)
|
||||
End Try
|
||||
End Try
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'没有图片则要求选择
|
||||
Dim FileName As String = SelectFile("常用图片文件(*.png;*.jpg;*.gif;*.webp)|*.png;*.jpg;*.gif;*.webp", "选择图片")
|
||||
@@ -351,7 +352,7 @@ Refresh:
|
||||
MusicRefreshPlay(True)
|
||||
End Sub
|
||||
Public Sub MusicRefreshUI()
|
||||
If PanBackgroundOpacity Is Nothing Then Exit Sub
|
||||
If PanBackgroundOpacity Is Nothing Then Return
|
||||
If MusicAllList.Any Then
|
||||
PanMusicVolume.Visibility = Visibility.Visible
|
||||
PanMusicDetail.Visibility = Visibility.Visible
|
||||
@@ -392,11 +393,11 @@ Refresh:
|
||||
End If
|
||||
End Sub
|
||||
Private Sub CheckMusicStart_Change() Handles CheckMusicStart.Change
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
If CheckMusicStart.Checked Then CheckMusicStop.Checked = False
|
||||
End Sub
|
||||
Private Sub CheckMusicStop_Change() Handles CheckMusicStop.Change
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
If CheckMusicStop.Checked Then CheckMusicStart.Checked = False
|
||||
End Sub
|
||||
|
||||
@@ -404,7 +405,7 @@ Refresh:
|
||||
Private Sub BtnCustomFile_Click(sender As Object, e As EventArgs) Handles BtnCustomFile.Click
|
||||
Try
|
||||
If File.Exists(Path & "PCL\Custom.xaml") Then
|
||||
If MyMsgBox("当前已存在布局文件,继续生成教学文件将会覆盖现有布局文件!", "覆盖确认", "继续", "取消", IsWarn:=True) = 2 Then Exit Sub
|
||||
If MyMsgBox("当前已存在布局文件,继续生成教学文件将会覆盖现有布局文件!", "覆盖确认", "继续", "取消", IsWarn:=True) = 2 Then Return
|
||||
End If
|
||||
WriteFile(Path & "PCL\Custom.xaml", GetResources("Custom"))
|
||||
Hint("教学文件已生成!", HintType.Finish)
|
||||
@@ -463,7 +464,7 @@ Refresh:
|
||||
'主题自定义
|
||||
Private Sub RadioLauncherTheme14_Change(sender As Object, e As RouteEventArgs) Handles RadioLauncherTheme14.Changed
|
||||
If RadioLauncherTheme14.Checked Then
|
||||
If LabLauncherHue.Visibility = Visibility.Visible Then Exit Sub
|
||||
If LabLauncherHue.Visibility = Visibility.Visible Then Return
|
||||
LabLauncherHue.Visibility = Visibility.Visible
|
||||
SliderLauncherHue.Visibility = Visibility.Visible
|
||||
LabLauncherSat.Visibility = Visibility.Visible
|
||||
@@ -473,7 +474,7 @@ Refresh:
|
||||
LabLauncherLight.Visibility = Visibility.Visible
|
||||
SliderLauncherLight.Visibility = Visibility.Visible
|
||||
Else
|
||||
If LabLauncherHue.Visibility = Visibility.Collapsed Then Exit Sub
|
||||
If LabLauncherHue.Visibility = Visibility.Collapsed Then Return
|
||||
LabLauncherHue.Visibility = Visibility.Collapsed
|
||||
SliderLauncherHue.Visibility = Visibility.Collapsed
|
||||
LabLauncherSat.Visibility = Visibility.Collapsed
|
||||
@@ -486,7 +487,7 @@ Refresh:
|
||||
CardLauncher.TriggerForceResize()
|
||||
End Sub
|
||||
Private Sub HSL_Change() Handles SliderLauncherHue.Change, SliderLauncherLight.Change, SliderLauncherSat.Change, SliderLauncherDelta.Change
|
||||
If AniControlEnabled <> 0 OrElse SliderLauncherSat Is Nothing OrElse Not SliderLauncherSat.IsLoaded Then Exit Sub
|
||||
If AniControlEnabled <> 0 OrElse SliderLauncherSat Is Nothing OrElse Not SliderLauncherSat.IsLoaded Then Return
|
||||
ThemeRefresh()
|
||||
End Sub
|
||||
|
||||
@@ -510,7 +511,7 @@ Refresh:
|
||||
''' 更新功能隐藏带来的显示变化。
|
||||
''' </summary>
|
||||
Public Shared Sub HiddenRefresh() Handles Me.Loaded
|
||||
If FrmMain.PanTitleSelect Is Nothing OrElse Not FrmMain.PanTitleSelect.IsLoaded Then Exit Sub
|
||||
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
|
||||
@@ -641,7 +642,7 @@ Refresh:
|
||||
CheckHiddenPageOther.Checked = False
|
||||
End If
|
||||
'修改无具体内容的项
|
||||
If Not user Then Exit Sub
|
||||
If Not user Then Return
|
||||
If Setup.Get("UiHiddenOtherHelp") AndAlso Setup.Get("UiHiddenOtherAbout") AndAlso Setup.Get("UiHiddenOtherTest") Then
|
||||
CheckHiddenOtherFeedback.Checked = True
|
||||
CheckHiddenOtherVote.Checked = True
|
||||
@@ -649,7 +650,7 @@ Refresh:
|
||||
End Sub
|
||||
Private Sub HiddenOtherNet(sender As Object, user As Boolean) Handles CheckHiddenOtherFeedback.Change, CheckHiddenOtherVote.Change
|
||||
'更多子页面(无具体内容的)
|
||||
If Not user Then Exit Sub
|
||||
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
|
||||
CheckHiddenOtherAbout.Checked = False
|
||||
|
||||
@@ -13,7 +13,7 @@ Public Class PageSpeedLeft
|
||||
'如果在页面切换动画的 “上一页消失” 部分已经完成了下载,就直接尝试返回
|
||||
TryReturnToHome()
|
||||
|
||||
If IsLoad Then Exit Sub
|
||||
If IsLoad Then Return
|
||||
IsLoad = True
|
||||
|
||||
'监控定时器
|
||||
@@ -34,7 +34,7 @@ Public Class PageSpeedLeft
|
||||
'定时器任务
|
||||
Private ReadOnly RightCards As New Dictionary(Of String, MyCard)
|
||||
Private Sub Watcher()
|
||||
If Not FrmMain.PageCurrent = FormMain.PageType.DownloadManager Then Exit Sub
|
||||
If Not FrmMain.PageCurrent = FormMain.PageType.DownloadManager Then Return
|
||||
Try
|
||||
|
||||
#Region "更新左边栏"
|
||||
@@ -46,7 +46,8 @@ Public Class PageSpeedLeft
|
||||
LabThread.Text = "0 / " & NetTaskThreadLimit
|
||||
Else
|
||||
'有任务,输出基本信息
|
||||
Dim RawPercent As Double = LoaderTaskbarProgress
|
||||
Dim Tasks = LoaderTaskbar.Where(Function(l) l.Show).ToList() '筛选掉启动 MC 的任务(#6270)
|
||||
Dim RawPercent As Double = If(Tasks.Any, MathClamp(Tasks.Select(Function(l) l.Progress).Average(), 0, 1), 1)
|
||||
Dim PredictText As String = Math.Floor(RawPercent * 100) & "." & StrFill(Math.Floor((RawPercent * 100 - Math.Floor(RawPercent * 100)) * 100), "0", 2) & " %"
|
||||
LabProgress.Text = If(RawPercent > 0.999999, "100 %", PredictText)
|
||||
LabSpeed.Text = GetString(NetManager.Speed) & "/s"
|
||||
@@ -58,7 +59,7 @@ Public Class PageSpeedLeft
|
||||
Catch ex As Exception
|
||||
Log(ex, "下载管理左栏监视出错", LogLevel.Feedback)
|
||||
End Try
|
||||
If FrmSpeedRight Is Nothing OrElse FrmSpeedRight.PanMain Is Nothing Then Exit Sub
|
||||
If FrmSpeedRight Is Nothing OrElse FrmSpeedRight.PanMain Is Nothing Then Return
|
||||
Try
|
||||
For Each Loader In LoaderTaskbar.ToList
|
||||
TaskRefresh(Loader)
|
||||
@@ -68,7 +69,7 @@ Public Class PageSpeedLeft
|
||||
End Try
|
||||
End Sub
|
||||
Public Sub TaskRefresh(Loader As LoaderBase)
|
||||
If Loader Is Nothing OrElse Not Loader.Show Then Exit Sub
|
||||
If Loader Is Nothing OrElse Not Loader.Show Then Return
|
||||
Try
|
||||
'获取实际加载器列表
|
||||
Dim LoaderList As List(Of LoaderBase) = CType(Loader, Object).GetLoaderList()
|
||||
@@ -76,11 +77,11 @@ Public Class PageSpeedLeft
|
||||
'已有此卡片
|
||||
Dim Card As Grid = RightCards(Loader.Name)
|
||||
Dim NewValue As Double = Loader.Progress + Loader.State
|
||||
If Val(Card.Tag) = NewValue Then Exit Sub
|
||||
If Val(Card.Tag) = NewValue Then Return
|
||||
Card.Tag = NewValue
|
||||
If Card.Children.Count <= 3 Then
|
||||
Log("[Watcher] 元素不足的卡片:" & Loader.Name, LogLevel.Debug)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Card = Card.Children(3)
|
||||
Try
|
||||
|
||||
@@ -32,7 +32,7 @@ Public Class MyLocalModItem
|
||||
LabTitle.TextDecorations = TextDecorations.Strikethrough
|
||||
value &= " [错误]"
|
||||
End Select
|
||||
If LabTitle.Text = value Then Exit Property
|
||||
If LabTitle.Text = value Then Return
|
||||
LabTitle.Text = value
|
||||
_Title = RawValue
|
||||
End Set
|
||||
@@ -44,7 +44,7 @@ Public Class MyLocalModItem
|
||||
Return If(LabSubtitle?.Text, "")
|
||||
End Get
|
||||
Set(value As String)
|
||||
If LabSubtitle.Text = value Then Exit Property
|
||||
If LabSubtitle.Text = value Then Return
|
||||
LabSubtitle.Text = value
|
||||
LabSubtitle.Visibility = If(value = "", Visibility.Collapsed, Visibility.Visible)
|
||||
End Set
|
||||
@@ -56,7 +56,7 @@ Public Class MyLocalModItem
|
||||
Return LabInfo.Text
|
||||
End Get
|
||||
Set(value As String)
|
||||
If LabInfo.Text = value Then Exit Property
|
||||
If LabInfo.Text = value Then Return
|
||||
LabInfo.Text = value
|
||||
End Set
|
||||
End Property
|
||||
@@ -97,7 +97,7 @@ Public Class MyLocalModItem
|
||||
Private Sub Button_MouseUp(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseLeftButtonUp
|
||||
If IsMouseDown Then
|
||||
RaiseEvent Click(sender, e)
|
||||
If e.Handled Then Exit Sub
|
||||
If e.Handled Then Return
|
||||
Log("[Control] 按下本地 Mod 列表项:" & LabTitle.Text)
|
||||
End If
|
||||
End Sub
|
||||
@@ -105,7 +105,7 @@ Public Class MyLocalModItem
|
||||
'鼠标点击判定
|
||||
Private IsMouseDown As Boolean = False
|
||||
Private Sub Button_MouseDown(sender As Object, e As MouseButtonEventArgs) Handles Me.PreviewMouseLeftButtonDown
|
||||
If Not IsMouseDirectlyOver Then Exit Sub
|
||||
If Not IsMouseDirectlyOver Then Return
|
||||
IsMouseDown = True
|
||||
If ButtonStack IsNot Nothing Then ButtonStack.IsHitTestVisible = False
|
||||
End Sub
|
||||
@@ -116,25 +116,33 @@ Public Class MyLocalModItem
|
||||
|
||||
'滑动选中
|
||||
Private Shared SwipeStart As Integer, SwipeEnd As Integer
|
||||
Private Shared Swiping As Boolean = False
|
||||
Private Shared _Swiping As Boolean = False
|
||||
Private Shared Property Swiping As Boolean
|
||||
Get
|
||||
Return _Swiping
|
||||
End Get
|
||||
Set(value As Boolean)
|
||||
_Swiping = value
|
||||
FrmVersionMod.CardSelect.IsHitTestVisible = Not value
|
||||
End Set
|
||||
End Property
|
||||
Private Shared SwipToState As Boolean '被滑动到的目标应将 Checked 改为此值
|
||||
Private Sub Button_MouseSwipeStart(sender As Object, e As Object) Handles Me.MouseLeftButtonDown
|
||||
If Parent Is Nothing Then Exit Sub 'Mod 可能已被删除(#3824)
|
||||
If Parent Is Nothing Then Return 'Mod 可能已被删除(#3824)
|
||||
'开始滑动
|
||||
Dim Index = CType(Parent, StackPanel).Children.IndexOf(Me)
|
||||
SwipeStart = Index
|
||||
SwipeEnd = Index
|
||||
Swiping = True
|
||||
SwipToState = Not Checked
|
||||
FrmVersionMod.CardSelect.IsHitTestVisible = False '暂时禁用下边栏
|
||||
End Sub
|
||||
Private Sub Button_MouseSwipe(sender As Object, e As Object) Handles Me.MouseEnter, Me.MouseLeave, Me.MouseLeftButtonUp
|
||||
If Parent Is Nothing Then Exit Sub 'Mod 可能已被删除(#3824)
|
||||
If Parent Is Nothing Then Return 'Mod 可能已被删除(#3824)
|
||||
'结束滑动
|
||||
If Mouse.LeftButton <> MouseButtonState.Pressed OrElse Not Swiping Then
|
||||
If Mouse.LeftButton <> MouseButtonState.Pressed OrElse
|
||||
TypeOf Mouse.DirectlyOver IsNot MyLocalModItem Then '#5771
|
||||
Swiping = False
|
||||
FrmVersionMod.CardSelect.IsHitTestVisible = True
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'计算滑动范围
|
||||
Dim Elements = CType(Parent, StackPanel).Children
|
||||
@@ -142,7 +150,7 @@ Public Class MyLocalModItem
|
||||
SwipeStart = MathClamp(Math.Min(SwipeStart, Index), 0, Elements.Count - 1)
|
||||
SwipeEnd = MathClamp(Math.Max(SwipeEnd, Index), 0, Elements.Count - 1)
|
||||
'勾选所有范围中的项
|
||||
If SwipeStart = SwipeEnd Then Exit Sub
|
||||
If SwipeStart = SwipeEnd Then Return
|
||||
For i = SwipeStart To SwipeEnd
|
||||
Dim Item As MyLocalModItem = Elements(i)
|
||||
Item.InitLate(Item, e)
|
||||
@@ -150,15 +158,6 @@ Public Class MyLocalModItem
|
||||
Next
|
||||
End Sub
|
||||
|
||||
'在鼠标离开整个ModItem列表视图(即不悬停在任何一个ModItem上)时,取消划过状态以及启用CardSelect的命中 #5665
|
||||
Private Sub Button_MouseLeaveModItems(sender As Object, e As Object) Handles Me.MouseLeave
|
||||
If Parent Is Nothing Then Exit Sub
|
||||
If Swiping AndAlso TypeOf Mouse.DirectlyOver IsNot MyLocalModItem Then
|
||||
Swiping = False
|
||||
FrmVersionMod.CardSelect.IsHitTestVisible = True
|
||||
End If
|
||||
End Sub
|
||||
|
||||
'勾选状态
|
||||
Public Event Check(sender As Object, e As RouteEventArgs)
|
||||
Public Event Changed(sender As Object, e As RouteEventArgs)
|
||||
@@ -171,20 +170,20 @@ Public Class MyLocalModItem
|
||||
Try
|
||||
'触发属性值修改
|
||||
Dim RawValue = _Checked
|
||||
If value = _Checked Then Exit Property
|
||||
If value = _Checked Then Return
|
||||
_Checked = value
|
||||
Dim ChangedEventArgs As New RouteEventArgs(False)
|
||||
If IsInitialized Then
|
||||
RaiseEvent Changed(Me, ChangedEventArgs)
|
||||
If ChangedEventArgs.Handled Then
|
||||
_Checked = RawValue
|
||||
Exit Property
|
||||
Return
|
||||
End If
|
||||
End If
|
||||
If value Then
|
||||
Dim CheckEventArgs As New RouteEventArgs(False)
|
||||
RaiseEvent Check(Me, CheckEventArgs)
|
||||
If CheckEventArgs.Handled Then Exit Property
|
||||
If CheckEventArgs.Handled Then Return
|
||||
End If
|
||||
'更改动画
|
||||
If IsVisibleInForm() Then
|
||||
@@ -279,7 +278,7 @@ Public Class MyLocalModItem
|
||||
Children.Remove(ButtonStack)
|
||||
ButtonStack = Nothing
|
||||
End If
|
||||
If Not value.Any() Then Exit Property
|
||||
If Not value.Any() Then Return
|
||||
'添加新 Stack
|
||||
ButtonStack = New StackPanel With {.Opacity = 0, .Margin = New Thickness(0, 0, 5, 0), .SnapsToDevicePixels = False, .Orientation = Orientation.Horizontal,
|
||||
.HorizontalAlignment = HorizontalAlignment.Right, .VerticalAlignment = VerticalAlignment.Center, .UseLayoutRounding = False}
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</Grid.Resources>
|
||||
<local:MyScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" x:Name="PanBack">
|
||||
<StackPanel Margin="25,10,25,65">
|
||||
<local:MyHint Margin="0,15,0,0" Text="受 Modrinth 整合包规范限制,导出的整合包中暂不包含 OptiFine。" IsWarn="False" x:Name="HintOptiFine" />
|
||||
<local:MyHint Margin="0,15,0,0" Text="受 Modrinth 整合包规范限制,导出的整合包中不会包含 OptiFine。" Theme="Yellow" x:Name="HintOptiFine" />
|
||||
<local:MyCard Margin="0,15">
|
||||
<Grid Margin="22,15,25,15">
|
||||
<Grid.ColumnDefinitions>
|
||||
@@ -237,14 +237,14 @@
|
||||
</local:MyCard>
|
||||
<local:MyCard Title="高级选项" Margin="0,0,0,15" CanSwap="True" IsSwaped="True">
|
||||
<StackPanel Margin="25,37,23,20">
|
||||
<local:MyHint Text="建议仅在无法稳定连接 CurseForge 或 Modrinth 时才打包资源文件。
二次分发可能违反使用协议,请尽量不要公开发布包含资源文件的整合包!"
|
||||
IsWarn="False" Margin="0,0,0,4" Visibility="{Binding Checked, ElementName=CheckAdvancedInclude, Converter={StaticResource BooleanToVisibilityConverter}}" />
|
||||
<local:MyHint Text="建议仅在无法稳定连接 CurseForge 或 Modrinth 时才打包资源文件。
请不要公开发布含资源文件的整合包,这会违反部分 Mod 的使用协议!"
|
||||
Theme="Yellow" Margin="0,2,0,8" Visibility="{Binding Checked, ElementName=CheckAdvancedInclude, Converter={StaticResource BooleanToVisibilityConverter}}" />
|
||||
<local:MyCheckBox Text="打包资源文件,以避免在导入时下载" x:Name="CheckAdvancedInclude"
|
||||
ToolTip="将 Mod、资源包、光影包的文件直接放入整合包中,这样在导入时就无需联网下载它们。
建议仅在无法稳定连接 CurseForge 或 Modrinth 时才考虑勾选。" />
|
||||
<local:MyCheckBox Text="Modrinth 上传模式" x:Name="CheckAdvancedModrinth"
|
||||
ToolTip="如果你想要打包上传到 Modrinth,勾选此项会生成完全符合 Modrinth 要求的整合包文件。
由于 Modrinth 要求,只能从 CurseForge 下载的资源将无法联网下载,会被直接放入整合包中。
此外,勾选后也不能在整合包中包含 PCL 启动器文件。" />
|
||||
<local:MyHint IsWarn="False" RelativeSetup="HintExportConfig" CanClose="True" Margin="0,20,0,0"
|
||||
Text="配置文件中含有未在此处列出的选项,例如精准控制导出的文件、设置整合包存放位置等。
请先选择 “保存配置”,然后编辑保存的配置文件。" />
|
||||
<local:MyHint Theme="Blue" RelativeSetup="HintExportConfig" CanClose="True" Margin="0,20,0,2"
|
||||
Text="配置文件中含有更多高级选项,例如精准控制导出的文件、设置整合包存放位置等。
要修改这些选项,请先点击 “保存配置”,在编辑配置文件后再导入。" />
|
||||
<Grid Height="35" Margin="0,12,0,0">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" SharedSizeGroup="Button" />
|
||||
|
||||
@@ -409,7 +409,6 @@ Public Class PageVersionExport
|
||||
Next
|
||||
|
||||
'确认导出位置
|
||||
Dim Extension As String = If(CheckOptionsPcl.Checked, ".zip", ".mrpack")
|
||||
Dim PackPath As String = Nothing
|
||||
If Not String.IsNullOrWhiteSpace(ConfigPackPath) AndAlso
|
||||
(Not ConfigPackPath.EndsWithF("\") AndAlso Not ConfigPackPath.EndsWithF("/")) Then
|
||||
@@ -423,9 +422,11 @@ Public Class PageVersionExport
|
||||
End Try
|
||||
End If
|
||||
If PackPath Is Nothing Then
|
||||
Dim Extensions As New List(Of String)
|
||||
If Not CheckAdvancedModrinth.Checked Then Extensions.Add("压缩文件(*.zip)|*.zip")
|
||||
If Not CheckOptionsPcl.Checked Then Extensions.Add("Modrinth 整合包文件(*.mrpack)|*.mrpack")
|
||||
PackPath = SelectSaveFile("选择导出位置",
|
||||
PackName & If(String.IsNullOrEmpty(TextExportVersion.Text), "", " " & TextExportVersion.Text),
|
||||
$"整合包文件(*{Extension})|*{Extension}")
|
||||
PackName & If(String.IsNullOrEmpty(TextExportVersion.Text), "", " " & TextExportVersion.Text), Extensions.Join("|"))
|
||||
Log($"[Export] 手动指定的导出路径:{PackPath}")
|
||||
End If
|
||||
If String.IsNullOrEmpty(PackPath) Then Return
|
||||
@@ -614,7 +615,7 @@ Public Class PageVersionExport
|
||||
|
||||
'等待线程结束
|
||||
Do Until EndedThreadCount = 2
|
||||
If Loader.IsAborted Then Exit Sub
|
||||
If Loader.IsAborted Then Return
|
||||
Thread.Sleep(10)
|
||||
Loop
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
''' 切换现有页面。
|
||||
''' </summary>
|
||||
Public Sub PageChange(ID As FormMain.PageSubType)
|
||||
If PageID = ID Then Exit Sub
|
||||
If PageID = ID Then Return
|
||||
AniControlEnabled += 1
|
||||
Try
|
||||
PageChangeRun(PageGet(ID))
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
<local:MyLoading Text="正在加载 Mod 列表" Margin="20,20,20,17" x:Name="Load" HorizontalAlignment="Center" VerticalAlignment="Center" />
|
||||
</local:MyCard>
|
||||
<local:MyCard x:Name="CardSelect" Visibility="Collapsed" Opacity="0"
|
||||
HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="25,25,25,0" UseAnimation="False" HasMouseAnimation="False">
|
||||
HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="25,25,25,0" UseAnimation="False">
|
||||
<local:MyCard.RenderTransform>
|
||||
<TranslateTransform x:Name="TransSelect" Y="-10" />
|
||||
</local:MyCard.RenderTransform>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
AniControlEnabled -= 1
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoad Then Exit Sub
|
||||
If IsLoad Then Return
|
||||
IsLoad = True
|
||||
|
||||
'调整按钮边距(这玩意儿没法从 XAML 改)
|
||||
@@ -89,7 +89,7 @@
|
||||
Else
|
||||
PanEmpty.Visibility = Visibility.Visible
|
||||
PanBack.Visibility = Visibility.Collapsed
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'修改缓存
|
||||
ModItems.Clear()
|
||||
@@ -154,7 +154,7 @@
|
||||
''' 刷新整个 UI。
|
||||
''' </summary>
|
||||
Public Sub RefreshUI()
|
||||
If PanList Is Nothing Then Exit Sub
|
||||
If PanList Is Nothing Then Return
|
||||
Dim ShowingMods = If(IsSearching, SearchResult, If(McModLoader.Output, New List(Of McMod))).Where(Function(m) CanPassFilter(m)).ToList
|
||||
'重新列出列表
|
||||
AniControlEnabled += 1
|
||||
@@ -584,7 +584,7 @@ Install:
|
||||
If MyMsgBox($"新版本 Mod 可能不兼容旧存档或者其他 Mod,这可能导致游戏崩溃,甚至永久损坏存档!{vbCrLf}如果你在游玩整合包,请千万不要自行更新 Mod!{vbCrLf}{vbCrLf}在更新前,请先备份存档,并检查 Mod 的更新日志。{vbCrLf}如果更新后出现问题,你也可以在回收站找回更新前的 Mod。", "Mod 更新警告", "我已了解风险,继续更新", "取消", IsWarn:=True) = 1 Then
|
||||
Setup.Set("HintUpdateMod", True)
|
||||
Else
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
End If
|
||||
Try
|
||||
@@ -676,7 +676,7 @@ Install:
|
||||
Case LoadState.Aborted
|
||||
Hint("Mod 更新已中止!", HintType.Info)
|
||||
Case Else
|
||||
Exit Sub
|
||||
Return
|
||||
End Select
|
||||
Log($"[Mod] 已从正在进行 Mod 更新的文件夹列表移除:{PathMods}")
|
||||
UpdatingVersions.Remove(PathMods)
|
||||
@@ -759,7 +759,7 @@ Install:
|
||||
RefreshBars()
|
||||
End If
|
||||
'显示结果提示
|
||||
If Not IsSuccessful Then Exit Sub
|
||||
If Not IsSuccessful Then Return
|
||||
If IsShiftPressed Then
|
||||
If ModList.Count = 1 Then
|
||||
Hint($"已彻底删除 {ModList.Single.FileName}!", HintType.Finish)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
Reload()
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoad Then Exit Sub
|
||||
If IsLoad Then Return
|
||||
IsLoad = True
|
||||
PanDisplay.TriggerForceResize()
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
|
||||
'版本分类
|
||||
Private Sub ComboDisplayType_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboDisplayType.SelectionChanged
|
||||
If Not (IsLoad AndAlso AniControlEnabled = 0) Then Exit Sub
|
||||
If Not (IsLoad AndAlso AniControlEnabled = 0) Then Return
|
||||
If ComboDisplayType.SelectedIndex <> 1 Then
|
||||
'改为不隐藏
|
||||
Try
|
||||
@@ -75,7 +75,7 @@
|
||||
If Not Setup.Get("HintHide") Then
|
||||
If MyMsgBox("确认要从版本列表中隐藏该版本吗?隐藏该版本后,它将不再出现于 PCL 显示的版本列表中。" & vbCrLf & "此后,在版本列表页面按下 F11 才可以查看被隐藏的版本。", "隐藏版本提示",, "取消") <> 1 Then
|
||||
ComboDisplayType.SelectedIndex = 0
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
Setup.Set("HintHide", True)
|
||||
End If
|
||||
@@ -110,7 +110,7 @@
|
||||
Dim OldPath As String = PageVersionLeft.Version.Path
|
||||
'修改此部分的同时修改快速安装的版本名检测*
|
||||
Dim NewName As String = MyMsgBoxInput("重命名版本", "", OldName, New ObjectModel.Collection(Of Validate) From {New ValidateFolderName(PathMcFolder & "versions", IgnoreCase:=False)})
|
||||
If String.IsNullOrWhiteSpace(NewName) Then Exit Sub
|
||||
If String.IsNullOrWhiteSpace(NewName) Then Return
|
||||
Dim NewPath As String = PathMcFolder & "versions\" & NewName & "\"
|
||||
'获取临时中间名,以防止仅修改大小写的重命名失败
|
||||
Dim TempName As String = NewName & "_temp"
|
||||
@@ -128,6 +128,7 @@
|
||||
My.Computer.FileSystem.RenameDirectory(OldPath, TempName)
|
||||
My.Computer.FileSystem.RenameDirectory(TempPath, NewName)
|
||||
'清理 ini 缓存
|
||||
IniClearCache(PageVersionLeft.Version.PathIndie & "options.txt")
|
||||
IniClearCache(PageVersionLeft.Version.Path & "PCL\Setup.ini")
|
||||
'遍历重命名所有文件与文件夹
|
||||
For Each Entry As DirectoryInfo In New DirectoryInfo(NewPath).EnumerateDirectories
|
||||
@@ -180,17 +181,15 @@
|
||||
|
||||
'版本图标
|
||||
Private Sub ComboDisplayLogo_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboDisplayLogo.SelectionChanged
|
||||
If Not (IsLoad AndAlso AniControlEnabled = 0) Then Exit Sub
|
||||
If Not (IsLoad AndAlso AniControlEnabled = 0) Then Return
|
||||
'选择 自定义 时修改图片
|
||||
Try
|
||||
If ComboDisplayLogo.SelectedItem Is ItemDisplayLogoCustom Then
|
||||
Dim FileName As String = SelectFile("常用图片文件(*.png;*.jpg;*.gif)|*.png;*.jpg;*.gif", "选择图片")
|
||||
If FileName = "" Then
|
||||
Reload() '还原选项
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
File.Delete(PageVersionLeft.Version.Path & "PCL\Logo.png")
|
||||
Directory.CreateDirectory(PageVersionLeft.Version.Path & "PCL") '虽然不知道为啥,有时候真没这文件夹
|
||||
CopyFile(FileName, PageVersionLeft.Version.Path & "PCL\Logo.png")
|
||||
Else
|
||||
File.Delete(PageVersionLeft.Version.Path & "PCL\Logo.png")
|
||||
@@ -261,11 +260,11 @@
|
||||
Try
|
||||
'弹窗要求指定脚本的保存位置
|
||||
Dim SavePath As String = SelectSaveFile("选择脚本保存位置", "启动 " & PageVersionLeft.Version.Name & ".bat", "批处理文件(*.bat)|*.bat")
|
||||
If SavePath = "" Then Exit Sub
|
||||
If SavePath = "" Then Return
|
||||
'检查中断(等玩家选完弹窗指不定任务就结束了呢……)
|
||||
If McLaunchLoader.State = LoadState.Loading Then
|
||||
Hint("请在当前启动任务结束后再试!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'生成脚本
|
||||
If McLaunchStart(New McLaunchOptions With {.SaveBatch = SavePath, .Version = PageVersionLeft.Version}) Then
|
||||
@@ -286,13 +285,13 @@
|
||||
'忽略文件检查提示
|
||||
If ShouldIgnoreFileCheck(PageVersionLeft.Version) Then
|
||||
Hint("请先关闭 [版本设置 → 设置 → 高级启动选项 → 关闭文件校验],然后再尝试补全文件!", HintType.Info)
|
||||
Exit Sub
|
||||
Return
|
||||
End If
|
||||
'重复任务检查
|
||||
For Each OngoingLoader In LoaderTaskbar
|
||||
If OngoingLoader.Name <> PageVersionLeft.Version.Name & " 文件补全" Then Continue For
|
||||
Hint("正在处理中,请稍候!", HintType.Critical)
|
||||
Exit Sub
|
||||
Return
|
||||
Next
|
||||
'启动
|
||||
Dim Loader As New LoaderCombo(Of String)(PageVersionLeft.Version.Name & " 文件补全", DlClientFix(PageVersionLeft.Version, True, AssetsIndexExistsBehaviour.AlwaysDownload))
|
||||
@@ -336,7 +335,7 @@
|
||||
Hint("版本 " & PageVersionLeft.Version.Name & " 已删除到回收站!", HintType.Finish)
|
||||
End If
|
||||
Case 2
|
||||
Exit Sub
|
||||
Return
|
||||
End Select
|
||||
LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\")
|
||||
FrmMain.PageBack()
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
PanScroll="{Binding ElementName=PanBack}">
|
||||
<local:MyScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" x:Name="PanBack">
|
||||
<StackPanel x:Name="PanMain" Margin="25,25,25,25">
|
||||
<local:MyHint Text="这些设置只对该游戏版本生效,不影响其他版本。" IsWarn="False" Margin="0,0,0,15"
|
||||
<local:MyHint Text="这些设置只对该游戏版本生效,不影响其他版本。" Theme="Blue" Margin="0,0,0,15"
|
||||
CanClose="True" RelativeSetup="HintIndieSetup" />
|
||||
<local:MyCard x:Name="CardArgument" Margin="0,0,0,15" Title="启动选项">
|
||||
<StackPanel Margin="25,40,25,21">
|
||||
@@ -58,7 +58,7 @@
|
||||
</local:MyCard>
|
||||
<local:MyCard Margin="0,0,0,15" Title="游戏内存">
|
||||
<StackPanel Margin="25,40,25,15">
|
||||
<local:MyHint x:Name="LabRamWarn" Text="32 位 Java 最多只能分配 1 GB 内存,建议安装 64 位 Java!" IsWarn="True" Margin="0,0,0,12" />
|
||||
<local:MyHint x:Name="LabRamWarn" Text="32 位 Java 只能分配最多 1 GB 的内存。强烈建议换用 64 位的 Java!" Theme="Yellow" Margin="0,0,0,12" />
|
||||
<Grid Margin="0,0,0,3">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
AniControlEnabled -= 1
|
||||
|
||||
'非重复加载部分
|
||||
If IsLoaded Then Exit Sub
|
||||
If IsLoaded Then Return
|
||||
IsLoaded = True
|
||||
|
||||
'内存自动刷新
|
||||
@@ -132,7 +132,7 @@
|
||||
#Region "游戏内存"
|
||||
|
||||
Public Sub RamType(Type As Integer)
|
||||
If SliderRamCustom Is Nothing Then Exit Sub
|
||||
If SliderRamCustom Is Nothing Then Return
|
||||
SliderRamCustom.IsEnabled = (Type = 1)
|
||||
End Sub
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
''' 刷新 UI 上的 RAM 显示。
|
||||
''' </summary>
|
||||
Public Sub RefreshRam(ShowAnim As Boolean)
|
||||
If LabRamGame Is Nothing OrElse LabRamUsed Is Nothing OrElse FrmMain.PageCurrent <> FormMain.PageType.VersionSetup OrElse FrmVersionLeft.PageID <> FormMain.PageSubType.VersionSetup Then Exit Sub
|
||||
If LabRamGame Is Nothing OrElse LabRamUsed Is Nothing OrElse FrmMain.PageCurrent <> FormMain.PageType.VersionSetup OrElse FrmVersionLeft.PageID <> FormMain.PageSubType.VersionSetup Then Return
|
||||
'获取内存情况
|
||||
Dim RamGame As Double = Math.Round(GetRam(PageVersionLeft.Version), 5)
|
||||
Dim RamTotal As Double = Math.Round(My.Computer.Info.TotalPhysicalMemory / 1024 / 1024 / 1024, 1)
|
||||
@@ -358,19 +358,19 @@ PreFin:
|
||||
'全局
|
||||
Private ComboServerLoginLast As Integer
|
||||
Private Sub ComboServerLogin_Changed() Handles ComboServerLogin.SelectionChanged, TextServerNide.ValidatedTextChanged, TextServerAuthServer.ValidatedTextChanged, TextServerAuthRegister.ValidatedTextChanged
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
ServerLogin(ComboServerLogin.SelectedIndex)
|
||||
'检查是否输入正确,正确才触发设置改变
|
||||
If ComboServerLogin.SelectedIndex = 3 AndAlso Not TextServerNide.IsValidated Then Exit Sub
|
||||
If ComboServerLogin.SelectedIndex = 4 AndAlso Not TextServerAuthServer.IsValidated Then Exit Sub
|
||||
If ComboServerLogin.SelectedIndex = 3 AndAlso Not TextServerNide.IsValidated Then Return
|
||||
If ComboServerLogin.SelectedIndex = 4 AndAlso Not TextServerAuthServer.IsValidated Then Return
|
||||
'检查结果是否发生改变,未改变则不触发设置改变
|
||||
If ComboServerLoginLast = ComboServerLogin.SelectedIndex Then Exit Sub
|
||||
If ComboServerLoginLast = ComboServerLogin.SelectedIndex Then Return
|
||||
'触发
|
||||
ComboServerLoginLast = ComboServerLogin.SelectedIndex
|
||||
ComboChange(ComboServerLogin, Nothing)
|
||||
End Sub
|
||||
Public Sub ServerLogin(Type As Integer)
|
||||
If LabServerNide Is Nothing Then Exit Sub
|
||||
If LabServerNide Is Nothing Then Return
|
||||
LabServerNide.Visibility = If(Type = 3, Visibility.Visible, Visibility.Collapsed)
|
||||
TextServerNide.Visibility = If(Type = 3, Visibility.Visible, Visibility.Collapsed)
|
||||
PanServerNide.Visibility = If(Type = 3, Visibility.Visible, Visibility.Collapsed)
|
||||
@@ -393,7 +393,7 @@ PreFin:
|
||||
Private Sub BtnServerAuthLittle_Click(sender As Object, e As EventArgs) Handles BtnServerAuthLittle.Click
|
||||
If TextServerAuthServer.Text <> "" AndAlso TextServerAuthServer.Text <> "https://littleskin.cn/api/yggdrasil" AndAlso
|
||||
MyMsgBox("即将把第三方登录设置覆盖为 LittleSkin 登录。" & vbCrLf & "除非你是服主,或者服主要求你这样做,否则请不要继续。" & vbCrLf & vbCrLf & "是否确实需要覆盖当前设置?",
|
||||
"设置覆盖确认", "继续", "取消") = 2 Then Exit Sub
|
||||
"设置覆盖确认", "继续", "取消") = 2 Then Return
|
||||
TextServerAuthServer.Text = "https://littleskin.cn/api/yggdrasil"
|
||||
TextServerAuthRegister.Text = "https://littleskin.cn/auth/register"
|
||||
TextServerAuthName.Text = "LittleSkin 登录"
|
||||
@@ -405,7 +405,7 @@ PreFin:
|
||||
|
||||
'刷新 Java 下拉框显示
|
||||
Public Sub RefreshJavaComboBox()
|
||||
If ComboArgumentJava Is Nothing Then Exit Sub
|
||||
If ComboArgumentJava Is Nothing Then Return
|
||||
'初始化列表
|
||||
ComboArgumentJava.Items.Clear()
|
||||
ComboArgumentJava.Items.Add(New MyComboBoxItem With {.Content = "跟随全局设置", .Tag = "使用全局设置"})
|
||||
@@ -451,9 +451,9 @@ PreFin:
|
||||
|
||||
'下拉框选择更改
|
||||
Private Sub JavaSelectionUpdate() Handles ComboArgumentJava.SelectionChanged
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
'Java 不可用时也不清空,会导致刷新时找不到对象
|
||||
If ComboArgumentJava.SelectedItem Is Nothing OrElse ComboArgumentJava.SelectedItem.Tag Is Nothing Then Exit Sub
|
||||
If ComboArgumentJava.SelectedItem Is Nothing OrElse ComboArgumentJava.SelectedItem.Tag Is Nothing Then Return
|
||||
'设置新的 Java
|
||||
Dim SelectedJava = ComboArgumentJava.SelectedItem.Tag
|
||||
If "使用全局设置".Equals(SelectedJava) Then
|
||||
@@ -479,8 +479,8 @@ PreFin:
|
||||
'版本隔离警告
|
||||
Private IsReverting As Boolean = False
|
||||
Private Sub ComboArgumentIndieV2_SelectionChanged(sender As Object, e As SelectionChangedEventArgs) Handles ComboArgumentIndieV2.SelectionChanged
|
||||
If AniControlEnabled <> 0 Then Exit Sub
|
||||
If IsReverting Then Exit Sub
|
||||
If AniControlEnabled <> 0 Then Return
|
||||
If IsReverting Then Return
|
||||
If MyMsgBox("调整版本隔离后,你可能得把游戏存档、Mod 等文件手动迁移到新的游戏文件夹中。" & vbCrLf &
|
||||
"如果修改后发现存档消失,把这项设置改回来就能恢复。" & vbCrLf &
|
||||
"如果你不会迁移存档,不建议修改这项设置!",
|
||||
|
||||
Reference in New Issue
Block a user