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" >