Przeglądaj źródła

feat: NeoForge 整合包安装
fix: 部分情况下安装 NeoForge 会失败(DownloadInfo 为空)

Pigeon0v0 2 lat temu
rodzic
commit
f3079dd619

+ 23 - 0
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)

+ 18 - 2
Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb

@@ -1973,11 +1973,27 @@ Retry:
     ''' <summary>
     ''' 获取下载某个 NeoForge 版本的加载器列表。
     ''' </summary>
-    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)