From 3c44a55b37f23866cda59513983d92e1739112f0 Mon Sep 17 00:00:00 2001 From: Pigeon0v0 Date: Sun, 30 Jun 2024 15:01:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20NeoForge=20BMCLAPI=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=88=97=E8=A1=A8=EF=BC=88=E7=88=B1=E6=9D=A5=E8=87=AA?= =?UTF-8?q?=20bangbang93=EF=BC=89=20fix:=20=E5=AE=89=E8=A3=85=20NeoForge?= =?UTF-8?q?=20=E6=95=B4=E5=90=88=E5=8C=85=E6=97=B6=E7=9A=84=E5=8F=82?= =?UTF-8?q?=E6=95=B0=E5=88=9D=E5=A7=8B=E5=8C=96=E4=B8=8D=E6=AD=A3=E7=A1=AE?= =?UTF-8?q?=20chores:=20=E5=9C=A8=E4=BD=8E=E7=89=88=E6=9C=AC=EF=BC=88<=3D1?= =?UTF-8?q?.19=EF=BC=89=E7=9A=84=E8=87=AA=E5=8A=A8=E5=AE=89=E8=A3=85?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=B0=86=E4=B8=8D=E4=BC=9A=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=20NeoForge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/Minecraft/ModDownload.vb | 43 +++++++++++-------- .../Pages/PageDownload/ModDownloadLib.vb | 2 +- .../PageDownload/PageDownloadInstall.xaml.vb | 30 +++++++------ 3 files changed, 44 insertions(+), 31 deletions(-) diff --git a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb index eeb0488..5bc3131 100644 --- a/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb +++ b/Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb @@ -802,24 +802,33 @@ ''' Public DlNeoForgeListBmclapiLoader As New LoaderTask(Of Integer, DlNeoForgeListResult)("DlNeoForgeList Bmclapi", AddressOf DlNeoForgeListBmclapiMain) Private Sub DlNeoForgeListBmclapiMain(Loader As LoaderTask(Of Integer, DlNeoForgeListResult)) + Dim ResultLatest As String + Dim VersionsJArray As JArray + Try + ResultLatest = NetGetCodeByDownload("https://bmclapi2.bangbang93.com/neoforge/meta/api/maven/details/releases/net/neoforged/neoforge", UseBrowserUserAgent:=True, IsJson:=True) + Catch ex As Exception + If GetExceptionSummary(ex).Contains("(404)") Then + Throw New Exception("没有可用版本") + Else + Throw + End If + End Try + If ResultLatest.Length < 50 Then Throw New Exception("获取到的版本列表长度不足(" & ResultLatest & ")") + VersionsJArray = GetJson(ResultLatest)("name") Dim Versions As New List(Of String) - Dim ClientVersions As JArray = DlClientListLoader.Output.Value("versions") 'BMCLAPI 不能返回所有 NeoForge 版本,获取 MC 版本列表进行遍历 - Dim ClientReleases As New List(Of String) - - For Each Client In ClientVersions '排除快照版或远古版等特殊版本 - If RegexCheck(Client("id").ToString(), "[0,9.]+") Then - ClientReleases.Add(Client("id").ToString()) - End If - Next - - For Each Release In ClientReleases - If Int(Release.Split(".")(1)) <= 19 Then Continue For '如果游戏版本低于 1.20 就不进行请求 - Dim Json As String = NetGetCodeByRequestRetry("https://bmclapi2.bangbang93.com/neoforge/list/" & Release) - If Not Json.Contains("[]") Then '如果这个版本不支持 NeoForge,BMCLAPI 会直接返回一个空的 Json 序列,这里直接用字符串处理了 - Versions.Add(Release) - End If - Next - + Versions.Add("1.20.1") + Try + For Each Token As String In VersionsJArray("name") + Dim Version As String = Token.Replace("neoforge-", "") + Dim Inherit As String = $"1.{Version.Split(".")(0)}.{Token.Split(".")(1)}" + If Inherit.EndsWith(".0") Then Inherit = Inherit.Replace(".0", "") + Versions.Add(Inherit) + Next + Versions = Versions.Distinct().ToList() + Catch ex As Exception + Log(ex, LogLevel.Feedback) + End Try + If Not Versions.Any() Then Throw New Exception("没有可用版本") Loader.Output = New DlNeoForgeListResult With {.IsOfficial = False, .SourceName = "BMCLAPI", .Value = Versions} End Sub #End Region diff --git a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb index a90fb77..7d87ce3 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb +++ b/Plain Craft Launcher 2/Pages/PageDownload/ModDownloadLib.vb @@ -1300,7 +1300,7 @@ Retry: Dim DownloadInfo = If(IsNeo, DownloadNeoInfo, DownloadForgeInfo) If IsNeo Then '兜底,有的时候 DownloadInfo 可能是空的 If DownloadNeoInfo Is Nothing Then - DownloadInfo.VersionName = Version + DownloadInfo = New DlNeoForgeVersionEntry With {.VersionName = Version} Version = Version.Replace("neoforge-", "").Replace("-beta", "").Replace("1.20.1-", "") DownloadInfo.VersionCode = Version If Version.Contains("-beta") Then DownloadInfo.IsBeta = True diff --git a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb index 1adeb06..687c827 100644 --- a/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb +++ b/Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb @@ -372,20 +372,24 @@ LabForge.Foreground = ColorGray1 End If 'NeoForge - Dim NeoForgeError As String = LoadNeoForgeGetError() - CardNeoForge.MainSwap.Visibility = If(NeoForgeError Is Nothing, Visibility.Visible, Visibility.Collapsed) - If NeoForgeError IsNot Nothing Then CardNeoForge.IsSwaped = True - SetNeoForgeInfoShow(CardNeoForge.IsSwaped) - If SelectedNeoForge Is Nothing Then - BtnNeoForgeClear.Visibility = Visibility.Collapsed - ImgNeoForge.Visibility = Visibility.Collapsed - LabNeoForge.Text = If(NeoForgeError, "点击选择") - LabNeoForge.Foreground = ColorGray4 + If Not SelectedMinecraftId.Contains("1.") OrElse Val(SelectedMinecraftId.Split(".")(1)) <= 19 Then + CardNeoForge.Visibility = Visibility.Collapsed Else - BtnNeoForgeClear.Visibility = Visibility.Visible - ImgNeoForge.Visibility = Visibility.Visible - LabNeoForge.Text = SelectedNeoForge.VersionCode & If(SelectedNeoForge.IsBeta, "-beta", "") - LabNeoForge.Foreground = ColorGray1 + Dim NeoForgeError As String = LoadNeoForgeGetError() + CardNeoForge.MainSwap.Visibility = If(NeoForgeError Is Nothing, Visibility.Visible, Visibility.Collapsed) + If NeoForgeError IsNot Nothing Then CardNeoForge.IsSwaped = True + SetNeoForgeInfoShow(CardNeoForge.IsSwaped) + If SelectedNeoForge Is Nothing Then + BtnNeoForgeClear.Visibility = Visibility.Collapsed + ImgNeoForge.Visibility = Visibility.Collapsed + LabNeoForge.Text = If(NeoForgeError, "点击选择") + LabNeoForge.Foreground = ColorGray4 + Else + BtnNeoForgeClear.Visibility = Visibility.Visible + ImgNeoForge.Visibility = Visibility.Visible + LabNeoForge.Text = SelectedNeoForge.VersionCode & If(SelectedNeoForge.IsBeta, "-beta", "") + LabNeoForge.Foreground = ColorGray1 + End If End If 'Fabric If SelectedMinecraftId.Contains("1.") AndAlso Val(SelectedMinecraftId.Split(".")(1)) <= 13 Then