From 037e6b19b46eea98b88664474c0963d44b99caa2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BE=99=E8=85=BE=E7=8C=AB=E8=B7=83?= <1043137532@qq.com>
Date: Sat, 7 Oct 2023 05:29:24 +0800
Subject: [PATCH] 2.6.9
---
Plain Craft Launcher 2/Controls/MyCard.vb | 2 +-
.../Controls/MyIconTextButton.xaml.vb | 2 +
.../Controls/MyLoading.xaml.vb | 5 +-
Plain Craft Launcher 2/FormMain.xaml.vb | 44 +++++-----
.../Modules/Base/ModBase.vb | 26 +++---
Plain Craft Launcher 2/Modules/Base/ModNet.vb | 18 ++--
.../Modules/Minecraft/ModComp.vb | 12 +--
.../Modules/Minecraft/ModCrash.vb | 6 +-
.../Modules/Minecraft/ModDownload.vb | 21 +----
.../Modules/Minecraft/ModJava.vb | 5 +-
.../Modules/Minecraft/ModLaunch.vb | 10 +--
.../Modules/Minecraft/ModMinecraft.vb | 20 ++---
.../Modules/Minecraft/ModMod.vb | 24 +++---
.../Modules/Minecraft/ModModpack.vb | 83 +++++++++++++++----
.../Modules/Minecraft/MyCompItem.xaml.vb | 12 +++
.../My Project/AssemblyInfo.vb | 4 +-
.../Pages/PageDownload/ModDownloadLib.vb | 6 +-
.../PageDownloadCompDetail.xaml.vb | 10 ++-
.../Pages/PageDownload/PageDownloadMod.xaml | 1 +
.../PageDownload/PageDownloadMod.xaml.vb | 10 +--
.../Pages/PageDownload/PageDownloadPack.xaml | 1 +
.../PageDownload/PageDownloadPack.xaml.vb | 9 +-
.../Pages/PageLaunch/PageLaunchLeft.xaml.vb | 83 +++++++++----------
.../Pages/PageLaunch/PageLaunchRight.xaml.vb | 8 +-
.../Pages/PageLaunch/PageLoginMs.xaml.vb | 5 +-
.../Pages/PageSetup/PageSetupLaunch.xaml | 4 +-
.../Pages/PageVersion/PageVersionMod.xaml.vb | 5 --
.../Pages/PageVersion/PageVersionSetup.xaml | 23 +++--
.../PageVersion/PageVersionSetup.xaml.vb | 14 +++-
29 files changed, 252 insertions(+), 221 deletions(-)
diff --git a/Plain Craft Launcher 2/Controls/MyCard.vb b/Plain Craft Launcher 2/Controls/MyCard.vb
index db2fe82..b1e32d0 100644
--- a/Plain Craft Launcher 2/Controls/MyCard.vb
+++ b/Plain Craft Launcher 2/Controls/MyCard.vb
@@ -109,7 +109,7 @@
Case 6
ForgeDownloadListItemPreload(Stack, Stack.Tag, AddressOf ForgeSave_Click, True)
Case 8
- CompFilesCardPreload(Stack, Stack.Tag, AddressOf FrmDownloadMod.ProjectClick)
+ CompFilesCardPreload(Stack, Stack.Tag)
End Select
'实现控件虚拟化
For Each Data As Object In Stack.Tag
diff --git a/Plain Craft Launcher 2/Controls/MyIconTextButton.xaml.vb b/Plain Craft Launcher 2/Controls/MyIconTextButton.xaml.vb
index 5fc4625..48a3f1b 100644
--- a/Plain Craft Launcher 2/Controls/MyIconTextButton.xaml.vb
+++ b/Plain Craft Launcher 2/Controls/MyIconTextButton.xaml.vb
@@ -56,6 +56,8 @@
RefreshColor()
End Set
End Property '颜色类别
+ Public Shared ReadOnly ColorTypeProperty As DependencyProperty =
+ DependencyProperty.Register("ColorType", GetType(ColorState), GetType(MyIconTextButton), New PropertyMetadata())
'点击事件
diff --git a/Plain Craft Launcher 2/Controls/MyLoading.xaml.vb b/Plain Craft Launcher 2/Controls/MyLoading.xaml.vb
index 8a595b6..0fab85b 100644
--- a/Plain Craft Launcher 2/Controls/MyLoading.xaml.vb
+++ b/Plain Craft Launcher 2/Controls/MyLoading.xaml.vb
@@ -78,7 +78,10 @@ Public Class MyLoading
Ex = Ex.InnerException
Loop
LabText.Text = StrTrim(Ex.Message)
- If LabText.Text.Contains("远程主机强迫关闭了一个现有的连接") OrElse LabText.Text.Contains("操作已超时") OrElse LabText.Text.Contains("操作超时") OrElse LabText.Text.Contains("服务器超时") OrElse LabText.Text.Contains("连接超时") Then LabText.Text = "网络环境不佳,请重试或尝试使用 VPN"
+ If {"远程主机强迫关闭了", "远程方已关闭传输流", "未能解析此远程名称", "由于目标计算机积极拒绝",
+ "操作已超时", "操作超时", "服务器超时", "连接超时"}.Any(Function(s) LabText.Text.Contains(s)) Then
+ LabText.Text = "网络环境不佳,请重试或尝试使用 VPN"
+ End If
End If
Else
LabText.Text = TextError
diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb
index 37908b8..6a8907e 100644
--- a/Plain Craft Launcher 2/FormMain.xaml.vb
+++ b/Plain Craft Launcher 2/FormMain.xaml.vb
@@ -133,6 +133,11 @@ Public Class FormMain
'3:BUG+ IMP* FEAT-
'2:BUG* IMP-
'1:BUG-
+ If LastVersion < 306 Then 'Snapshot 2.6.9
+ FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "为版本独立设置添加忽略 Java 兼容性警告选项"))
+ FeatureCount += 9
+ BugCount += 11
+ End If
If LastVersion < 305 Then 'Snapshot 2.6.8
FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复开始或结束游戏时可能报错的 Bug"))
FeatureCount += 20
@@ -840,7 +845,12 @@ Public Class FormMain
End Try
ElseIf e.Data.GetDataPresent(DataFormats.FileDrop) Then
'获取文件并检查
- Dim FilePathList As New List(Of String)(CType(e.Data.GetData(DataFormats.FileDrop), Array))
+ Dim FilePathRaw = e.Data.GetData(DataFormats.FileDrop)
+ If FilePathRaw Is Nothing Then '#2690
+ Hint("请将文件解压后再拖入!", HintType.Critical)
+ Exit Sub
+ End If
+ Dim FilePathList As New List(Of String)(CType(FilePathRaw, IEnumerable(Of String)))
e.Handled = True
If Directory.Exists(FilePathList.First) AndAlso Not File.Exists(FilePathList.First) Then
Hint("请拖入一个文件,而非文件夹!", HintType.Critical)
@@ -1108,28 +1118,18 @@ Install:
Case PageType.VersionSetup
Return "版本设置 - " & If(PageVersionLeft.Version Is Nothing, "未知版本", PageVersionLeft.Version.Name)
Case PageType.CompDetail
- If Stack.Additional Is Nothing Then
- Log("[Control] 资源工程详情页面未提供关键项", LogLevel.Feedback)
- Return "未知页面"
- Else
- Dim Project As CompProject = Stack.Additional
- Select Case Project.Type
- Case CompType.Mod
- Return "Mod 下载 - " & Project.TranslatedName
- Case CompType.ModPack
- Return "整合包下载 - " & Project.TranslatedName
- Case Else 'CompType.ResourcePack
- Return "资源包下载 - " & Project.TranslatedName
- End Select
- End If
+ Dim Project As CompProject = Stack.Additional(0)
+ Select Case Project.Type
+ Case CompType.Mod
+ Return "Mod 下载 - " & Project.TranslatedName
+ Case CompType.ModPack
+ Return "整合包下载 - " & Project.TranslatedName
+ Case Else 'CompType.ResourcePack
+ Return "资源包下载 - " & Project.TranslatedName
+ End Select
Case PageType.HelpDetail
- If Stack.Additional Is Nothing Then
- Log("[Control] 帮助详情页面未提供关键项", LogLevel.Msgbox)
- Return "未知页面"
- Else
- Dim Entry As HelpEntry = Stack.Additional(0)
- Return Entry.Title
- End If
+ Dim Entry As HelpEntry = Stack.Additional(0)
+ Return Entry.Title
Case Else
Return ""
End Select
diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb
index e19f368..0238490 100644
--- a/Plain Craft Launcher 2/Modules/Base/ModBase.vb
+++ b/Plain Craft Launcher 2/Modules/Base/ModBase.vb
@@ -1,8 +1,8 @@
Imports System.IO.Compression
-Imports System.Management
Imports System.Runtime.CompilerServices
Imports System.Security.Cryptography
Imports System.Security.Principal
+Imports System.Text.RegularExpressions
Imports System.Windows.Markup
Imports Newtonsoft.Json
@@ -11,12 +11,12 @@ Public Module ModBase
#Region "声明"
'下列版本信息由更新器自动修改
- Public Const VersionBaseName As String = "2.6.8" '不含分支前缀的显示用版本名
- Public Const VersionStandardCode As String = "2.6.8." & VersionBranchCode '标准格式的四段式版本号
+ Public Const VersionBaseName As String = "2.6.9" '不含分支前缀的显示用版本名
+ Public Const VersionStandardCode As String = "2.6.9." & VersionBranchCode '标准格式的四段式版本号
#If BETA Then
Public Const VersionCode As Integer = 304 'Release
#Else
- Public Const VersionCode As Integer = 305 'Snapshot
+ Public Const VersionCode As Integer = 306 'Snapshot
#End If
'自动生成的版本信息
Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName
@@ -1581,12 +1581,12 @@ Re:
'''
''' 搜索字符串中的所有正则匹配项。
'''
- Public Function RegexSearch(str As String, regex As String, Optional options As RegularExpressions.RegexOptions = RegularExpressions.RegexOptions.None) As List(Of String)
+ Public Function RegexSearch(str As String, regex As String, Optional options As RegexOptions = RegularExpressions.RegexOptions.None) As List(Of String)
Try
RegexSearch = New List(Of String)
- Dim RegexSearchRes = New RegularExpressions.Regex(regex, options).Matches(str)
+ Dim RegexSearchRes = New Regex(regex, options).Matches(str)
If RegexSearchRes Is Nothing Then Return RegexSearch
- For Each item As RegularExpressions.Match In RegexSearchRes
+ For Each item As Match In RegexSearchRes
RegexSearch.Add(item.Value)
Next
Catch ex As Exception
@@ -1597,7 +1597,7 @@ Re:
'''
''' 获取字符串中的第一个正则匹配项,若无匹配则返回 Nothing。
'''
- Public Function RegexSeek(str As String, regex As String, Optional options As RegularExpressions.RegexOptions = RegularExpressions.RegexOptions.None) As String
+ Public Function RegexSeek(str As String, regex As String, Optional options As RegexOptions = RegularExpressions.RegexOptions.None) As String
Try
Dim Result = RegularExpressions.Regex.Match(str, regex, options).Value
Return If(Result = "", Nothing, Result)
@@ -1609,7 +1609,7 @@ Re:
'''
''' 检查字符串是否匹配某正则模式。
'''
- Public Function RegexCheck(str As String, regex As String, Optional options As RegularExpressions.RegexOptions = RegularExpressions.RegexOptions.None) As Boolean
+ Public Function RegexCheck(str As String, regex As String, Optional options As RegexOptions = RegularExpressions.RegexOptions.None) As Boolean
Try
Return RegularExpressions.Regex.IsMatch(str, regex, options)
Catch ex As Exception
@@ -1620,7 +1620,13 @@ Re:
'''
''' 进行正则替换,会抛出错误。
'''
- Public Function RegexReplace(Input As String, Replacement As String, Regex As String, Optional options As RegularExpressions.RegexOptions = RegularExpressions.RegexOptions.None) As String
+ Public Function RegexReplace(Input As String, Replacement As String, Regex As String, Optional options As RegexOptions = RegularExpressions.RegexOptions.None) As String
+ Return RegularExpressions.Regex.Replace(Input, Regex, Replacement, options)
+ End Function
+ '''
+ ''' 对每个正则匹配分别进行替换,会抛出错误。
+ '''
+ Public Function RegexReplaceEach(Input As String, Replacement As MatchEvaluator, Regex As String, Optional options As RegexOptions = RegularExpressions.RegexOptions.None) As String
Return RegularExpressions.Regex.Replace(Input, Regex, Replacement, options)
End Function
diff --git a/Plain Craft Launcher 2/Modules/Base/ModNet.vb b/Plain Craft Launcher 2/Modules/Base/ModNet.vb
index a81b0c2..c65e748 100644
--- a/Plain Craft Launcher 2/Modules/Base/ModNet.vb
+++ b/Plain Craft Launcher 2/Modules/Base/ModNet.vb
@@ -330,7 +330,7 @@ Retry:
'''
''' 同时发送多个网络请求并要求返回内容。
'''
- Public Function NetRequestMuity(Url As String, Method As String, Data As Object, ContentType As String, Optional RequestCount As Integer = 4, Optional Headers As Dictionary(Of String, String) = Nothing)
+ Public Function NetRequestMulty(Url As String, Method As String, Data As Object, ContentType As String, Optional RequestCount As Integer = 4, Optional Headers As Dictionary(Of String, String) = Nothing)
Dim Threads As New List(Of Thread)
Dim RequestResult = Nothing
Dim RequestEx As Exception = Nothing
@@ -1278,14 +1278,6 @@ Wrong:
Try
Retry:
SyncLock LockChain
- ''大小检测
- 'If DownloadDone <> FileSize AndAlso Not IsUnknownSize Then
- ' For Each Th As NetThread In Threads
- ' Log("[Download] " & "File size detail: ")
- ' Log("[Download] " & Th.Uuid & "#, State " & GetStringFromEnum(CType(Th.State, [Enum])) & ", Range " & Th.DownloadStart & "~" & (Th.DownloadStart + Th.DownloadDone) & ", Left " & Th.DownloadUndone)
- ' Next
- ' Throw New Exception("文件大小应为 " & FileSize & " B,实际下载为 " & DownloadDone & " B。")
- 'End If
If ModeDebug Then Log("[Download] " & LocalName & ":正在合并文件")
'创建文件夹
If File.Exists(LocalPath) Then File.Delete(LocalPath)
@@ -1299,7 +1291,7 @@ Retry:
AddWriter.Write(SmailFileCache.ToArray)
AddWriter.Dispose() : AddWriter = Nothing
MergeFile.Dispose() : MergeFile = Nothing
- ElseIf Threads.DownloadDone = DownloadDone Then
+ ElseIf Threads.DownloadDone = DownloadDone AndAlso Threads.Temp IsNot Nothing Then
'仅有一个文件,直接复制
CopyFile(Threads.Temp, LocalPath)
Else
@@ -1307,7 +1299,7 @@ Retry:
MergeFile = New FileStream(LocalPath, FileMode.Create)
AddWriter = New BinaryWriter(MergeFile)
For Each Thread As NetThread In Threads
- If Thread.DownloadDone = 0 Then Continue For
+ If Thread.DownloadDone = 0 OrElse Thread.Temp Is Nothing Then Continue For
Using fs As New FileStream(Thread.Temp, FileMode.Open, FileAccess.Read, FileShare.Read)
Dim TempReader As New BinaryReader(fs)
AddWriter.Write(TempReader.ReadBytes(fs.Length))
@@ -1328,9 +1320,9 @@ Retry:
'检查文件
Dim CheckResult As String = Check?.Check(LocalPath)
If CheckResult IsNot Nothing Then
- Log("[Download] " & "File size detail of " & Uuid & "# :")
+ Log("[Download] " & Uuid & "# 的下载线程细节:")
For Each Th As NetThread In Threads
- Log("[Download] " & Th.Uuid & "#, State " & GetStringFromEnum(CType(Th.State, [Enum])) & ", Range " & Th.DownloadStart & "~" & (Th.DownloadStart + Th.DownloadDone) & ", Left " & Th.DownloadUndone)
+ Log("[Download] " & Th.Uuid & "#,状态 " & GetStringFromEnum(CType(Th.State, [Enum])) & ",字节范围 " & Th.DownloadStart & "~" & (Th.DownloadStart + Th.DownloadDone) & ",字节剩余 " & Th.DownloadUndone)
Next
Throw New Exception(CheckResult)
End If
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
index 409aee8..c4fb77a 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb
@@ -385,7 +385,7 @@
'''
''' 将当前工程信息实例化为控件。
'''
- Public Function ToCompItem(ShowMcVersionDesc As Boolean, ShowLoaderDesc As Boolean, Optional OnClick As MyCompItem.ClickEventHandler = Nothing) As MyCompItem
+ Public Function ToCompItem(ShowMcVersionDesc As Boolean, ShowLoaderDesc As Boolean) As MyCompItem
'获取版本描述
Dim GameVersionDescription As String
If GameVersions Is Nothing OrElse GameVersions.Count = 0 Then
@@ -567,12 +567,6 @@ NoExName:
Else
NewItem.Logo = LogoUrl
End If
- If OnClick IsNot Nothing Then
- AddHandler NewItem.Click, OnClick
- NewItem.HasAnimation = True
- Else
- NewItem.HasAnimation = False
- End If
Return NewItem
End Function
@@ -1377,7 +1371,7 @@ Retry:
'''
''' 预载包含大量 CompFile 的卡片,添加必要的元素和前置 Mod 列表。
'''
- Public Sub CompFilesCardPreload(Stack As StackPanel, Files As List(Of CompFile), OnClick As MyListItem.ClickEventHandler)
+ Public Sub CompFilesCardPreload(Stack As StackPanel, Files As List(Of CompFile))
'获取卡片对应的前置 ID
'如果为整合包就不会有 Dependencies 信息,所以不用管
Dim Deps As List(Of String) = Files.SelectMany(Function(f) f.Dependencies).Distinct.ToList()
@@ -1391,7 +1385,7 @@ Retry:
Stack.Children.Add(New TextBlock With {.Text = "前置 Mod", .FontSize = 14, .HorizontalAlignment = HorizontalAlignment.Left, .Margin = New Thickness(6, 2, 0, 5)})
'添加前置 Mod 列表
For Each Dep In Deps
- Dim Item = CompProjectCache(Dep).ToCompItem(False, False, AddressOf FrmDownloadMod.ProjectClick)
+ Dim Item = CompProjectCache(Dep).ToCompItem(False, False)
Stack.Children.Add(Item)
Next
'添加结尾间隔
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
index 03672de..9346c40 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModCrash.vb
@@ -385,6 +385,7 @@
'''
Public Sub Analyze(Optional Version As McVersion = Nothing)
Log("[Crash] 步骤 3:分析崩溃原因")
+ LogAll = (If(LogMc, "") & If(LogMcDebug, "") & If(LogHs, "") & If(LogCrash, ""))
'1. 精准日志匹配,中/高优先级
AnalyzeCrit1()
@@ -393,7 +394,6 @@
If CrashReasons.Count > 0 Then GoTo Done
'2. 堆栈分析
- LogAll = (If(LogMc, "") & If(LogMcDebug, "") & If(LogHs, "") & If(LogCrash, ""))
If LogAll.Contains("orge") OrElse LogAll.Contains("abric") OrElse LogAll.Contains("uilt") OrElse LogAll.Contains("iteloader") Then
Dim Keywords As New List(Of String)
'崩溃日志
@@ -868,9 +868,7 @@ NextStack:
If IsHandAnalyze Then
Return "很抱歉,PCL 无法确定错误原因。"
Else
- Return "很抱歉,你的游戏出现了一些问题……" & vbCrLf &
- "如果要寻求帮助,请向他人发送错误报告文件,而不是发送这个窗口的截图。" & vbCrLf &
- "你也可以查看错误报告,其中可能会有出错的原因。"
+ Return $"很抱歉,你的游戏出现了一些问题……{vbCrLf}如果要寻求帮助,请导出错误报告并发给他人,而不是发送这个窗口的截图。"
End If
End If
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
index 730783e..c321242 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb
@@ -19,14 +19,7 @@
Dim Checker As New FileChecker(MinSize:=1024, ActualSize:=If(Version.JsonObject("downloads")("client")("size"), -1), Hash:=Version.JsonObject("downloads")("client")("sha1"))
If ReturnNothingOnFileUseable Then
'是否跳过
- Dim IsSetupSkip As Boolean = Setup.Get("LaunchAdvanceAssets")
- Select Case Setup.Get("VersionAdvanceAssets", Version:=Version)
- Case 0 '使用全局设置
- Case 1 '开启
- IsSetupSkip = False
- Case 2 '关闭
- IsSetupSkip = True
- End Select
+ Dim IsSetupSkip As Boolean = ShouldIgnoreFileCheck(Version)
If IsSetupSkip AndAlso File.Exists(Version.Path & Version.Name & ".jar") Then Return Nothing '跳过校验
If Checker.Check(Version.Path & Version.Name & ".jar") Is Nothing Then Return Nothing '通过校验
End If
@@ -72,17 +65,7 @@
#End Region
#Region "下载资源文件"
- Dim IsSetupSkip As Boolean = Setup.Get("LaunchAdvanceAssets")
- Select Case Setup.Get("VersionAdvanceAssets", Version:=Version)
- Case 0
- '使用全局设置
- Case 1
- '开启
- IsSetupSkip = False
- Case 2
- '关闭
- IsSetupSkip = True
- End Select
+ Dim IsSetupSkip As Boolean = ShouldIgnoreFileCheck(Version)
If IsSetupSkip Then Log("[Download] 已跳过 Assets 下载")
If (Not SkipAssetsDownloadWhileSetupRequired) OrElse Not IsSetupSkip Then
Dim LoadersAssets As New List(Of LoaderBase)
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb
index 285ca46..8ddecd1 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModJava.vb
@@ -326,9 +326,9 @@ RetryGet:
Requirement = "需要 Java " & If(Left = Right, Left, Left & " ~ " & Right)
End If
Dim JavaCurrent As String = UserJava.VersionCode & If(ShowRevision, "." & UserJava.Version.MajorRevision & "." & UserJava.Version.MinorRevision, "")
- If Setup.Get("LaunchAdvanceJava") Then
+ If Setup.Get("LaunchAdvanceJava") OrElse (RelatedVersion IsNot Nothing AndAlso Setup.Get("VersionAdvanceJava", RelatedVersion)) Then
'直接跳过弹窗
- Hint("设置中指定了使用 Java " & JavaCurrent & ",但当前版本" & Requirement & ",这可能会导致游戏崩溃!", HintType.Critical)
+ Log("[Java] 设置中指定了使用 Java " & JavaCurrent & ",但当前版本" & Requirement & ",这可能会导致游戏崩溃!", LogLevel.Debug)
AllowedJavaList = New List(Of JavaEntry) From {UserJava}
Else
Select Case MyMsgBox("你在设置中手动指定了使用 Java " & JavaCurrent & ",但当前" & Requirement & "。" & vbCrLf &
@@ -677,6 +677,7 @@ Wait:
SearchEntry.Contains("mod") OrElse SearchEntry.Contains("高清") OrElse SearchEntry.Contains("download") OrElse
SearchEntry.Contains("launch") OrElse SearchEntry.Contains("程序") OrElse SearchEntry.Contains("path") OrElse
SearchEntry.Contains("version") OrElse SearchEntry.Contains("baka") OrElse SearchEntry.Contains("pcl") OrElse
+ SearchEntry.Contains("zulu") OrElse
SearchEntry.Contains("local") OrElse SearchEntry.Contains("packages") OrElse SearchEntry.Contains("4297127d64ec6") OrElse '官启文件夹
SearchEntry.Contains("国服") OrElse SearchEntry.Contains("网易") OrElse SearchEntry.Contains("ext") OrElse '网易 Java 文件夹名
SearchEntry.Contains("netease") OrElse SearchEntry.Contains("1.") OrElse SearchEntry.Contains("启动") Then
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
index a16140e..c3f8c66 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb
@@ -881,7 +881,7 @@ SystemBrowser:
End If
Dim Result As String
Try
- Result = NetRequestMuity("https://login.live.com/oauth20_token.srf", "POST", Request, "application/x-www-form-urlencoded", 1)
+ Result = NetRequestMulty("https://login.live.com/oauth20_token.srf", "POST", Request, "application/x-www-form-urlencoded", 1)
Catch ex As Exception
If ex.Message.Contains("must sign in again") OrElse ex.Message.Contains("invalid_grant") Then '#269
Return {"Relogin", ""}
@@ -908,7 +908,7 @@ SystemBrowser:
""RelyingParty"": ""http://auth.xboxlive.com"",
""TokenType"": ""JWT""
}"
- Dim Result As String = NetRequestMuity("https://user.auth.xboxlive.com/user/authenticate", "POST", Request, "application/json", 3)
+ Dim Result As String = NetRequestMulty("https://user.auth.xboxlive.com/user/authenticate", "POST", Request, "application/json", 3)
Dim ResultJson As JObject = GetJson(Result)
Dim XBLToken As String = ResultJson("Token").ToString
@@ -930,7 +930,7 @@ SystemBrowser:
}"
Dim Result As String
Try
- Result = NetRequestMuity("https://xsts.auth.xboxlive.com/xsts/authorize", "POST", Request, "application/json", 3)
+ Result = NetRequestMulty("https://xsts.auth.xboxlive.com/xsts/authorize", "POST", Request, "application/json", 3)
Catch ex As Net.WebException
If ex.Message.Contains("2148916233") Then
If MyMsgBox("该微软账号尚未购买 Minecraft Java 版,或尚未注册 Xbox 账户。" & vbCrLf &
@@ -967,7 +967,7 @@ SystemBrowser:
Dim Request As String = "{""identityToken"": ""XBL3.0 x=" & Tokens(1) & ";" & Tokens(0) & """}"
Dim Result As String
Try
- Result = NetRequestMuity("https://api.minecraftservices.com/authentication/login_with_xbox", "POST", Request, "application/json", 2)
+ Result = NetRequestMulty("https://api.minecraftservices.com/authentication/login_with_xbox", "POST", Request, "application/json", 2)
Catch ex As Net.WebException
Dim Message As String = GetExceptionSummary(ex)
If Message.Contains("(429)") Then
@@ -991,7 +991,7 @@ SystemBrowser:
Dim Result As String
Try
- Result = NetRequestMuity("https://api.minecraftservices.com/minecraft/profile", "GET", "", "application/json", 2, New Dictionary(Of String, String) From {{"Authorization", "Bearer " & AccessToken}})
+ Result = NetRequestMulty("https://api.minecraftservices.com/minecraft/profile", "GET", "", "application/json", 2, New Dictionary(Of String, String) From {{"Authorization", "Bearer " & AccessToken}})
Catch ex As Net.WebException
Dim Message As String = GetExceptionSummary(ex)
If Message.Contains("(429)") Then
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
index 201ed35..f3b9d73 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb
@@ -570,7 +570,7 @@ Recheck:
'''
Public ReadOnly Property IsOldJson As Boolean
Get
- Return JsonObject("minecraftArguments") IsNot Nothing
+ Return JsonObject("minecraftArguments") IsNot Nothing AndAlso JsonObject("minecraftArguments") <> ""
End Get
End Property
'''
@@ -713,7 +713,7 @@ Recheck:
ExitDataLoad:
'确定版本图标
Logo = ReadIni(Path & "PCL\Setup.ini", "Logo", "")
- If Logo = "" OrElse ReadIni(Path & "PCL\Setup.ini", "LogoCustom", "False") = "False" Then
+ If Logo = "" OrElse Not CType(ReadIni(Path & "PCL\Setup.ini", "LogoCustom", False), Boolean) Then
Select Case State
Case McVersionState.Original
Logo = "pack://application:,,,/images/Blocks/Grass.png"
@@ -1878,14 +1878,7 @@ NextVersion:
If CoreJarOnly Then Return Result
'是否跳过校验
- Dim IsSetupSkip As Boolean = Setup.Get("LaunchAdvanceAssets")
- Select Case Setup.Get("VersionAdvanceAssets", Version:=Version)
- Case 0 '使用全局设置
- Case 1 '开启校验
- IsSetupSkip = False
- Case 2 '关闭校验
- IsSetupSkip = True
- End Select
+ Dim IsSetupSkip As Boolean = ShouldIgnoreFileCheck(Version)
'Library 文件
Result.AddRange(McLibFixFromLibToken(McLibListGet(Version, False), JumpLoaderFolder:=Version.PathIndie & ".jumploader\", AllowUnsameFile:=IsSetupSkip))
@@ -2014,6 +2007,13 @@ NextVersion:
End If
End Function
+ '''
+ ''' 检查设置,是否应当忽略文件检查?
+ '''
+ Public Function ShouldIgnoreFileCheck(Version As McVersion)
+ Return Setup.Get("LaunchAdvanceAssets") OrElse Setup.Get("VersionAdvanceAssetsV2", Version:=Version) OrElse (Setup.Get("VersionAdvanceAssets", Version:=Version) = 2)
+ End Function
+
#End Region
#Region "资源文件(Assets)"
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModMod.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModMod.vb
index 27a31aa..4088f1b 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModMod.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModMod.vb
@@ -411,16 +411,20 @@ Public Module ModMod
ElseIf RawValue.StartsWith("'''") Then
'多行字符串
Dim ValueLines As New List(Of String) From {RawValue.TrimStart("'")}
- Do Until i >= Lines.Count - 1
- i += 1
- Dim ValueLine As String = Lines(i)
- If ValueLine.EndsWith("'''") Then
- ValueLines.Add(ValueLine.TrimEnd("'"))
- Exit Do
- Else
- ValueLines.Add(ValueLine)
- End If
- Loop
+ If ValueLines(0).EndsWith("'''") Then '把多行字符串按单行写法写的错误处理(#2732)
+ ValueLines(0) = ValueLines(0).TrimEnd("'")
+ Else
+ Do Until i >= Lines.Count - 1
+ i += 1
+ Dim ValueLine As String = Lines(i)
+ If ValueLine.EndsWith("'''") Then
+ ValueLines.Add(ValueLine.TrimEnd("'"))
+ Exit Do
+ Else
+ ValueLines.Add(ValueLine)
+ End If
+ Loop
+ End If
Value = Join(ValueLines, vbLf).Trim(vbLf).Replace(vbLf, vbCrLf)
ElseIf RawValue.ToLower = "true" OrElse RawValue.ToLower = "false" Then
'布尔型
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb
index 8711ed0..58a3bd2 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb
@@ -16,13 +16,13 @@ Public Module ModModpack
'''
Public Function ModpackInstall(File As String, Optional VersionName As String = Nothing, Optional ShowHint As Boolean = True, Optional Logo As String = Nothing) As Boolean
Log("[ModPack] 整合包安装请求:" & If(File, "null"))
- Dim Archive As Compression.ZipArchive = Nothing
+ Dim Archive As ZipArchive = Nothing
Dim ArchiveBaseFolder As String = ""
Try
'获取整合包种类与关键 Json
Dim PackType As Integer = -1
Try
- Archive = New Compression.ZipArchive(New FileStream(File, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
+ Archive = New ZipArchive(New FileStream(File, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
'从根目录判断整合包类型
If Archive.GetEntry("mcbbs.packmeta") IsNot Nothing Then PackType = 3 : Exit Try 'MCBBS 整合包(优先于 manifest.json 判断)
If Archive.GetEntry("modrinth.index.json") IsNot Nothing Then PackType = 4 : Exit Try 'Modrinth 整合包
@@ -234,30 +234,39 @@ Retry:
.ProgressWeight = New FileInfo(FileAddress).Length / 1024 / 1024 / 6, .Block = False}) '每 6M 需要 1s
End If
'获取 Mod 列表
- Dim ModFileList As New List(Of Integer)
+ Dim ModList As New List(Of Integer)
+ Dim ModOptionalList As New List(Of Integer)
For Each ModEntry In If(Json("files"), {})
If ModEntry("projectID") Is Nothing OrElse ModEntry("fileID") Is Nothing Then
Hint("某项 Mod 缺少必要信息,已跳过:" & ModEntry.ToString)
Continue For
End If
- If ModEntry("required") IsNot Nothing AndAlso Not ModEntry("required").ToObject(Of Boolean) Then Continue For
- ModFileList.Add(ModEntry("fileID"))
+ ModList.Add(ModEntry("fileID"))
+ If ModEntry("required") IsNot Nothing AndAlso Not ModEntry("required").ToObject(Of Boolean) Then ModOptionalList.Add(ModEntry("fileID"))
Next
- If ModFileList.Count > 0 Then
+ If ModList.Count > 0 Then
'获取 Mod 下载信息
InstallLoaders.Add(New LoaderTask(Of Integer, JArray)("获取 Mod 下载信息",
Sub(Task As LoaderTask(Of Integer, JArray))
- Task.Output = GetJson(NetRequestRetry("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModFileList, ",") & "]}", "application/json"))("data")
+ Task.Output = GetJson(NetRequestRetry("https://api.curseforge.com/v1/mods/files", "POST", "{""fileIds"": [" & Join(ModList, ",") & "]}", "application/json"))("data")
'如果文件已被删除,则 API 会跳过那一项
- If ModFileList.Count > Task.Output.Count Then Throw New Exception("整合包所需要的部分 Mod 版本已被 Mod 作者删除,因此无法完成整合包安装,请联系整合包作者更新整合包中的 Mod 版本")
- End Sub) With {.ProgressWeight = ModFileList.Count / 10}) '每 10 Mod 需要 1s
+ If ModList.Count > Task.Output.Count Then Throw New Exception("整合包所需要的部分 Mod 版本已被 Mod 作者删除,因此无法完成整合包安装,请联系整合包作者更新整合包中的 Mod 版本")
+ End Sub) With {.ProgressWeight = ModList.Count / 10}) '每 10 Mod 需要 1s
'构造 NetFile
InstallLoaders.Add(New LoaderTask(Of JArray, List(Of NetFile))("构造 Mod 下载信息",
Sub(Task As LoaderTask(Of JArray, List(Of NetFile)))
Dim FileList As New Dictionary(Of Integer, NetFile)
For Each ModJson In Task.Input
+ Dim Id As Integer = ModJson("id").ToObject(Of Integer)
'跳过重复的 Mod(疑似 CurseForge Bug)
- If FileList.ContainsKey(ModJson("id").ToObject(Of Integer)) Then Continue For
+ If FileList.ContainsKey(Id) Then Continue For
+ '可选 Mod 提示
+ If ModOptionalList.Contains(Id) Then
+ If MyMsgBox("是否要下载整合包中的可选文件 " & ModJson("displayName").ToString & "?",
+ "下载可选文件", "是", "否") = 2 Then
+ Continue For
+ End If
+ End If
'建立 CompFile
Dim File As New CompFile(ModJson, CompType.Mod)
If Not File.Available Then Continue For
@@ -273,14 +282,13 @@ Retry:
IsResourcePack = False
End If
'实际的添加
- FileList.Add(ModJson("id"),
- File.ToNetFile($"{PathMcFolder}versions\{VersionName}\{If(IsResourcePack, "resourcepacks", "mods")}\"))
- Task.Progress += 1 / (1 + ModFileList.Count)
+ FileList.Add(Id, File.ToNetFile($"{PathMcFolder}versions\{VersionName}\{If(IsResourcePack, "resourcepacks", "mods")}\"))
+ Task.Progress += 1 / (1 + ModList.Count)
Next
Task.Output = FileList.Values.ToList
- End Sub) With {.ProgressWeight = ModFileList.Count / 200, .Show = False}) '每 200 Mod 需要 1s
+ End Sub) With {.ProgressWeight = ModList.Count / 200, .Show = False}) '每 200 Mod 需要 1s
'下载 Mod 文件
- InstallLoaders.Add(New LoaderDownload("下载 Mod", New List(Of NetFile)) With {.ProgressWeight = ModFileList.Count * 1.5}) '每个 Mod 需要 1.5s
+ InstallLoaders.Add(New LoaderDownload("下载 Mod", New List(Of NetFile)) With {.ProgressWeight = ModList.Count * 1.5}) '每个 Mod 需要 1.5s
End If
'构造加载器
@@ -618,8 +626,9 @@ Retry:
If Validate.Validate(PackName) <> "" Then PackName = ""
Dim VersionName As String = MyMsgBoxInput("输入版本名称", "", PackName, New ObjectModel.Collection(Of Validate) From {Validate})
If VersionName Is Nothing Then Exit Sub
- '解压与配置文件
- Dim InstallTemp As String = PathTemp & "PackInstall\" & RandomInteger(0, 100000) & "\"
+ '解压、配置设置文件
+ Dim InstallTemp As String = $"{PathTemp}PackInstall\{RandomInteger(0, 100000)}\"
+ Dim SetupFile As String = $"{PathMcFolder}versions\{VersionName}\PCL\Setup.ini"
Dim InstallLoaders As New List(Of LoaderBase)
InstallLoaders.Add(New LoaderTask(Of String, Integer)("解压整合包文件",
Sub(Task As LoaderTask(Of String, Integer))
@@ -633,7 +642,45 @@ Retry:
End If
Task.Progress = 0.9
'开启版本隔离
- WriteIni(PathMcFolder & "versions\" & VersionName & "\PCL\Setup.ini", "VersionArgumentIndie", 1)
+ WriteIni(SetupFile, "VersionArgumentIndie", 1)
+ '读取 MMC 设置文件(#2655)
+ Try
+ Dim MMCSetupFile As String = InstallTemp & ArchiveBaseFolder & "instance.cfg"
+ If File.Exists(MMCSetupFile) Then
+ '将其中的等号替换为冒号,以符合 ini 文件格式
+ WriteFile(MMCSetupFile, ReadFile(MMCSetupFile).Replace("=", ":"))
+ If ReadIni(MMCSetupFile, "OverrideCommands", False) Then
+ Dim PreLaunchCommand As String = ReadIni(MMCSetupFile, "PreLaunchCommand")
+ If PreLaunchCommand <> "" Then
+ PreLaunchCommand = PreLaunchCommand.Replace("\""", """").
+ Replace("$INST_JAVA", "{java}javaw.exe").
+ Replace("$INST_MC_DIR\", "{minecraft}").Replace("$INST_MC_DIR", "{minecraft}").
+ Replace("$INST_DIR\", "{verpath}").Replace("$INST_DIR", "{verpath}").
+ Replace("$INST_ID", "{name}").Replace("$INST_NAME", "{name}")
+ WriteIni(SetupFile, "VersionAdvanceRun", PreLaunchCommand)
+ Log("[ModPack] 迁移 MultiMC 版本独立设置:启动前执行命令:" & PreLaunchCommand)
+ End If
+ End If
+ If ReadIni(MMCSetupFile, "JoinServerOnLaunch", False) Then
+ Dim ServerAddress As String = ReadIni(MMCSetupFile, "JoinServerOnLaunchAddress").Replace("\""", """")
+ WriteIni(SetupFile, "VersionServerEnter", ServerAddress)
+ Log("[ModPack] 迁移 MultiMC 版本独立设置:自动进入服务器:" & ServerAddress)
+ End If
+ If ReadIni(MMCSetupFile, "IgnoreJavaCompatibility", False) Then
+ WriteIni(SetupFile, "VersionAdvanceJava", True)
+ Log("[ModPack] 迁移 MultiMC 版本独立设置:忽略 Java 兼容性警告")
+ End If
+ Dim Logo As String = ReadIni(MMCSetupFile, "iconKey", "")
+ If Logo <> "" AndAlso File.Exists($"{InstallTemp}{ArchiveBaseFolder}{Logo}.png") Then
+ WriteIni(SetupFile, "LogoCustom", True)
+ WriteIni(SetupFile, "Logo", "PCL\Logo.png")
+ CopyFile($"{InstallTemp}{ArchiveBaseFolder}{Logo}.png", $"{PathMcFolder}versions\{VersionName}\PCL\Logo.png")
+ Log($"[ModPack] 迁移 MultiMC 版本独立设置:版本图标({Logo}.png)")
+ End If
+ End If
+ Catch ex As Exception
+ Log(ex, $"读取 MMC 配置文件失败({InstallTemp}{ArchiveBaseFolder}instance.cfg)")
+ End Try
End Sub) With {.ProgressWeight = New FileInfo(FileAddress).Length / 1024 / 1024 / 6, .Block = False}) '每 6M 需要 1s
'构造版本安装请求
If PackJson("components") Is Nothing Then
diff --git a/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml.vb b/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml.vb
index e550361..fafe4e2 100644
--- a/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml.vb
+++ b/Plain Craft Launcher 2/Modules/Minecraft/MyCompItem.xaml.vb
@@ -94,6 +94,18 @@ RetryStart:
Log("[Control] 按下资源工程列表项:" & LabTitle.Text)
End If
End Sub
+ Private Sub ProjectClick(sender As MyCompItem, e As EventArgs) Handles Me.Click
+ '记录当前展开的卡片标题(#2712)
+ Dim Titles As New List(Of String)
+ If FrmMain.PageCurrent.Page = FormMain.PageType.CompDetail Then
+ For Each Card As MyCard In FrmDownloadCompDetail.PanMain.Children
+ If Card.Title <> "" AndAlso Not Card.IsSwaped Then Titles.Add(Card.Title)
+ Next
+ Log("[Comp] 记录当前已展开的卡片:" & String.Join("、", Titles))
+ FrmMain.PageCurrent.Additional(1) = Titles
+ End If
+ FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CompDetail, .Additional = {sender.Tag, New List(Of String)}})
+ End Sub
'鼠标点击判定
Private IsMouseDown As Boolean = False
diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
index 91a059b..c5d9fe3 100644
--- a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
+++ b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb
@@ -51,6 +51,6 @@ Imports System.Runtime.InteropServices
' 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
' 方法是按如下所示使用“*”
-
-
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
index ffeb4bc..0a09917 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb
@@ -1988,9 +1988,9 @@ Retry:
If Directory.Exists(TempMcFolder) Then DeleteDirectory(TempMcFolder)
Dim OptiFineFolder As String = Nothing
If Request.OptiFineVersion IsNot Nothing Then
- If Request.OptiFineVersion.Contains("_HD_U") Then Request.OptiFineVersion = "HD_U_" & Request.OptiFineVersion.Split("_HD_U").Last '#735
+ If Request.OptiFineVersion.Contains("_HD_U_") Then Request.OptiFineVersion = "HD_U_" & Request.OptiFineVersion.Split("_HD_U_").Last '#735
Request.OptiFineEntry = New DlOptiFineListEntry With {
- .NameDisplay = Request.MinecraftName & " " & Request.OptiFineVersion.Replace("HD_U_", "").Replace("_", ""),
+ .NameDisplay = Request.MinecraftName & " " & Request.OptiFineVersion.Replace("HD_U_", "").Replace("_", "").Replace("pre", " pre"),
.Inherit = Request.MinecraftName,
.IsPreview = Request.OptiFineVersion.ToLower.Contains("pre"),
.NameVersion = Request.MinecraftName & "-OptiFine_" & Request.OptiFineVersion,
@@ -2214,7 +2214,7 @@ Retry:
OutputJson.Merge(FabricJson)
End If
'修改
- If RealArguments IsNot Nothing Then OutputJson("minecraftArguments") = RealArguments
+ If RealArguments IsNot Nothing AndAlso RealArguments.Replace(" ", "") <> "" Then OutputJson("minecraftArguments") = RealArguments
OutputJson.Remove("_comment_")
OutputJson.Remove("inheritsFrom")
OutputJson.Remove("jar")
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
index d8b55dd..d74926e 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadCompDetail.xaml.vb
@@ -9,7 +9,7 @@
'初始化加载器信息
Private Sub PageDownloadCompDetail_Inited(sender As Object, e As EventArgs) Handles Me.Initialized
- Project = FrmMain.PageCurrent.Additional
+ Project = FrmMain.PageCurrent.Additional(0)
PageLoaderInit(Load, PanLoad, PanMain, CardIntro, CompFileLoader, AddressOf Load_OnFinish)
End Sub
'自动重试
@@ -40,7 +40,7 @@
End Class
Private Sub Load_OnFinish()
'获取目标版本与 Mod 加载器
- Dim TargetVersion As String = ""
+ Dim TargetVersion As String
Select Case Project.Type
Case CompType.Mod
TargetVersion = If(PageDownloadMod.Loader.Input.GameVersion, "")
@@ -102,7 +102,7 @@
NewCard.SwapControl = NewStack
PanMain.Children.Add(NewCard)
'确定卡片是否展开
- If Pair.Key = TargetCardName Then
+ If Pair.Key = TargetCardName OrElse CType(FrmMain.PageCurrent.Additional(1), List(Of String)).Contains(NewCard.Title) Then
MyCard.StackInstall(NewStack, If(Project.Type = CompType.ModPack, 9, 8), Pair.Key) 'FUTURE: Res
Else
NewCard.IsSwaped = True
@@ -128,7 +128,7 @@
Private IsFirstInit As Boolean = True
Public Sub Init() Handles Me.PageEnter
AniControlEnabled += 1
- Project = FrmMain.PageCurrent.Additional
+ Project = FrmMain.PageCurrent.Additional(0)
PanBack.ScrollToHome()
'重启加载器
@@ -142,6 +142,8 @@
'放置当前工程
If CompItem IsNot Nothing Then PanIntro.Children.Remove(CompItem)
CompItem = Project.ToCompItem(True, True)
+ CompItem.IsHitTestVisible = False
+ CompItem.HasAnimation = False
CompItem.Margin = New Thickness(-7, -7, 0, 8)
PanIntro.Children.Insert(0, CompItem)
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
index a19572d..f42b739 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml
@@ -33,6 +33,7 @@
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb
index 8072564..02872ae 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadMod.xaml.vb
@@ -32,9 +32,7 @@
'列表项
PanProjects.Children.Clear()
For i = Math.Min(Page * PageSize, Storage.Results.Count - 1) To Math.Min((Page + 1) * PageSize - 1, Storage.Results.Count - 1)
- PanProjects.Children.Add(
- Storage.Results(i).ToCompItem(Loader.Input.GameVersion Is Nothing,
- Loader.Input.ModLoader = CompModLoaderType.Any, AddressOf ProjectClick))
+ PanProjects.Children.Add(Storage.Results(i).ToCompItem(Loader.Input.GameVersion Is Nothing, Loader.Input.ModLoader = CompModLoaderType.Any))
Next
'页码
CardPages.Visibility = If(Storage.Results.Count > 40 OrElse
@@ -68,12 +66,6 @@
End Select
End Sub
- '进入详情页面
-
- Public Sub ProjectClick(sender As MyCompItem, e As EventArgs)
- FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CompDetail, .Additional = sender.Tag})
- End Sub
-
'切换页码
Private Sub BtnPageFirst_Click(sender As Object, e As RoutedEventArgs) Handles BtnPageFirst.Click
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
index aaa688c..db1460b 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml
@@ -32,6 +32,7 @@
+
diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb
index 9d864c1..bb3eb66 100644
--- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadPack.xaml.vb
@@ -31,8 +31,7 @@
'列表项
PanProjects.Children.Clear()
For i = Math.Min(Page * PageSize, Storage.Results.Count - 1) To Math.Min((Page + 1) * PageSize - 1, Storage.Results.Count - 1)
- PanProjects.Children.Add(
- Storage.Results(i).ToCompItem(Loader.Input.GameVersion Is Nothing, True, AddressOf ProjectClick))
+ PanProjects.Children.Add(Storage.Results(i).ToCompItem(Loader.Input.GameVersion Is Nothing, True))
Next
'页码
CardPages.Visibility = If(Storage.Results.Count > 40 OrElse
@@ -66,12 +65,6 @@
End Select
End Sub
- '进入详情页面
-
- Public Sub ProjectClick(sender As MyCompItem, e As EventArgs)
- FrmMain.PageChange(New FormMain.PageStackData With {.Page = FormMain.PageType.CompDetail, .Additional = sender.Tag})
- End Sub
-
'切换页码
Private Sub BtnPageFirst_Click(sender As Object, e As RoutedEventArgs) Handles BtnPageFirst.Click
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
index ce9c4a9..27219b8 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb
@@ -79,7 +79,45 @@
''' 切换至启动中页面。
'''
Public Sub PageChangeToLaunching()
- LaunchingPreload()
+ '修改登陆方式
+ Select Case Setup.Get("LoginType")
+ Case McLoginType.Legacy
+ If PageLinkHiper.HiperState = LoadState.Finished Then
+ LabLaunchingMethod.Text = "联机离线登录"
+ Else
+ LabLaunchingMethod.Text = "离线登录"
+ End If
+ Case McLoginType.Ms
+ LabLaunchingMethod.Text = "正版登录"
+ Case McLoginType.Nide
+ LabLaunchingMethod.Text = "统一通行证"
+ Case McLoginType.Auth
+ LabLaunchingMethod.Text = "Authlib-Injector"
+ End Select
+ '初始化页面
+ LabLaunchingName.Text = McVersionCurrent.Name
+ LabLaunchingStage.Text = "初始化"
+ LabLaunchingTitle.Text = If(McLaunchLoader.Input Is Nothing OrElse McLaunchLoader.Input.SaveBatch Is Nothing, "正在启动游戏", "正在导出启动脚本")
+ LabLaunchingProgress.Text = "0.00 %"
+ LabLaunchingProgress.Opacity = 1
+ LabLaunchingDownload.Visibility = Visibility.Visible
+ LabLaunchingProgressLeft.Opacity = 0.6
+ LabLaunchingDownload.Visibility = Visibility.Visible
+ LabLaunchingDownload.Text = "0 B/s"
+ LabLaunchingDownload.Opacity = 0
+ LabLaunchingDownload.Visibility = Visibility.Collapsed
+ LabLaunchingDownloadLeft.Opacity = 0
+ LabLaunchingDownloadLeft.Visibility = Visibility.Collapsed
+ ProgressLaunchingFinished.Width = New GridLength(0, GridUnitType.Star)
+ ProgressLaunchingUnfinished.Width = New GridLength(1, GridUnitType.Star)
+ PanLaunchingHint.Opacity = 0
+ PanLaunchingHint.Visibility = Visibility.Collapsed
+ PanLaunchingInfo.Width = Double.NaN '重置宽度改变动画
+ McLaunchProcess = Nothing
+ McLaunchWatcher = Nothing
+ '获取 “你知道吗” 提示
+ LabLaunchingHint.Text = PageOtherTest.GetRandomHint()
+ '初始化其他页面
PanInput.IsHitTestVisible = False
PanLaunching.IsHitTestVisible = False
LoadLaunching.State.LoadingState = MyLoading.MyLoadingState.Run
@@ -634,48 +672,6 @@ ExitRefresh:
PageVersionLeft.Version = McVersionCurrent
FrmMain.PageChange(FormMain.PageType.VersionSetup, 0)
End Sub
- '刷新 UI
- Public Sub LaunchingPreload()
- '修改登陆方式
- Select Case Setup.Get("LoginType")
- Case McLoginType.Legacy
- If PageLinkHiper.HiperState = LoadState.Finished Then
- LabLaunchingMethod.Text = "联机离线登录"
- Else
- LabLaunchingMethod.Text = "离线登录"
- End If
- Case McLoginType.Ms
- LabLaunchingMethod.Text = "正版登录"
- Case McLoginType.Nide
- LabLaunchingMethod.Text = "统一通行证"
- Case McLoginType.Auth
- LabLaunchingMethod.Text = "Authlib-Injector"
- End Select
- '初始化页面
- LabLaunchingName.Text = McVersionCurrent.Name
- LabLaunchingStage.Text = "初始化"
- LabLaunchingTitle.Text = If(McLaunchLoader.Input Is Nothing OrElse McLaunchLoader.Input.SaveBatch Is Nothing, "正在启动游戏", "正在导出启动脚本")
- LabLaunchingProgress.Text = "0.00 %"
- LabLaunchingProgress.Opacity = 1
- LabLaunchingDownload.Visibility = Visibility.Visible
- LabLaunchingProgressLeft.Opacity = 0.6
- LabLaunchingDownload.Visibility = Visibility.Visible
- LabLaunchingDownload.Text = "0 B/s"
- LabLaunchingDownload.Opacity = 0
- LabLaunchingDownload.Visibility = Visibility.Collapsed
- LabLaunchingDownloadLeft.Opacity = 0
- LabLaunchingDownloadLeft.Visibility = Visibility.Collapsed
- ProgressLaunchingFinished.Width = New GridLength(0, GridUnitType.Star)
- ProgressLaunchingUnfinished.Width = New GridLength(1, GridUnitType.Star)
- PanLaunchingHint.Opacity = 0
- PanLaunchingHint.Visibility = Visibility.Collapsed
- PanLaunchingInfo.Width = Double.NaN '重置宽度改变动画
- McLaunchProcess = Nothing
- McLaunchWatcher = Nothing
- '获取 “你知道吗” 提示
- LabLaunchingHint.Text = PageOtherTest.GetRandomHint()
- End Sub
- Private ShowProgress As Double = 0
'''
''' 每 0.2s 执行一次,刷新启动的数据 UI 显示。
'''
@@ -759,6 +755,7 @@ ExitRefresh:
Log(ex, "刷新启动信息失败", LogLevel.Feedback)
End Try
End Sub
+ Private ShowProgress As Double = 0
'尺寸改变动画
Private IsWidthAnimating As Boolean = False
Private ActualUsedWidth As Double
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
index 4e5388e..55e07e6 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchRight.xaml.vb
@@ -84,9 +84,13 @@ Download:
EventType=""刷新主页"" EventData=""/""
Logo=""M875.52 148.48C783.36 56.32 655.36 0 512 0 291.84 0 107.52 138.24 30.72 332.8l122.88 46.08C204.8 230.4 348.16 128 512 128c107.52 0 199.68 40.96 271.36 112.64L640 384h384V0L875.52 148.48zM512 896c-107.52 0-199.68-40.96-271.36-112.64L384 640H0v384l148.48-148.48C240.64 967.68 368.64 1024 512 1024c220.16 0 404.48-138.24 481.28-332.8L870.4 645.12C819.2 793.6 675.84 896 512 896z"" />
"
- Case 2 '新闻主页
+ Case 2 '新闻
Log("[Page] 主页预设:Minecraft 新闻")
- Url = "http://pcl2.mc-news.top"
+ Url = "http://pcl.mcnews.thestack.top"
+ GoTo Download
+ Case 3 '简单主页
+ Log("[Page] 主页预设:简单主页")
+ Url = "https://cdn.wearclub.online/PCL/Custom.xaml"
GoTo Download
End Select
End Select
diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb
index 2f812f5..670a77b 100644
--- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLoginMs.xaml.vb
@@ -103,9 +103,8 @@
End Sub
'账号迁移入口
Private Sub BtnMigration_Click(sender As Object, e As EventArgs) Handles BtnMigration.Click
- MyMsgBox("目前,你可以继续迁移你的账户,但其所属Minecraft游戏信息均已清空。" & vbCrLf & "在迁移过程中,你可能需要设置你的档案信息,此时请注意让年龄大于 18 岁,否则可能导致无法登录!",
- "迁移提示", "继续", ForceWait:=True)
- OpenWebsite("https://www.minecraft.net/zh-hans/account-security")
+ MyMsgBox($"请在接下来要打开的页面登录你的 Mojang 账号。{vbCrLf}在迁移时,你可能需要设置档案信息,请注意让年龄大于 18 岁,否则可能会导致无法登录!", "迁移提示", "继续", ForceWait:=True)
+ OpenWebsite("https://www.minecraft.net/zh-hans/login")
End Sub
End Class
diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
index 5187b5a..725db06 100644
--- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
+++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupLaunch.xaml
@@ -240,9 +240,9 @@
Text="等待命令执行完成后再继续启动" Margin="0,8,0,7" />
+ ToolTip="警告:强烈推荐在版本设置中关闭特定版本的警告,而不是在这里关闭所有版本的警告!
如果在设置中手动选择了与当前版本不兼容的 Java,则自动跳过兼容性警告弹窗,强制使用手动选择的 Java。" />
+ ToolTip="警告:强烈推荐在版本设置中关闭特定版本的校验,而不是在这里关闭所有版本的校验!
完全不更改 assets;不校验 libraries、第三方登录库与版本主 jar 文件是否被修改。
如果你没有修改相关文件,请勿勾选此项。" />
diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb
index b5bf4b4..106d83f 100644
--- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionMod.xaml.vb
@@ -75,11 +75,6 @@
Dim NewCard As New MyCard With {.Title = McModGetTitle(List), .Margin = New Thickness(0, 0, 0, 15)}
NewCard.Children.Add(PanItems)
PanList.Children.Add(NewCard)
- '显示提示
- If List.Count > 0 AndAlso Not Setup.Get("HintModDisable") Then
- Setup.Set("HintModDisable", True)
- Hint("直接点击某个 Mod 项即可将它禁用!")
- End If
Catch ex As Exception
Log(ex, "加载 Mod 列表 UI 失败", LogLevel.Feedback)
diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
index 1f4946c..25e3b41 100644
--- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
+++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml
@@ -188,29 +188,26 @@
-
-
+
-
-
-
-
-
-
-
-
+
-
+
+
+
+
diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
index 6a53849..f26b544 100644
--- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
+++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionSetup.xaml.vb
@@ -67,7 +67,13 @@
TextAdvanceGame.Text = Setup.Get("VersionAdvanceGame", Version:=PageVersionLeft.Version)
TextAdvanceRun.Text = Setup.Get("VersionAdvanceRun", Version:=PageVersionLeft.Version)
CheckAdvanceRunWait.Checked = Setup.Get("VersionAdvanceRunWait", Version:=PageVersionLeft.Version)
- ComboAdvanceAssets.SelectedIndex = Setup.Get("VersionAdvanceAssets", Version:=PageVersionLeft.Version)
+ If Setup.Get("VersionAdvanceAssets", Version:=PageVersionLeft.Version) = 2 Then
+ Log("[Setup] 已迁移老版本的关闭文件校验设置")
+ Setup.Reset("VersionAdvanceAssets", Version:=PageVersionLeft.Version)
+ Setup.Set("VersionAdvanceAssetsV2", True, Version:=PageVersionLeft.Version)
+ End If
+ CheckAdvanceAssetsV2.Checked = Setup.Get("VersionAdvanceAssetsV2", Version:=PageVersionLeft.Version)
+ CheckAdvanceJava.Checked = Setup.Get("VersionAdvanceJava", Version:=PageVersionLeft.Version)
Catch ex As Exception
Log(ex, "重载版本独立设置时出错", LogLevel.Feedback)
@@ -92,6 +98,8 @@
Setup.Reset("VersionAdvanceJvm", Version:=PageVersionLeft.Version)
Setup.Reset("VersionAdvanceGame", Version:=PageVersionLeft.Version)
Setup.Reset("VersionAdvanceAssets", Version:=PageVersionLeft.Version)
+ Setup.Reset("VersionAdvanceAssetsV2", Version:=PageVersionLeft.Version)
+ Setup.Reset("VersionAdvanceJava", Version:=PageVersionLeft.Version)
Setup.Reset("VersionAdvanceRun", Version:=PageVersionLeft.Version)
Setup.Reset("VersionAdvanceRunWait", Version:=PageVersionLeft.Version)
@@ -121,10 +129,10 @@
Private Shared Sub SliderChange(sender As MySlider, e As Object) Handles SliderRamCustom.Change
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Value, Version:=PageVersionLeft.Version)
End Sub
- Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndie.SelectionChanged, ComboAdvanceAssets.SelectionChanged
+ Private Shared Sub ComboChange(sender As MyComboBox, e As Object) Handles ComboArgumentIndie.SelectionChanged
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.SelectedIndex, Version:=PageVersionLeft.Version)
End Sub
- Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceRunWait.Change
+ Private Shared Sub CheckBoxChange(sender As MyCheckBox, e As Object) Handles CheckAdvanceRunWait.Change, CheckAdvanceAssetsV2.Change, CheckAdvanceJava.Change
If AniControlEnabled = 0 Then Setup.Set(sender.Tag, sender.Checked, Version:=PageVersionLeft.Version)
End Sub