From 71b762fd4488c6162c53f5f15d3e7c4eda0185ea Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Wed, 22 Jul 2026 20:15:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E5=B8=A6=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E5=99=A8=E7=9A=84=E6=95=B4=E5=90=88=E5=8C=85=E5=86=85=E5=90=AB?= =?UTF-8?q?=20.mrpack=20=E6=97=B6=E8=87=AA=E5=8A=A8=E6=8F=90=E5=8F=96=20.m?= =?UTF-8?q?rpack=20=E8=BF=9B=E8=A1=8C=E5=AE=89=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/Minecraft/ModModpack.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs index 9c753cb10..d1fdcd678 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs @@ -117,12 +117,19 @@ public static LoaderCombo ModpackInstall(string file, string instanceNam break; } // HMCL 整合包 - if (archive.GetEntry("modpack.zip") is not null || archive.GetEntry("modpack.mrpack") is not null) + if (archive.GetEntry("modpack.zip") is not null) { packType = 9; break; } // 带启动器的压缩包 + if (archive.GetEntry("modpack.mrpack") is not null) + { + var tempFile = Path.Combine(Paths.Temp, Guid.NewGuid() + ".mrpack"); + archive.GetEntry("modpack.mrpack").ExtractToFile(tempFile, overwrite: true); + return ModpackInstall(tempFile); + } + // 从一级目录判断整合包类型 var exitTry = false; foreach (var Entry in archive.Entries) @@ -178,12 +185,19 @@ public static LoaderCombo ModpackInstall(string file, string instanceNam break; } // HMCL 整合包 - if (fullNames[1] == "modpack.zip" || fullNames[1] == "modpack.mrpack") + if (fullNames[1] == "modpack.zip") { packType = 9; exitTry = true; break; } // 带启动器的压缩包 + + if (fullNames[1] == "modpack.mrpack") + { + var tempFile = Path.Combine(Paths.Temp, Guid.NewGuid() + ".mrpack"); + Entry.ExtractToFile(tempFile, overwrite: true); + return ModpackInstall(tempFile); + } } if (exitTry) break; From 8319e93487a34162ade082685e176e6501780ea3 Mon Sep 17 00:00:00 2001 From: LuLu-ling Date: Wed, 22 Jul 2026 20:54:27 +0800 Subject: [PATCH 2/2] apply [GPT-5.6-SOL] --- .../Modules/Minecraft/ModModpack.cs | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs index d1fdcd678..55349ff44 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.cs @@ -70,6 +70,7 @@ public static LoaderCombo ModpackInstall(string file, string instanceNam // 获取整合包种类与关键 Json var packType = -1; + ZipArchiveEntry nestedModpackEntry = null; do { try @@ -123,11 +124,10 @@ public static LoaderCombo ModpackInstall(string file, string instanceNam break; } // 带启动器的压缩包 - if (archive.GetEntry("modpack.mrpack") is not null) + nestedModpackEntry = archive.GetEntry("modpack.mrpack"); + if (nestedModpackEntry is not null) { - var tempFile = Path.Combine(Paths.Temp, Guid.NewGuid() + ".mrpack"); - archive.GetEntry("modpack.mrpack").ExtractToFile(tempFile, overwrite: true); - return ModpackInstall(tempFile); + break; } // 从一级目录判断整合包类型 @@ -194,9 +194,9 @@ public static LoaderCombo ModpackInstall(string file, string instanceNam if (fullNames[1] == "modpack.mrpack") { - var tempFile = Path.Combine(Paths.Temp, Guid.NewGuid() + ".mrpack"); - Entry.ExtractToFile(tempFile, overwrite: true); - return ModpackInstall(tempFile); + nestedModpackEntry = Entry; + exitTry = true; + break; } } @@ -213,6 +213,15 @@ public static LoaderCombo ModpackInstall(string file, string instanceNam } } while (false); + if (nestedModpackEntry is not null) + { + var tempFile = Path.Combine(ModMain.RequestTaskTempFolder(), "modpack.mrpack"); + nestedModpackEntry.ExtractToFile(tempFile, overwrite: true); + archive.Dispose(); + archive = null; + return ModpackInstall(tempFile, instanceName, logo, resourceId, isOnlineInstall); + } + // 执行对应的安装方法 switch (packType) {