From 92f30181d507ab6bc5e4dc4f0b4b350532b4d901 Mon Sep 17 00:00:00 2001 From: youzi-2333 Date: Thu, 11 Jul 2024 12:58:48 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E5=AE=8C=E6=88=90=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/Minecraft/ModModpack.vb | 45 +++++++++++---- .../Pages/PageVersion/PageVersionExport.xaml | 38 ++++++++++++- .../PageVersion/PageVersionExport.xaml.vb | 57 ++++++++++++++++--- .../Pages/PageVersion/PageVersionLeft.xaml | 2 +- 4 files changed, 120 insertions(+), 22 deletions(-) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb index 89cf13d..6f93a26 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb @@ -891,6 +891,10 @@ Retry: ''' Public PCLSetupVer As Boolean = True ''' + ''' 整合包名称。仅在 Modrinth 有效。 + ''' + Public Name As String = "" + ''' ''' 版本号。仅在 Modrinth 有效。 ''' Public VerID As String = "" @@ -900,6 +904,8 @@ Retry: Saves As String(), Optional PCLSetupGlobal As Boolean = True, Optional PCLSetupVer As Boolean = True, + Optional Name As String = "", + Optional Author As String = "", Optional VerID As String = "") Me.Version = Version Me.Dest = Dest @@ -907,23 +913,35 @@ Retry: Me.Saves = Saves Me.PCLSetupGlobal = PCLSetupGlobal Me.PCLSetupVer = PCLSetupVer + Me.Name = Name Me.VerID = VerID End Sub End Class ''' - ''' 导出整合包。 + ''' 导出整合包。不阻塞。 ''' Public Sub ModpackExport(Options As ExportOptions) + Hint("正在导出……") + RunInNewThread(Sub() + If ModpackExportBlocking(Options) Then + Hint("导出成功!", HintType.Finish) + OpenExplorer($"""{GetPathFromFullPath(Options.Dest)}""") + End If + End Sub, "Modpack Export") + End Sub + Private Function ModpackExportBlocking(Options As ExportOptions) As Boolean Select Case Options.Type Case ModpackType.Modrinth - ExportModrinth(Options.Version, Options.Dest, Options.Saves, Options.VerID) + Return ExportModrinth(Options.Version, Options.Dest, Options.Saves, Options.Name, Options.VerID) Case ModpackType.Compressed - ExportCompressed(Options.Version, Options.Dest, Options.Saves, Options.PCLSetupGlobal, Options.PCLSetupVer) + Return ExportCompressed(Options.Version, Options.Dest, Options.Saves, Options.PCLSetupGlobal, Options.PCLSetupVer) + Case Else + Throw New ArgumentException($"未知的整合包类型:{Options.Type}") End Select - End Sub + End Function #Region "冗余" - Private VersionRedundant As String() = {"saves", "screenshots", "backups", "command_history\.txt", '个人文件 + Private VersionRedundant As String() = {"screenshots", "backups", "command_history\.txt", '个人文件 ".*-natives", "server-resource-packs", "user.*cache\.json", "\.optifine", "\.fabric", '缓存 ".*\.jar", "downloads", "realms_persistence.json", "\$\{natives_directory\}", '可联网更新 "logs", "crash-reports", ".*\.log", '日志 @@ -932,7 +950,7 @@ Retry: "\.replay_cache", "replay_recordings", "replay_videos", 'ReplayMod "irisUpdateInfo\.json", 'Iris ".*\.BakaCoreInfo", 'BakaXL - "PCL" '到时候会拷,别急 + "PCL", "saves" '到时候会拷,别急 } Private Function IsVerRedundant(FileName As String) As Boolean For Each regex In VersionRedundant @@ -943,7 +961,7 @@ Retry: #End Region #Region "不同类型整合包的导出方法" - Private Sub ExportModrinth(Version As McVersion, DestPath As String, Saves As String(), VerID As String) + Private Function ExportModrinth(Version As McVersion, DestPath As String, Saves As String(), Name As String, VerID As String) Try Log($"[Export] 导出整合包(Modrinth):{Version.Path} -> {DestPath},导出存档 {If(Saves Is Nothing OrElse Not Saves.Any, "不导出", Saves.Join(", "))}") Dim tempDir As String = $"{ExpTempDir}{GetUuid()}\" @@ -998,7 +1016,7 @@ Retry: {"game", "minecraft"}, {"formatVersion", 1}, {"versionId", VerID}, - {"name", Version.Name}, + {"name", If(String.IsNullOrEmpty(Name), Version.Name, Name)}, {"summary", Version.Info}, {"files", files}, {"dependencies", depend} @@ -1013,6 +1031,7 @@ Retry: '存档 For Each s In Saves + If String.IsNullOrWhiteSpace(s) Then Continue For '草了,传空字串进去会直接把 saves 整个文件夹拷过去 Dim fromPath As String = $"{Version.Path}saves\{s}" If Directory.Exists(fromPath) Then CopyDirectory(fromPath, $"{tempDir}overrides\saves\{s}") Next @@ -1020,11 +1039,13 @@ Retry: If File.Exists(DestPath) Then File.Delete(DestPath) '选择文件的时候已经确认了要替换 ZipFile.CreateFromDirectory(tempDir, DestPath) DeleteDirectory(tempDir) + Return True Catch ex As Exception Log(ex, "导出整合包失败", LogLevel.Msgbox) + Return False End Try - End Sub - Private Sub ExportCompressed(Version As McVersion, DestPath As String, Saves As String(), PCLSetupGlobal As Boolean, PCLSetupVer As Boolean) + End Function + Private Function ExportCompressed(Version As McVersion, DestPath As String, Saves As String(), PCLSetupGlobal As Boolean, PCLSetupVer As Boolean) Try Log($"[Export] 导出整合包(压缩包):{Version.Path} -> {DestPath},导出存档 {If(Saves Is Nothing OrElse Not Saves.Any, "不导出", Saves.Join(", "))},全局设置 {If(PCLSetupGlobal, "导出", "不导出")},版本设置 {If(PCLSetupVer, "导出", "不导出")}") Dim tempDir As String = $"{ExpTempDir}{GetUuid()}\" @@ -1079,10 +1100,12 @@ Retry: If File.Exists(DestPath) Then File.Delete(DestPath) '选择文件的时候已经确认了要替换 ZipFile.CreateFromDirectory(tempDir, DestPath) DeleteDirectory(tempDir) + Return True Catch ex As Exception Log(ex, "导出整合包失败", LogLevel.Msgbox) + Return False End Try - End Sub + End Function #End Region #End Region diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionExport.xaml b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionExport.xaml index 01aa968..2672872 100644 --- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionExport.xaml +++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionExport.xaml @@ -7,7 +7,7 @@ PanScroll="{Binding ElementName=PanBack}"> - + @@ -20,12 +20,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionExport.xaml.vb b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionExport.xaml.vb index 122d451..c6ae677 100644 --- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionExport.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionExport.xaml.vb @@ -1,15 +1,56 @@ Public Class PageVersionExport - Public Sub BtnExportExport_Click() Handles BtnExportExport.Click - Dim Type As ModpackType = ModpackType.Modrinth + + Private CurrentVersion As McVersion = PageVersionLeft.Version + Private Type As ModpackType = ModpackType.Compressed + Private SelectedSaves As New List(Of Integer) + Private ReadOnly Property Saves As List(Of String) + Get + If Directory.Exists(CurrentVersion.Path & "saves\") Then + Return Directory.EnumerateDirectories(CurrentVersion.Path & "saves\").ToList + End If + Return New List(Of String) + End Get + End Property + + Private Sub PageVersionExport_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded + CurrentVersion = PageVersionLeft.Version '各个版本不同,每次都需要重新加载 + TbExportName.HintText = CurrentVersion.Name + End Sub + +#Region "控件事件" + Private Sub ComboExportType_Change(sender As ComboBox, e As SelectionChangedEventArgs) Handles ComboExportType.SelectionChanged + If AniControlEnabled <> 0 Then Exit Sub + Type = If(sender.SelectedIndex = 0, ModpackType.Compressed, ModpackType.Modrinth) + Select Case Type + Case ModpackType.Modrinth + If GridCompressed IsNot Nothing Then GridCompressed.Visibility = Visibility.Collapsed + If GridModrinth IsNot Nothing Then GridModrinth.Visibility = Visibility.Visible + Case ModpackType.Compressed + If GridCompressed IsNot Nothing Then GridCompressed.Visibility = Visibility.Visible + If GridModrinth IsNot Nothing Then GridModrinth.Visibility = Visibility.Collapsed + End Select + CardExport.TriggerForceResize() + End Sub + + Private Sub BtnExportExport_Click() Handles BtnExportExport.Click If Type = ModpackType.Compressed AndAlso Val(VersionBranchCode) <> 50 Then - MyMsgBox("你当前的 PCL 不是正式版,且受到再次分发(制作压缩包)的限制。" & vbCrLf & + If MyMsgBox("你当前的 PCL 不是正式版,且受到再次分发(制作压缩包)的限制。" & vbCrLf & "请使用正式版再次进行该操作再试!" & vbCrLf & - "其他类型的整合包(例如 Modrinth 整合包)没有该限制。") + "其他类型的整合包(例如 Modrinth 整合包)没有该限制。", Button1:="下载正式版", Button2:="取消") = 1 Then + OpenWebsite("https://afdian.net/p/0164034c016c11ebafcb52540025c377") + End If Exit Sub End If - RunInNewThread(Sub() - ModpackExport(New ExportOptions(McVersionCurrent, Path & "exportmr.zip", Type, {"新的世界", "雕塑"}, - PCLSetupGlobal:=False, PCLSetupVer:=True, VerID:="1.2.3")) - End Sub, "Modpack Export") + Dim savePath As String = SelectAs( + "选择导出位置", $"整合包 - {If(String.IsNullOrWhiteSpace(TbExportName.Text), CurrentVersion.Name, TbExportName.Text)}" & If(Type = ModpackType.Modrinth, ".mrpack", ".zip"), + If(Type = ModpackType.Modrinth, "Modrinth 整合包(*.mrpack)|*.mrpack", "整合包文件(*.zip)|*.zip")) + If String.IsNullOrEmpty(savePath) Then Exit Sub + ModpackExport(New ExportOptions(CurrentVersion, savePath, Type, {TbExportSave.Text}, + PCLSetupGlobal:=CheckExportGlobal.Checked, + PCLSetupVer:=CheckExportVersion.Checked, Name:=TbExportName.Text, + VerID:=TbExportVersion.Text)) End Sub + +#End Region + End Class diff --git a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionLeft.xaml b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionLeft.xaml index 80be838..45eb800 100644 --- a/Plain Craft Launcher 2/Pages/PageVersion/PageVersionLeft.xaml +++ b/Plain Craft Launcher 2/Pages/PageVersion/PageVersionLeft.xaml @@ -24,7 +24,7 @@ + Logo="M511.488 995.328a128.654222 128.654222 0 0 1-57.116444-13.112889L70.769778 791.808a126.833778 126.833778 0 0 1-70.769778-113.777778V311.608889a126.179556 126.179556 0 0 1 15.36-60.103111V248.604444c1.479111-2.901333 3.356444-5.603556 5.518222-8.021333a127.630222 127.630222 0 0 1 49.891556-42.325333L454.371556 13.368889a128.739556 128.739556 0 0 1 112.981333 0l383.601778 190.407111a126.862222 126.862222 0 0 1 72.049777 113.379556v360.874666a126.805333 126.805333 0 0 1-70.769777 115.939556L568.604444 984.32c-17.92 7.964444-37.461333 11.747556-57.116444 11.008z m42.638222-470.897778v370.204445l360.192-178.545778c14.449778-7.253333 23.552-21.987556 23.438222-38.087111v-335.928889L554.097778 524.430222zM85.248 330.666667v347.335111a42.268444 42.268444 0 0 0 23.438222 38.087111l360.192 178.545778V523.576889L85.248 330.666667zM135.537778 260.835556l375.950222 189.952 137.671111-65.564445L286.435556 188.074667 135.537778 260.864z m245.105778-118.471112l363.576888 197.973334 150.897778-71.480889-365.283555-180.224a42.922667 42.922667 0 0 0-37.518223 0l-111.672888 53.731555z" >