From 8e3af89bd3721dc04480e5a2e85e3858be57559b Mon Sep 17 00:00:00 2001 From: youzi-2333 Date: Sat, 6 Jul 2024 22:34:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?:sparkles:=20=E5=AE=8C=E6=88=90=20#3066=20?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=AE=89=E8=A3=85=20modpack.zip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pages/PageLaunch/PageLaunchLeft.xaml.vb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb index c7da13c..777ed52 100644 --- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb @@ -57,6 +57,7 @@ Log("[Launch] 自动选择 Minecraft 版本:" & Version.Path) End If End If + RunInUi( Sub() McVersionCurrent = Version '绕这一圈是为了避免 McVersionCheck 触发第二次版本改变 @@ -72,6 +73,21 @@ If LoginType = McLoginType.Legacy OrElse LoginType = McLoginType.Ms Then CType(FindName("RadioLoginType" & LoginType), MyRadioButton).Checked = True RefreshPage(False, False) + '整合包安装 + If McVersionList.Count = 0 AndAlso File.Exists(Path & "modpack.zip") Then + If MyMsgBox("即将自动安装整合包,是否继续?", Button2:="取消") = 1 Then + If Not Directory.Exists(Path & ".minecraft\") Then + Directory.CreateDirectory(Path & ".minecraft\") + Directory.CreateDirectory(Path & ".minecraft\versions\") + Setup.Set("LaunchFolderSelect", "$.minecraft\") + McFolderLauncherProfilesJsonCreate(Path & ".minecraft\") + End If + McFolderListLoader.Start(IsForceRestart:=True) + + RunInNewThread(Sub() ModpackInstall(Path & "modpack.zip", ShowHint:=False), "Modpack Auto Install") + End If + End If + AniControlEnabled -= 1 End Sub From 5436c5ec8aeb3de1192cd5a53a53ff8d6f85da16 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: Thu, 11 Jul 2024 20:13:26 +0800 Subject: [PATCH 2/2] 2.8.2 --- Plain Craft Launcher 2/FormMain.xaml.vb | 14 +++++ .../Modules/Base/ModBase.vb | 37 +++++++++---- .../Modules/Minecraft/ModComp.vb | 18 +++---- .../Modules/Minecraft/ModDownload.vb | 18 +++++-- .../Modules/Minecraft/ModLaunch.vb | 4 +- .../Modules/Minecraft/ModModpack.vb | 2 +- Plain Craft Launcher 2/Modules/ModEvent.vb | 42 ++++++++------- .../My Project/AssemblyInfo.vb | 4 +- .../Pages/PageDownload/ModDownloadLib.vb | 46 ++-------------- .../PageDownload/PageDownloadInstall.xaml.vb | 2 +- .../Pages/PageLaunch/PageLaunchLeft.xaml.vb | 51 +++++++++--------- .../Pages/PageSetup/PageSetupUI.xaml.vb | 2 +- .../Plain Craft Launcher 2.vbproj | 10 ++-- Plain Craft Launcher 2/Resources/Custom.xaml | 4 +- Plain Craft Launcher 2/Resources/Help.zip | Bin 76876 -> 76889 bytes 15 files changed, 130 insertions(+), 124 deletions(-) diff --git a/Plain Craft Launcher 2/FormMain.xaml.vb b/Plain Craft Launcher 2/FormMain.xaml.vb index d1196f6..ae44e45 100644 --- a/Plain Craft Launcher 2/FormMain.xaml.vb +++ b/Plain Craft Launcher 2/FormMain.xaml.vb @@ -10,6 +10,12 @@ Public Class FormMain Dim FeatureList As New List(Of KeyValuePair(Of Integer, String)) '统计更新日志条目 #If BETA Then + If LastVersion < 330 Then 'Release 2.8.2 + FeatureList.Add(New KeyValuePair(Of Integer, String)(5, "NeoForge 兼容与自动安装")) + FeatureList.Add(New KeyValuePair(Of Integer, String)(3, "支持编译、运行 PCL 开源代码")) + FeatureCount += 15 + BugCount += 22 + End If If LastVersion < 326 Then 'Release 2.7.4 FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "会自动隐藏明显不可用的自动安装选项")) FeatureList.Add(New KeyValuePair(Of Integer, String)(2, "优化正版登录流程和 MC 性能")) @@ -115,6 +121,14 @@ Public Class FormMain '3:BUG+ IMP* FEAT- '2:BUG* IMP- '1:BUG- + If LastVersion < 329 Then 'Snapshot 2.8.2 + If LastVersion >= 327 Then + FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复无法安装 Beta 版 NeoForge 的整合包的 Bug")) + FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复自动安装无法选择部分 OptiFine 的 Bug")) + End If + FeatureCount += 4 + BugCount += 8 + End If If LastVersion < 328 Then 'Snapshot 2.8.1 If LastVersion = 327 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复无法安装 Forge 1.12.2- 的 Bug")) If LastVersion = 327 Then FeatureList.Add(New KeyValuePair(Of Integer, String)(1, "修复无法输入解锁码的 Bug")) diff --git a/Plain Craft Launcher 2/Modules/Base/ModBase.vb b/Plain Craft Launcher 2/Modules/Base/ModBase.vb index 22df84a..30cb7bd 100644 --- a/Plain Craft Launcher 2/Modules/Base/ModBase.vb +++ b/Plain Craft Launcher 2/Modules/Base/ModBase.vb @@ -11,12 +11,12 @@ Public Module ModBase #Region "声明" '下列版本信息由更新器自动修改 - Public Const VersionBaseName As String = "2.8.1" '不含分支前缀的显示用版本名 - Public Const VersionStandardCode As String = "2.8.1." & VersionBranchCode '标准格式的四段式版本号 + Public Const VersionBaseName As String = "2.8.2" '不含分支前缀的显示用版本名 + Public Const VersionStandardCode As String = "2.8.2." & VersionBranchCode '标准格式的四段式版本号 #If BETA Then - Public Const VersionCode As Integer = 326 'Release + Public Const VersionCode As Integer = 330 'Release #Else - Public Const VersionCode As Integer = 328 'Snapshot + Public Const VersionCode As Integer = 329 'Snapshot #End If '自动生成的版本信息 Public Const VersionDisplayName As String = VersionBranchName & " " & VersionBaseName @@ -86,7 +86,7 @@ Public Module ModBase ''' ''' 系统盘盘符,以 \ 结尾。例如 “C:\”。 ''' - Public OsDrive As String = Environment.GetLogicalDrives().First.ToUpper.First & ":\" + Public OsDrive As String = Environment.GetLogicalDrives().Where(Function(p) Directory.Exists(p)).First.ToUpper.First & ":\" '#3799 ''' ''' 程序的缓存文件夹路径,以 \ 结尾。 ''' @@ -1257,12 +1257,19 @@ Re: Dim DeletedCount As Integer = 0 Dim Temp As String() Temp = Directory.GetFiles(Path) - For Each str As String In Temp + For Each FilePath As String In Temp + Dim RetriedFile As Boolean = False +RetryFile: Try - File.Delete(str) + File.Delete(FilePath) DeletedCount += 1 Catch ex As Exception - If IgnoreIssue Then + If Not RetriedFile Then + RetriedFile = True + Log(ex, $"删除文件失败,将在 0.3s 后重试({FilePath})") + Thread.Sleep(300) + GoTo RetryFile + ElseIf IgnoreIssue Then Log(ex, "删除单个文件可忽略地失败") Else Throw @@ -1273,10 +1280,17 @@ Re: For Each str As String In Temp DeleteDirectory(str, IgnoreIssue) Next + Dim RetriedDir As Boolean = False +RetryDir: Try Directory.Delete(Path, True) Catch ex As Exception - If IgnoreIssue Then + If Not RetriedDir Then + RetriedDir = True + Log(ex, $"删除文件夹失败,将在 0.3s 后重试({Path})") + Thread.Sleep(300) + GoTo RetryDir + ElseIf IgnoreIssue Then Log(ex, "删除单个文件夹可忽略地失败") Else Throw @@ -1652,7 +1666,10 @@ Re: ''' 为字符串进行 XML 转义。 ''' Public Function EscapeXML(Str As String) As String - Return Str.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("'", "'").Replace("""", """).Replace(vbCrLf, " ") + If Str.StartsWithF("{") Then Str = "{}" & Str '#4187 + Return Str. + Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("'", "'"). + Replace("""", """).Replace(vbCrLf, " ") End Function '正则 diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb index 5d32043..44ce4d0 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModComp.vb @@ -629,19 +629,19 @@ NoSubtitle: If Id = Project.Id Then Return True '相同实例 '提取字符串中的字母和数字 Dim GetRaw = - Function(Data As String) As String - Dim Result As New StringBuilder() - For Each r As Char In Data.Where(Function(c) Char.IsLetterOrDigit(c)) - Result.Append(r) - Next - Return Result.ToString.ToLower - End Function + Function(Data As String) As String + Dim Result As New StringBuilder() + For Each r As Char In Data.Where(Function(c) Char.IsLetterOrDigit(c)) + Result.Append(r) + Next + Return Result.ToString.ToLower + End Function '来自不同的网站 If FromCurseForge = Project.FromCurseForge Then Return False 'Mod 加载器一致 - If ModLoaders.Count <> Project.ModLoaders.Count OrElse ModLoaders.Except(Project.ModLoaders).Count > 0 Then Return False + If ModLoaders.Count <> Project.ModLoaders.Count OrElse ModLoaders.Except(Project.ModLoaders).Any() Then Return False 'MC 版本一致 - If GameVersions.Count <> Project.GameVersions.Count OrElse GameVersions.Except(Project.GameVersions).Count > 0 Then Return False + If GameVersions.Count <> Project.GameVersions.Count OrElse GameVersions.Except(Project.GameVersions).Any() Then Return False 'MCMOD 翻译名 / 原名 / 描述文本 / Slug 的英文部分相同 If TranslatedName = Project.TranslatedName OrElse RawName = Project.RawName OrElse Description = Project.Description OrElse diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb index 1ded676..2398e57 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb @@ -8,9 +8,13 @@ ''' Public Function DlClientJarGet(Version As McVersion, ReturnNothingOnFileUseable As Boolean) As NetFile '获取底层继承版本 - Do While Not String.IsNullOrEmpty(Version.InheritVersion) - Version = New McVersion(Version.InheritVersion) - Loop + Try + Do While Not String.IsNullOrEmpty(Version.InheritVersion) + Version = New McVersion(Version.InheritVersion) + Loop + Catch ex As Exception + Log(ex, "获取底层继承版本失败") + End Try '检查 Json 是否标准 If Version.JsonObject("downloads") Is Nothing OrElse Version.JsonObject("downloads")("client") Is Nothing OrElse Version.JsonObject("downloads")("client")("url") Is Nothing Then Throw New Exception("底层版本 " & Version.Name & " 中无 jar 文件下载信息") @@ -610,7 +614,9 @@ Public Sub DlForgeVersionOfficialMain(Loader As LoaderTask(Of String, List(Of DlForgeVersionEntry))) Dim Result As String Try - Result = NetGetCodeByDownload("https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_" & Loader.Input & ".html", UseBrowserUserAgent:=True) + Result = NetGetCodeByDownload("https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_" & + Loader.Input.Replace("-", "_") & '兼容 Forge 1.7.10-pre4,#4057 + ".html", UseBrowserUserAgent:=True) Catch ex As Exception If GetExceptionSummary(ex).Contains("(404)") Then Throw New Exception("没有可用版本") @@ -679,7 +685,9 @@ ''' Forge 版本列表,BMCLAPI。 ''' Public Sub DlForgeVersionBmclapiMain(Loader As LoaderTask(Of String, List(Of DlForgeVersionEntry))) - Dim Json As JArray = NetGetCodeByRequestRetry("https://bmclapi2.bangbang93.com/forge/minecraft/" & Loader.Input, IsJson:=True) + Dim Json As JArray = NetGetCodeByRequestRetry("https://bmclapi2.bangbang93.com/forge/minecraft/" & + Loader.Input.Replace("-", "_"), '兼容 Forge 1.7.10-pre4,#4057 + IsJson:=True) Dim Versions As New List(Of DlForgeVersionEntry) Try Dim Recommended As String = McDownloadForgeRecommendedGet(Loader.Input) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb index 4d130d4..163f498 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModLaunch.vb @@ -1278,7 +1278,9 @@ SystemBrowser: Public Function ExtractJavaWrapper() As String Dim WrapperPath As String = GetJavaWrapperDir() & "\JavaWrapper.jar" SyncLock ExtractJavaWrapperLock '避免 OptiFine 和 Forge 安装时同时释放 Java Wrapper 导致冲突 - WriteFile(WrapperPath, GetResources("JavaWrapper")) + If Not WriteFile(WrapperPath, GetResources("JavaWrapper")) Then + Throw New FileNotFoundException("释放 Java Wrapper 失败") + End If End SyncLock Log("[Java] 已释放 Java Wrapper:" & WrapperPath) Return WrapperPath diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb index 12284ab..7dacc5d 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb @@ -25,6 +25,7 @@ Public Module ModModpack 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("mmc-pack.json") IsNot Nothing Then PackType = 2 : Exit Try 'MMC 整合包(优先于 manifest.json 判断,#4194) If Archive.GetEntry("modrinth.index.json") IsNot Nothing Then PackType = 4 : Exit Try 'Modrinth 整合包 If Archive.GetEntry("manifest.json") IsNot Nothing Then Dim Json As JObject = GetJson(ReadFile(Archive.GetEntry("manifest.json").Open, Encoding.UTF8)) @@ -35,7 +36,6 @@ Public Module ModModpack End If End If If Archive.GetEntry("modpack.json") IsNot Nothing Then PackType = 1 : Exit Try 'HMCL 整合包 - If Archive.GetEntry("mmc-pack.json") IsNot Nothing Then PackType = 2 : Exit Try 'MMC 整合包 '从一级目录判断整合包类型 For Each Entry In Archive.Entries Dim FullNames As String() = Entry.FullName.Split("/") diff --git a/Plain Craft Launcher 2/Modules/ModEvent.vb b/Plain Craft Launcher 2/Modules/ModEvent.vb index 9e3ed0f..e5282a9 100644 --- a/Plain Craft Launcher 2/Modules/ModEvent.vb +++ b/Plain Craft Launcher 2/Modules/ModEvent.vb @@ -21,26 +21,28 @@ OpenWebsite(Data(0)) Case "打开文件", "打开帮助" - RunInThread(Sub() - Try - '确认实际路径 - Dim ActualPaths = GetEventAbsoluteUrls(Data(0), Type) - Dim Location = ActualPaths(0), WorkingDir = ActualPaths(1) - '执行 - If Type = "打开文件" Then - Dim Info As New ProcessStartInfo With { - .Arguments = If(Data.Length >= 2, Data(1), ""), - .FileName = Location, - .WorkingDirectory = WorkingDir - } - Process.Start(Info) - Else '打开帮助 - PageOtherHelp.EnterHelpPage(Location) - End If - Catch ex As Exception - Log(ex, "执行打开类自定义事件失败", LogLevel.Msgbox) - End Try - End Sub) + RunInThread( + Sub() + Try + '确认实际路径 + Dim ActualPaths = GetEventAbsoluteUrls(Data(0), Type) + Dim Location = ActualPaths(0), WorkingDir = ActualPaths(1) + Log($"[Control] 打开类自定义事件实际路径:{Location},工作目录:{WorkingDir}") + '执行 + If Type = "打开文件" Then + Dim Info As New ProcessStartInfo With { + .Arguments = If(Data.Length >= 2, Data(1), ""), + .FileName = Location, + .WorkingDirectory = WorkingDir + } + Process.Start(Info) + Else '打开帮助 + PageOtherHelp.EnterHelpPage(Location) + End If + Catch ex As Exception + Log(ex, "执行打开类自定义事件失败", LogLevel.Msgbox) + End Try + End Sub) Case "启动游戏" If Data(0) = "\current" Then diff --git a/Plain Craft Launcher 2/My Project/AssemblyInfo.vb b/Plain Craft Launcher 2/My Project/AssemblyInfo.vb index 3c21a88..5a7874b 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 66c686c..866c3e1 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb @@ -316,46 +316,6 @@ Public Module ModDownloadLib #Region "OptiFine 下载" - Public Sub McDownloadOptiFine(DownloadInfo As DlOptiFineListEntry) - Try - Dim Id As String = DownloadInfo.NameVersion - Dim VersionFolder As String = PathMcFolder & "versions\" & Id & "\" - Dim IsNewVersion As Boolean = Val(DownloadInfo.Inherit.Split(".")(1)) >= 14 - Dim Target As String = If(IsNewVersion, - PathTemp & "Cache\Code\" & DownloadInfo.NameVersion & "_" & GetUuid(), - PathMcFolder & "libraries\optifine\OptiFine\" & DownloadInfo.NameFile.Replace("OptiFine_", "").Replace(".jar", "").Replace("preview_", "") & "\" & DownloadInfo.NameFile.Replace("OptiFine_", "OptiFine-").Replace("preview_", "")) - - '重复任务检查 - SyncLock LoaderTaskbarLock - For i = 0 To LoaderTaskbar.Count - 1 - If LoaderTaskbar(i).Name = "OptiFine " & DownloadInfo.NameDisplay & " 下载" Then - Hint("该版本正在下载中!", HintType.Critical) - Exit Sub - End If - Next - End SyncLock - - '已有版本检查 - If File.Exists(VersionFolder & Id & ".json") Then - If MyMsgBox("版本 " & Id & " 已存在,是否重新下载?" & vbCrLf & "这会覆盖版本的 json 和 jar 文件,但不会影响版本隔离的文件。", "版本已存在", "继续", "取消") = 1 Then - File.Delete(VersionFolder & Id & ".jar") - File.Delete(VersionFolder & Id & ".json") - Else - Exit Sub - End If - End If - - '启动 - Dim Loader As New LoaderCombo(Of String)("OptiFine " & DownloadInfo.NameDisplay & " 下载", McDownloadOptiFineLoader(DownloadInfo)) With {.OnStateChanged = AddressOf McInstallState} - Loader.Start(VersionFolder) - LoaderTaskbarAdd(Loader) - FrmMain.BtnExtraDownload.ShowRefresh() - FrmMain.BtnExtraDownload.Ribble() - - Catch ex As Exception - Log(ex, "开始 OptiFine 下载失败", LogLevel.Feedback) - End Try - End Sub Private Sub McDownloadOptiFineSave(DownloadInfo As DlOptiFineListEntry) Try Dim Id As String = DownloadInfo.NameVersion @@ -1282,9 +1242,11 @@ Retry: Else 'Forge Dim Forge As DlForgeVersionEntry = Info + Dim FileName As String = + $"{Forge.Inherit.Replace("-", "_")}-{Forge.FileVersion}/forge-{Forge.Inherit.Replace("-", "_")}-{Forge.FileVersion}-{Forge.Category}.{Forge.FileExtension}" Files.Add(New NetFile({ - $"https://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/{Forge.Inherit}-{Forge.FileVersion}/forge-{Forge.Inherit}-{Forge.FileVersion}-{Forge.Category}.{Forge.FileExtension}", - $"https://files.minecraftforge.net/maven/net/minecraftforge/forge/{Forge.Inherit}-{Forge.FileVersion}/forge-{Forge.Inherit}-{Forge.FileVersion}-{Forge.Category}.{Forge.FileExtension}" + $"https://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/{FileName}", + $"https://files.minecraftforge.net/maven/net/minecraftforge/forge/{FileName}" }, InstallerAddress, New FileChecker(MinSize:=64 * 1024, Hash:=Forge.Hash))) End If Task.Output = Files diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb index 9d05282..9cf83e2 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb @@ -724,7 +724,7 @@ Private Function IsOptiFineSuitForForge(OptiFine As DlOptiFineListEntry, Forge As DlForgeVersionEntry) If Forge.Inherit <> OptiFine.Inherit Then Return False '不是同一个大版本 If OptiFine.RequiredForgeVersion Is Nothing Then Return False '不兼容 Forge - If OptiFine.RequiredForgeVersion = "" Then Return True + If String.IsNullOrWhiteSpace(OptiFine.RequiredForgeVersion) Then Return True '#4183 If OptiFine.RequiredForgeVersion.Contains(".") Then 'XX.X.XXX Return VersionSortInteger(Forge.Version.ToString, OptiFine.RequiredForgeVersion) >= 0 Else 'XXXX diff --git a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb index 777ed52..60005b2 100644 --- a/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageLaunch/PageLaunchLeft.xaml.vb @@ -21,6 +21,19 @@ '加载版本 RunInNewThread( Sub() + ''自动整合包安装:准备 + 'Dim PackInstallPath As String = Nothing + 'If File.Exists(Path & "modpack.zip") Then PackInstallPath = Path & "modpack.zip" + 'If File.Exists(Path & "modpack.mrpack") Then PackInstallPath = Path & "modpack.mrpack" + 'If PackInstallPath IsNot Nothing Then + ' Log("[Launch] 需自动安装整合包:" & PackInstallPath, LogLevel.Debug) + ' If Not Directory.Exists(Path & ".minecraft\") Then + ' Directory.CreateDirectory(Path & ".minecraft\") + ' Directory.CreateDirectory(Path & ".minecraft\versions\") + ' McFolderLauncherProfilesJsonCreate(Path & ".minecraft\") + ' End If + ' Setup.Set("LaunchFolderSelect", "$.minecraft\") + 'End If '确认 Minecraft 文件夹存在 PathMcFolder = Setup.Get("LaunchFolderSelect").ToString.Replace("$", Path) If PathMcFolder = "" OrElse Not Directory.Exists(PathMcFolder) Then @@ -35,17 +48,21 @@ End If Log("[Launch] Minecraft 文件夹:" & PathMcFolder) If Setup.Get("SystemDebugDelay") Then Thread.Sleep(RandomInteger(500, 3000)) + ''自动整合包安装 + 'If PackInstallPath IsNot Nothing Then + ' If ModpackInstall(PackInstallPath) Then + ' Log("[Launch] 自动安装整合包成功:" & PackInstallPath) + ' File.Delete(PackInstallPath) + ' Else + ' Log("[Launch] 自动安装整合包失败:" & PackInstallPath) + ' End If + 'End If '确认 Minecraft 版本存在 Dim Selection As String = Setup.Get("LaunchVersionSelect") - Dim Version As McVersion - If Selection = "" Then - Version = Nothing - Else - Version = New McVersion(Selection) - End If - If IsNothing(Version) OrElse Not (Version.Path.StartsWith(PathMcFolder) AndAlso Version.Check) Then + Dim Version As McVersion = If(Selection = "", Nothing, New McVersion(Selection)) + If Version Is Nothing OrElse Not (Version.Path.StartsWith(PathMcFolder) AndAlso Version.Check) Then '无效的版本 - Log("[Launch] Minecraft 版本无效" & If(IsNothing(Version), ",没有有效版本", ":" & Version.Path), If(IsNothing(Version), LogLevel.Normal, LogLevel.Debug)) + Log("[Launch] Minecraft 版本无效" & If(Version Is Nothing, ",没有有效版本", ":" & Version.Path), If(IsNothing(Version), LogLevel.Normal, LogLevel.Debug)) If Not McVersionListLoader.State = LoadState.Finished Then LoaderFolderRun(McVersionListLoader, PathMcFolder, LoaderFolderRunType.ForceRun, MaxDepth:=1, ExtraPath:="versions\", WaitForExit:=True) If Not McVersionList.Any() OrElse McVersionList.First.Value(0).Logo.Contains("RedstoneBlock") Then Version = Nothing @@ -57,7 +74,6 @@ Log("[Launch] 自动选择 Minecraft 版本:" & Version.Path) End If End If - RunInUi( Sub() McVersionCurrent = Version '绕这一圈是为了避免 McVersionCheck 触发第二次版本改变 @@ -73,21 +89,6 @@ If LoginType = McLoginType.Legacy OrElse LoginType = McLoginType.Ms Then CType(FindName("RadioLoginType" & LoginType), MyRadioButton).Checked = True RefreshPage(False, False) - '整合包安装 - If McVersionList.Count = 0 AndAlso File.Exists(Path & "modpack.zip") Then - If MyMsgBox("即将自动安装整合包,是否继续?", Button2:="取消") = 1 Then - If Not Directory.Exists(Path & ".minecraft\") Then - Directory.CreateDirectory(Path & ".minecraft\") - Directory.CreateDirectory(Path & ".minecraft\versions\") - Setup.Set("LaunchFolderSelect", "$.minecraft\") - McFolderLauncherProfilesJsonCreate(Path & ".minecraft\") - End If - McFolderListLoader.Start(IsForceRestart:=True) - - RunInNewThread(Sub() ModpackInstall(Path & "modpack.zip", ShowHint:=False), "Modpack Auto Install") - End If - End If - AniControlEnabled -= 1 End Sub @@ -635,7 +636,7 @@ Finish: Log("[Minecraft] 启动按钮:正在加载 Minecraft 版本") FrmLaunchLeft.BtnLaunch.Text = "正在加载" FrmLaunchLeft.BtnLaunch.IsEnabled = False - FrmLaunchLeft.LabVersion.Text = "正在加载版本列表,请稍候" + FrmLaunchLeft.LabVersion.Text = "正在加载中,请稍候" FrmLaunchLeft.BtnVersion.IsEnabled = False FrmLaunchLeft.BtnMore.Visibility = Visibility.Collapsed Case 1 diff --git a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.vb b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.vb index a283e57..2951a1a 100644 --- a/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageSetup/PageSetupUI.xaml.vb @@ -438,7 +438,7 @@ Refresh: End If End Sub Private Sub LabLauncherTheme11Click_MouseLeftButtonUp() Handles LabLauncherTheme11Click.MouseLeftButtonUp, RadioLauncherTheme11.MouseRightButtonUp - If LabLauncherTheme11Click.Visibility = Visibility.Collapsed OrElse LabLauncherTheme11Click.ToolTip.ToString.Contains("点击") Then + If LabLauncherTheme11Click.Visibility = Visibility.Collapsed OrElse If(LabLauncherTheme11Click.ToolTip, "").ToString.Contains("点击") Then If MyMsgBox( "1. 不爬取或攻击相关服务或网站,不盗取相关账号,没有谜题可以或需要以此来解决。" & vbCrLf & "2. 不得篡改或损毁相关公开信息,请尽量让它们保持原状。" & vbCrLf & diff --git a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj index c829231..d68df7a 100644 --- a/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj +++ b/Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj @@ -38,7 +38,7 @@ false false true - .\Output\ + .\bin\ Plain Craft Launcher 2.xml 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 false @@ -55,7 +55,7 @@ false false true - .\Output\ + .\bin\ Plain Craft Launcher 2.xml 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 false @@ -100,7 +100,7 @@ false - .\Output\ + .\bin\ Plain Craft Launcher 2.xml true 1 @@ -111,7 +111,7 @@ false - .\Output\ + .\bin\ Plain Craft Launcher 2.xml true 1 @@ -129,7 +129,7 @@ - .\Output\ + .\bin\ RELEASE,BY_UPDATE Plain Craft Launcher 2.xml true diff --git a/Plain Craft Launcher 2/Resources/Custom.xaml b/Plain Craft Launcher 2/Resources/Custom.xaml index 94e27d4..df177e3 100644 --- a/Plain Craft Launcher 2/Resources/Custom.xaml +++ b/Plain Craft Launcher 2/Resources/Custom.xaml @@ -148,7 +148,7 @@ + Text="打开记事本" EventType="打开文件" EventData="notepad" /> @@ -270,7 +270,7 @@ + Text="打开记事本" EventType="打开文件" EventData="notepad" /> diff --git a/Plain Craft Launcher 2/Resources/Help.zip b/Plain Craft Launcher 2/Resources/Help.zip index c55c8d3066ee03408281b7071d5ca2b2dcc696cd..600091f7dd8e081efab76d255fae7ceb23916d47 100644 GIT binary patch delta 27571 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 CvBRVQ delta 27471 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