From f3079dd619733eb0b3b69b3c38fc09674bb43620 Mon Sep 17 00:00:00 2001 From: Pigeon0v0 Date: Sun, 16 Jun 2024 15:29:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20NeoForge=20=E6=95=B4=E5=90=88=E5=8C=85?= =?UTF-8?q?=E5=AE=89=E8=A3=85=20fix:=20=E9=83=A8=E5=88=86=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8B=E5=AE=89=E8=A3=85=20NeoForge=20=E4=BC=9A?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=EF=BC=88DownloadInfo=20=E4=B8=BA=E7=A9=BA?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/Minecraft/ModModpack.vb | 23 +++++++++++++++++++ .../Pages/PageDownload/ModDownloadLib.vb | 20 ++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb index bcd878c..b11f875 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModModpack.vb @@ -183,6 +183,7 @@ Retry: '获取 Mod API 版本信息 Dim ForgeVersion As String = Nothing + Dim NeoForgeVersion As String = Nothing Dim FabricVersion As String = Nothing For Each Entry In If(Json("minecraft")("modLoaders"), {}) Dim Id As String = If(Entry("id"), "").ToString.ToLower @@ -199,6 +200,19 @@ Retry: Catch ex As Exception Log(ex, "读取整合包 Forge 版本失败:" & Id) End Try + ElseIf Id.StartsWithF("neoforge-") Then + 'NeoForge 指定 + If Id.Contains("recommended") Then + Log("[ModPack] 该整合包版本过老,已不支持进行安装!", LogLevel.Hint) + Exit Sub + End If + Try + Log("[ModPack] 整合包 NeoForge 版本:" & Id) + NeoForgeVersion = Id.Split("-")(1) + Exit For + Catch ex As Exception + Log(ex, "读取整合包 Forge 版本失败:" & Id) + End Try ElseIf Id.StartsWithF("fabric-") Then 'Fabric 指定 Try @@ -301,6 +315,7 @@ Retry: .TargetVersionFolder = $"{PathMcFolder}versions\{VersionName}\", .MinecraftName = Json("minecraft")("version").ToString, .ForgeVersion = ForgeVersion, + .NeoForgeVersion = NeoForgeVersion, .FabricVersion = FabricVersion } Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True) @@ -368,6 +383,7 @@ Retry: '获取 Mod API 版本信息 Dim MinecraftVersion As String = Nothing Dim ForgeVersion As String = Nothing + Dim NeoForgeVersion As String = Nothing Dim FabricVersion As String = Nothing For Each Entry As JProperty In If(Json("dependencies"), {}) Select Case Entry.Name.ToLower @@ -376,6 +392,9 @@ Retry: Case "forge" 'eg. 14.23.5.2859 / 1.19-41.1.0 ForgeVersion = Entry.Value.ToString Log("[ModPack] 整合包 Forge 版本:" & ForgeVersion) + Case "neoforge" 'eg. 20.6.98-beta + NeoForgeVersion = Entry.Value.ToString + Log("[ModPack] 整合包 NeoForge 版本:" & NeoForgeVersion) Case "fabric-loader" 'eg. 0.14.14 FabricVersion = Entry.Value.ToString Log("[ModPack] 整合包 Fabric 版本:" & FabricVersion) @@ -447,6 +466,7 @@ Retry: .TargetVersionFolder = $"{PathMcFolder}versions\{VersionName}\", .MinecraftName = MinecraftVersion, .ForgeVersion = ForgeVersion, + .NeoForgeVersion = NeoForgeVersion, .FabricVersion = FabricVersion } Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True) @@ -676,6 +696,8 @@ Retry: Request.MinecraftName = Component("version") Case "net.minecraftforge" Request.ForgeVersion = Component("version") + Case "net.neoforged" + Request.NeoForgeVersion = Component("version") Case "net.fabricmc.fabric-loader" Request.FabricVersion = Component("version") Case "org.quiltmc.quilt-loader" 'eg. 1.0.0 @@ -772,6 +794,7 @@ Retry: .MinecraftName = Addons("game"), .OptiFineVersion = If(Addons.ContainsKey("optifine"), Addons("optifine"), Nothing), .ForgeVersion = If(Addons.ContainsKey("forge"), Addons("forge"), Nothing), + .NeoForgeVersion = If(Addons.ContainsKey("neoforge"), Addons("neoforge"), Nothing), .FabricVersion = If(Addons.ContainsKey("fabric"), Addons("fabric"), Nothing) } Dim MergeLoaders As List(Of LoaderBase) = McInstallLoader(Request, True) diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb index 0ccffe1..625b4da 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb @@ -1973,11 +1973,27 @@ Retry: ''' ''' 获取下载某个 NeoForge 版本的加载器列表。 ''' - Private Function McDownloadNeoForgeLoader(Version As String, Inherit As String, Optional DownloadInfo As DlNeoForgeVersionEntry = Nothing, Optional McFolder As String = Nothing, Optional ClientDownloadLoader As LoaderCombo(Of String) = Nothing, Optional ClientFolder As String = Nothing, Optional FixLibrary As Boolean = True) As List(Of LoaderBase) + Private Function McDownloadNeoForgeLoader(Version As String, Inherit As String, Optional DownloadRawInfo As DlNeoForgeVersionEntry = Nothing, Optional McFolder As String = Nothing, Optional ClientDownloadLoader As LoaderCombo(Of String) = Nothing, Optional ClientFolder As String = Nothing, Optional FixLibrary As Boolean = True) As List(Of LoaderBase) '参数初始化 + Dim DownloadInfo As New DlNeoForgeVersionEntry McFolder = If(McFolder, PathMcFolder) - Version = DownloadInfo.StdVersion + If DownloadRawInfo Is Nothing Then '兜底,有的时候 DownloadInfo 可能是空的 + If Version.Contains("-beta") Then + DownloadInfo.Version = Version + Version = Version.Replace("neoforge-", "").Replace("-beta", "").Replace("1.20.1-", "") + DownloadInfo.StdVersion = Version + DownloadInfo.IsBeta = True + Else + DownloadInfo.Version = Version + Version = Version.Replace("neoforge-", "").Replace("1.20.1-", "") + DownloadInfo.StdVersion = Version + DownloadInfo.IsBeta = False + End If + Else + DownloadInfo = DownloadRawInfo + Version = DownloadInfo.StdVersion + End If Dim IsCustomFolder As Boolean = McFolder <> PathMcFolder Dim Id As String = DownloadInfo.Version Dim InstallerAddress As String = PathTemp & "Cache\Code\NeoForgeInstall-" & Version & "_" & RandomInteger(0, 100000)