Explorar o código

fix: Icon 显示及其导致的崩溃问题
fix: 1.20.1 NeoForge 下载链接拼接错误
fix: 自动安装界面选择 NeoForge 后使用了 rawVersion 作为版本号

Pigeon0v0 %!s(int64=2) %!d(string=hai) anos
pai
achega
66182f2cd0

BIN=BIN
Plain Craft Launcher 2/Images/Icons/NeoForged.png


BIN=BIN
Plain Craft Launcher 2/Images/Icons/NeoForgedLarge.png


+ 9 - 13
Plain Craft Launcher 2/Modules/Minecraft/ModDownload.vb

@@ -771,7 +771,7 @@
             Public Value As JObject
         End Structure
         ''' <summary>
-        ''' 是否为新版 Forge。(即为 Minecraft 1.13+)
+        ''' 是否为新版 NeoForge。(即为 Minecraft 1.13+)
         ''' </summary>
         Public ReadOnly Property IsNewType As Boolean
             Get
@@ -804,21 +804,17 @@
         ''' </summary>
         Public ReadOnly Property FileName As String
             Get
-                Return "neoforge-" & StdVersion & If(IsBeta, "-beta", "") & "-" & "installer" & "." & "jar"
+                If StdVersion.StartsWith("47.") Then          'NeoForge 1.20.1 的版本命名有些特殊...
+                    Return "forge-" & Inherit & "-" & StdVersion & If(IsBeta, "-beta", "") & "-" & "installer" & "." & "jar"
+                Else
+                    Return "neoforge-" & StdVersion & If(IsBeta, "-beta", "") & "-" & "installer" & "." & "jar"
+                End If
             End Get
         End Property
         ''' <summary>
         ''' 文件扩展名。
         ''' </summary>
-        Public ReadOnly Property FileSuffix As String
-            Get
-                If Category = "installer" Then
-                    Return "jar"
-                Else
-                    Return "jar"
-                End If
-            End Get
-        End Property
+        Public FileSuffix As String = "jar"
     End Class
     ''' <summary>
     ''' NeoForge 版本列表,主加载器。
@@ -882,10 +878,10 @@
                 Dim IsBeta As Boolean
                 Dim rawVersion As String = Token("rawVersion")
                 If rawVersion.Contains("-beta") Then
-                    StdVersion = Token("version").ToString().Replace("neoforge-", "").Replace("-beta", "")
+                    StdVersion = Token("version").ToString().Replace("neoforge-", "").Replace("-beta", "").Replace("1.20.1-", "")
                     IsBeta = True
                 Else
-                    StdVersion = Token("version").ToString().Replace("neoforge-", "")
+                    StdVersion = Token("version").ToString().Replace("neoforge-", "").Replace("1.20.1-", "")
                     IsBeta = False
                 End If
                 Name = rawVersion

+ 4 - 4
Plain Craft Launcher 2/Modules/Minecraft/ModMinecraft.vb

@@ -736,12 +736,12 @@ Recheck:
                             If Version.ForgeVersion Is Nothing Then Version.ForgeVersion = RegexSeek(RealJson, "(?<=net\.minecraftforge:minecraftforge:)[0-9\.]+")
                             If Version.ForgeVersion Is Nothing Then Version.ForgeVersion = If(RegexSeek(RealJson, "(?<=net\.minecraftforge:fmlloader:[0-9\.]+-)[0-9\.]+"), "未知版本")
                             Version.HasForge = True
-                        ElseIf RealJson.Contains("neoforge") Then
-                            State = McVersionState.NeoForge
-                            Dim JsonStr1() As String = RealJson.Replace(" ", "").Split("""--fml.neoForgeVersion""," & vbCrLf & """")          '这里的实现比较抽象,正则我写不会
+                        ElseIf RealJson.Contains("neoforge") Then    '1.20.1 NeoForge Json 内信息不同,为了方便直接截断 orgeVersion;这里的实现比较抽象,正则我写不会
+                            State = McVersionState.NeoForge          '1.20.1 Json 标识:"--fml.forgeVersion"     1.20.1 以上 Json 标识:"--fml.neoForgeVersion"
+                            Dim JsonStr1() As String = RealJson.Replace(" ", "").Split("orgeVersion""," & vbCrLf & """")
                             Dim JsonStr2() As String = JsonStr1(1).Split("""")
                             Version.NeoForgeVersion = JsonStr2(0)
-                            If Version.NeoForgeVersion Is Nothing Then Version.NeoForgeVersion = RegexSeek(RealJson, "(?<=""--fml.neoForgeVersion"",)[0-9\.]+")
+                            If Version.NeoForgeVersion Is Nothing Then Version.NeoForgeVersion = RegexSeek(RealJson, "(?<=orgeVersion"",)[0-9\.]+")
                             If Version.NeoForgeVersion Is Nothing Then Version.NeoForgeVersion = If(RegexSeek(RealJson, "(?<=net\.minecraftforge:fmlloader:[0-9\.]+-)[0-9\.]+"), "未知版本")
                             Version.HasNeoForge = True
                         End If

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

@@ -1782,10 +1782,17 @@ Retry:
             Loaders.Add(New LoaderTask(Of DlNeoForgeVersionEntry, List(Of NetFile))("获取下载地址",
             Sub(Task As LoaderTask(Of DlNeoForgeVersionEntry, List(Of NetFile)))
                 Dim Files As New List(Of NetFile)
-                Files.Add(New NetFile({
-                    "https://bmclapi2.bangbang93.com/maven/net/neoforged/neoforge/" & DownloadInfo.StdVersion & "/" & DownloadInfo.FileName,
-                    "https://maven.neoforged.net/releases/net/neoforged/neoforge/" & DownloadInfo.StdVersion & "/" & DownloadInfo.FileName
+                If DownloadInfo.StdVersion.StartsWith("47.") Then          '1.20.1 NeoForge 下载地址不同
+                    Files.Add(New NetFile({
+                    "https://bmclapi2.bangbang93.com/maven/net/neoforged/forge/" & "1.20.1-" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName,
+                    "https://maven.neoforged.net/releases/net/neoforged/forge/" & "1.20.1-" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName
+                }, Target, New FileChecker(MinSize:=64 * 1024, Hash:=DownloadInfo.Hash)))
+                Else
+                    Files.Add(New NetFile({
+                    "https://bmclapi2.bangbang93.com/maven/net/neoforged/neoforge/" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName,
+                    "https://maven.neoforged.net/releases/net/neoforged/neoforge/" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName
                 }, Target, New FileChecker(MinSize:=64 * 1024, Hash:=DownloadInfo.Hash)))
+                End If
                 Task.Output = Files
             End Sub) With {.ProgressWeight = 0.1, .Show = False})
             '下载
@@ -2005,11 +2012,20 @@ Retry:
                     If IsCustomFolder Then Throw New Exception("如果没有指定原版下载器,则不能指定 MC 安装文件夹")
                     ClientDownloadLoader = McDownloadClient(NetPreDownloadBehaviour.ExitWhileExistsOrDownloading, Inherit)
                 End If
-                '添加主文件
-                Dim Files As New List(Of NetFile) From {New NetFile({
+                Dim Files
+                If DownloadInfo.StdVersion.StartsWith("47.") Then          '1.20.1 NeoForge 下载地址不同
+                    Dim FilesLegacy As New List(Of NetFile) From {New NetFile({
+                    "https://bmclapi2.bangbang93.com/maven/net/neoforged/forge/" & "1.20.1-" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName,
+                    "https://maven.neoforged.net/releases/net/neoforged/forge/" & "1.20.1-" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName
+                }, InstallerAddress, New FileChecker(MinSize:=64 * 1024, Hash:=DownloadInfo.Hash))}
+                    Files = FilesLegacy
+                Else
+                    Dim FilesLatest As New List(Of NetFile) From {New NetFile({
                     "https://bmclapi2.bangbang93.com/maven/net/neoforged/neoforge/" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName,
                     "https://maven.neoforged.net/releases/net/neoforged/neoforge/" & DownloadInfo.StdVersion & If(DownloadInfo.IsBeta, "-beta", "") & "/" & DownloadInfo.FileName
                 }, InstallerAddress, New FileChecker(MinSize:=64 * 1024, Hash:=DownloadInfo.Hash))}
+                    Files = FilesLatest
+                End If
                 Task.Output = Files
             End Sub) With {.ProgressWeight = 0.5, .Show = False})
         Loaders.Add(New LoaderDownload("下载 Mod 加载器主文件", New List(Of NetFile)) With {.ProgressWeight = 9})
@@ -2196,7 +2212,7 @@ Retry:
                 If(Entry.ReleaseTime = "",
                 If(ModeDebug, If(Entry.Category IsNot Nothing, "种类:" & Entry.Category, "") & If(Entry.Branch Is Nothing, "", ",开发分支:" & Entry.Branch), ""),
                 "发布于 " & Entry.ReleaseTime & If(ModeDebug, ",种类:" & Entry.Category & If(Entry.Branch Is Nothing, "", ",开发分支:" & Entry.Branch), "")),
-            .Logo = PathImage & "Blocks/NeoForge.png"
+            .Logo = PathImage & "Icons/NeoForged.png"
         }
         AddHandler NewItem.Click, OnClick
         '建立菜单

+ 1 - 1
Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml

@@ -89,7 +89,7 @@
                                 <ColumnDefinition Width="Auto" />
                                 <ColumnDefinition Width="1*" />
                             </Grid.ColumnDefinitions>
-                            <Image x:Name="ImgNeoForge" Margin="0,0,7,0" SnapsToDevicePixels="True" Height="18" RenderOptions.BitmapScalingMode="Linear" Source="pack://application:,,,/images/Blocks/NeoForge.png" />
+                            <Image x:Name="ImgNeoForge" Margin="0,0,7,0" SnapsToDevicePixels="True" Height="18" RenderOptions.BitmapScalingMode="Linear" Source="pack://application:,,,/images/Icons/NeoForged.png" />
                             <TextBlock x:Name="LabNeoForge" VerticalAlignment="Center" TextTrimming="CharacterEllipsis" Grid.Column="1" />
                         </Grid>
                         <Grid x:Name="BtnNeoForgeClear" Height="30" Width="30" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,5,32,0" Background="{StaticResource ColorBrushSemiTransparent}">

+ 2 - 2
Plain Craft Launcher 2/Pages/PageDownload/PageDownloadInstall.xaml.vb

@@ -384,7 +384,7 @@
         Else
             BtnNeoForgeClear.Visibility = Visibility.Visible
             ImgNeoForge.Visibility = Visibility.Visible
-            LabNeoForge.Text = SelectedNeoForge.Version
+            LabNeoForge.Text = SelectedNeoForge.StdVersion & If(SelectedNeoForge.IsBeta, "-beta", "")
             LabNeoForge.Foreground = ColorGray1
         End If
         'Fabric
@@ -541,7 +541,7 @@
         ElseIf SelectedForge IsNot Nothing Then
             Return "pack://application:,,,/images/Blocks/Anvil.png"
         ElseIf SelectedNeoForge IsNot Nothing Then
-            Return "pack://application:,,,/images/Blocks/NeoForge.png"
+            Return "pack://application:,,,/images/Icons/NeoForged.png"
         ElseIf SelectedLiteLoader IsNot Nothing Then
             Return "pack://application:,,,/images/Blocks/Egg.png"
         ElseIf SelectedOptiFine IsNot Nothing Then

+ 3 - 2
Plain Craft Launcher 2/Plain Craft Launcher 2.vbproj

@@ -757,7 +757,6 @@
   </ItemGroup>
   <ItemGroup>
     <Resource Include="Images\Blocks\Anvil.png" />
-    <Resource Include="Images\Blocks\NeoForge.png" />
     <Resource Include="Images\Blocks\CobbleStone.png" />
     <Resource Include="Images\Blocks\CommandBlock.png" />
     <Resource Include="Images\Blocks\Grass.png" />
@@ -924,6 +923,8 @@
   <ItemGroup>
     <Resource Include="Images\Heads\MCBBS.png" />
   </ItemGroup>
-  <ItemGroup />
+  <ItemGroup>
+    <Resource Include="Images\Icons\NeoForged.png" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
 </Project>