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