Преглед изворни кода

fix: 版本列表不能正常显示核心 NeoForge 版本
fix: 自动安装页 NeoForge 存在多余的描述
chores: NeoForge Icon 显示,但目前有点小问题

Pigeon0v0 пре 2 година
родитељ
комит
d305dd3e43

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


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


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

@@ -1,4 +1,5 @@
 Imports System.IO.Compression
 Imports System.IO.Compression
+Imports MS.Internal
 
 
 Public Module ModMinecraft
 Public Module ModMinecraft
 
 
@@ -345,7 +346,7 @@ Public Module ModMinecraft
                                 End If
                                 End If
                             Next
                             Next
                         End If
                         End If
-                        '从 Forge Arguments 中获取版本号
+                        '从 Forge / NeoForge Arguments 中获取版本号
                         If JsonObject("arguments") IsNot Nothing AndAlso JsonObject("arguments")("game") IsNot Nothing Then
                         If JsonObject("arguments") IsNot Nothing AndAlso JsonObject("arguments")("game") IsNot Nothing Then
                             Dim Mark As Boolean = False
                             Dim Mark As Boolean = False
                             For Each Argument In JsonObject("arguments")("game")
                             For Each Argument In JsonObject("arguments")("game")
@@ -729,12 +730,20 @@ Recheck:
                             State = McVersionState.Fabric
                             State = McVersionState.Fabric
                             Version.FabricVersion = If(RegexSeek(RealJson, "(?<=(net.fabricmc:fabric-loader:)|(org.quiltmc:quilt-loader:))[0-9\.]+(\+build.[0-9]+)?"), "未知版本").Replace("+build", "")
                             Version.FabricVersion = If(RegexSeek(RealJson, "(?<=(net.fabricmc:fabric-loader:)|(org.quiltmc:quilt-loader:))[0-9\.]+(\+build.[0-9]+)?"), "未知版本").Replace("+build", "")
                             Version.HasFabric = True
                             Version.HasFabric = True
-                        ElseIf RealJson.Contains("minecraftforge") Then
+                        ElseIf RealJson.Contains("minecraftforge") AndAlso Not RealJson.Contains("neoforge") Then
                             State = McVersionState.Forge
                             State = McVersionState.Forge
                             Version.ForgeVersion = RegexSeek(RealJson, "(?<=forge:[0-9\.]+(_pre[0-9]*)?\-)[0-9\.]+")
                             Version.ForgeVersion = RegexSeek(RealJson, "(?<=forge:[0-9\.]+(_pre[0-9]*)?\-)[0-9\.]+")
                             If Version.ForgeVersion Is Nothing Then Version.ForgeVersion = RegexSeek(RealJson, "(?<=net\.minecraftforge:minecraftforge:)[0-9\.]+")
                             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\.]+"), "未知版本")
                             If Version.ForgeVersion Is Nothing Then Version.ForgeVersion = If(RegexSeek(RealJson, "(?<=net\.minecraftforge:fmlloader:[0-9\.]+-)[0-9\.]+"), "未知版本")
                             Version.HasForge = True
                             Version.HasForge = True
+                        ElseIf RealJson.Contains("neoforge") Then
+                            State = McVersionState.NeoForge
+                            Dim JsonStr1() As String = RealJson.Replace(" ", "").Split("""--fml.neoForgeVersion""," & 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 = If(RegexSeek(RealJson, "(?<=net\.minecraftforge:fmlloader:[0-9\.]+-)[0-9\.]+"), "未知版本")
+                            Version.HasNeoForge = True
                         End If
                         End If
                         Version.IsApiLoaded = True
                         Version.IsApiLoaded = True
                 End Select
                 End Select
@@ -752,6 +761,8 @@ ExitDataLoad:
                             Logo = PathImage & "Blocks/CobbleStone.png"
                             Logo = PathImage & "Blocks/CobbleStone.png"
                         Case McVersionState.Forge
                         Case McVersionState.Forge
                             Logo = PathImage & "Blocks/Anvil.png"
                             Logo = PathImage & "Blocks/Anvil.png"
+                        Case McVersionState.NeoForge
+                            Logo = PathImage & "Icons/NeoForged.png"
                         Case McVersionState.Fabric
                         Case McVersionState.Fabric
                             Logo = PathImage & "Blocks/Fabric.png"
                             Logo = PathImage & "Blocks/Fabric.png"
                         Case McVersionState.OptiFine
                         Case McVersionState.OptiFine
@@ -780,7 +791,7 @@ ExitDataLoad:
                             End If
                             End If
                         Case McVersionState.Old
                         Case McVersionState.Old
                             Info = "远古版本"
                             Info = "远古版本"
-                        Case McVersionState.Original, McVersionState.Forge, McVersionState.Fabric, McVersionState.OptiFine, McVersionState.LiteLoader
+                        Case McVersionState.Original, McVersionState.Forge, McVersionState.NeoForge, McVersionState.Fabric, McVersionState.OptiFine, McVersionState.LiteLoader
                             Info = Version.ToString
                             Info = Version.ToString
                         Case McVersionState.Fool
                         Case McVersionState.Fool
                             Info = GetMcFoolName(Version.McName)
                             Info = GetMcFoolName(Version.McName)
@@ -813,6 +824,7 @@ ExitDataLoad:
                     WriteIni(Path & "PCL\Setup.ini", "VersionOptiFine", Version.OptiFineVersion)
                     WriteIni(Path & "PCL\Setup.ini", "VersionOptiFine", Version.OptiFineVersion)
                     WriteIni(Path & "PCL\Setup.ini", "VersionLiteLoader", Version.HasLiteLoader)
                     WriteIni(Path & "PCL\Setup.ini", "VersionLiteLoader", Version.HasLiteLoader)
                     WriteIni(Path & "PCL\Setup.ini", "VersionForge", Version.ForgeVersion)
                     WriteIni(Path & "PCL\Setup.ini", "VersionForge", Version.ForgeVersion)
+                    WriteIni(Path & "PCL\Setup.ini", "VersionNeoForge", Version.NeoForgeVersion)
                     WriteIni(Path & "PCL\Setup.ini", "VersionApiCode", Version.SortCode)
                     WriteIni(Path & "PCL\Setup.ini", "VersionApiCode", Version.SortCode)
                     WriteIni(Path & "PCL\Setup.ini", "VersionOriginal", Version.McName)
                     WriteIni(Path & "PCL\Setup.ini", "VersionOriginal", Version.McName)
                     WriteIni(Path & "PCL\Setup.ini", "VersionOriginalMain", Version.McCodeMain)
                     WriteIni(Path & "PCL\Setup.ini", "VersionOriginalMain", Version.McCodeMain)
@@ -852,6 +864,7 @@ ExitDataLoad:
         OptiFine
         OptiFine
         Old
         Old
         Forge
         Forge
+        NeoForge
         LiteLoader
         LiteLoader
         Fabric
         Fabric
     End Enum
     End Enum
@@ -903,6 +916,17 @@ ExitDataLoad:
         ''' </summary>
         ''' </summary>
         Public ForgeVersion As String = ""
         Public ForgeVersion As String = ""
 
 
+        'NeoForge
+
+        ''' <summary>
+        ''' 该版本是否安装了 NeoForge。
+        ''' </summary>
+        Public HasNeoForge As Boolean = False
+        ''' <summary>
+        ''' NeoForge 版本号,如 31.1.2、14.23.5.2847。
+        ''' </summary>
+        Public NeoForgeVersion As String = ""
+
         'Fabric
         'Fabric
 
 
         ''' <summary>
         ''' <summary>
@@ -929,6 +953,7 @@ ExitDataLoad:
         Public Overrides Function ToString() As String
         Public Overrides Function ToString() As String
             ToString = ""
             ToString = ""
             If HasForge Then ToString += ", Forge" & If(ForgeVersion = "未知版本", "", " " & ForgeVersion)
             If HasForge Then ToString += ", Forge" & If(ForgeVersion = "未知版本", "", " " & ForgeVersion)
+            If HasNeoForge Then ToString += ", NeoForge" & If(NeoForgeVersion = "未知版本", "", " " & NeoForgeVersion)
             If HasFabric Then ToString += ", Fabric" & If(FabricVersion = "未知版本", "", " " & FabricVersion)
             If HasFabric Then ToString += ", Fabric" & If(FabricVersion = "未知版本", "", " " & FabricVersion)
             If HasOptiFine Then ToString += ", OptiFine" & If(OptiFineVersion = "未知版本", "", " " & OptiFineVersion)
             If HasOptiFine Then ToString += ", OptiFine" & If(OptiFineVersion = "未知版本", "", " " & OptiFineVersion)
             If HasLiteLoader Then ToString += ", LiteLoader"
             If HasLiteLoader Then ToString += ", LiteLoader"
@@ -965,6 +990,16 @@ ExitDataLoad:
                             Else
                             Else
                                 Throw New Exception("无效的 Forge 版本:" & ForgeVersion)
                                 Throw New Exception("无效的 Forge 版本:" & ForgeVersion)
                             End If
                             End If
+                        ElseIf HasNeoForge Then
+                            If NeoForgeVersion = "未知版本" Then Return 0
+                            Dim SubVersions = NeoForgeVersion.Split(".")
+                            If SubVersions.Length = 4 Then
+                                _SortCode = Val(SubVersions(0)) * 1000000 + Val(SubVersions(1)) * 10000 + Val(SubVersions(3))
+                            ElseIf SubVersions.Length = 3 Then
+                                _SortCode = Val(SubVersions(0)) * 1000000 + Val(SubVersions(1)) * 10000 + Val(SubVersions(2))
+                            Else
+                                Throw New Exception("无效的 NeoForge 版本:" & NeoForgeVersion)
+                            End If
                         ElseIf HasOptiFine Then
                         ElseIf HasOptiFine Then
                             If OptiFineVersion = "未知版本" Then Return 0
                             If OptiFineVersion = "未知版本" Then Return 0
                             '由对应原版次级版本号(2 位)、字母(2 位)、末尾数字(2 位)、测试标记(2 位,正式版为 99,Pre[x] 为 50+x,Beta[x] 为 x)组成
                             '由对应原版次级版本号(2 位)、字母(2 位)、末尾数字(2 位)、测试标记(2 位,正式版为 99,Pre[x] 为 50+x,Beta[x] 为 x)组成
@@ -1175,6 +1210,7 @@ OnLoaded:
                             Dim VersionInfo As New McVersionInfo With {
                             Dim VersionInfo As New McVersionInfo With {
                                 .FabricVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionFabric", ""),
                                 .FabricVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionFabric", ""),
                                 .ForgeVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionForge", ""),
                                 .ForgeVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionForge", ""),
+                                .NeoForgeVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionNeoForge", ""),
                                 .OptiFineVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionOptiFine", ""),
                                 .OptiFineVersion = ReadIni(Version.Path & "PCL\Setup.ini", "VersionOptiFine", ""),
                                 .HasLiteLoader = ReadIni(Version.Path & "PCL\Setup.ini", "VersionLiteLoader", False),
                                 .HasLiteLoader = ReadIni(Version.Path & "PCL\Setup.ini", "VersionLiteLoader", False),
                                 .SortCode = ReadIni(Version.Path & "PCL\Setup.ini", "VersionApiCode", -1),
                                 .SortCode = ReadIni(Version.Path & "PCL\Setup.ini", "VersionApiCode", -1),
@@ -1185,6 +1221,7 @@ OnLoaded:
                             }
                             }
                             VersionInfo.HasFabric = VersionInfo.FabricVersion.Count > 1
                             VersionInfo.HasFabric = VersionInfo.FabricVersion.Count > 1
                             VersionInfo.HasForge = VersionInfo.ForgeVersion.Count > 1
                             VersionInfo.HasForge = VersionInfo.ForgeVersion.Count > 1
+                            VersionInfo.HasNeoForge = VersionInfo.NeoForgeVersion.Count > 1
                             VersionInfo.HasOptiFine = VersionInfo.OptiFineVersion.Count > 1
                             VersionInfo.HasOptiFine = VersionInfo.OptiFineVersion.Count > 1
                             Version.Version = VersionInfo
                             Version.Version = VersionInfo
                         End If
                         End If
@@ -1273,7 +1310,7 @@ OnLoaded:
             McVersionFilter(VersionList, VersionListOriginal, {McVersionState.Fool}, McVersionCardType.Fool)
             McVersionFilter(VersionList, VersionListOriginal, {McVersionState.Fool}, McVersionCardType.Fool)
 
 
             '筛选 API 版本
             '筛选 API 版本
-            McVersionFilter(VersionList, VersionListOriginal, {McVersionState.Forge, McVersionState.LiteLoader, McVersionState.Fabric}, McVersionCardType.API)
+            McVersionFilter(VersionList, VersionListOriginal, {McVersionState.Forge, McVersionState.NeoForge, McVersionState.LiteLoader, McVersionState.Fabric}, McVersionCardType.API)
 
 
             '将老版本预先分类入不常用,只剩余原版、快照、OptiFine
             '将老版本预先分类入不常用,只剩余原版、快照、OptiFine
             Dim VersionUseful As New List(Of McVersion)
             Dim VersionUseful As New List(Of McVersion)
@@ -1407,7 +1444,7 @@ OnLoaded:
             End Function)
             End Function)
         End If
         End If
 
 
-        'API 版本:优先按版本排序,此后【先放 Fabric,再放 Forge(按版本号从高到低排序),最后放 LiteLoader(按名称排序)】
+        'API 版本:优先按版本排序,此后【先放 Fabric,再放 Forge,再放 NeoForge(按版本号从高到低排序),最后放 LiteLoader(按名称排序)】
         If ResultVersionList.ContainsKey(McVersionCardType.API) Then
         If ResultVersionList.ContainsKey(McVersionCardType.API) Then
             ResultVersionList(McVersionCardType.API) = Sort(ResultVersionList(McVersionCardType.API),
             ResultVersionList(McVersionCardType.API) = Sort(ResultVersionList(McVersionCardType.API),
             Function(Left As McVersion, Right As McVersion)
             Function(Left As McVersion, Right As McVersion)
@@ -1419,6 +1456,8 @@ OnLoaded:
                         Return Left.Version.HasFabric
                         Return Left.Version.HasFabric
                     ElseIf Left.Version.HasForge Xor Right.Version.HasForge Then
                     ElseIf Left.Version.HasForge Xor Right.Version.HasForge Then
                         Return Left.Version.HasForge
                         Return Left.Version.HasForge
+                    ElseIf Left.Version.HasNeoForge Xor Right.Version.HasNeoForge Then
+                        Return Left.Version.HasNeoForge
                     ElseIf Not Left.Version.SortCode <> Right.Version.SortCode Then
                     ElseIf Not Left.Version.SortCode <> Right.Version.SortCode Then
                         Return Left.Version.SortCode > Right.Version.SortCode
                         Return Left.Version.SortCode > Right.Version.SortCode
                     Else
                     Else

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

@@ -2194,9 +2194,9 @@ Retry:
             .Title = If(Entry.IsBeta, Entry.StdVersion & "-beta", Entry.StdVersion), .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry,
             .Title = If(Entry.IsBeta, Entry.StdVersion & "-beta", Entry.StdVersion), .SnapsToDevicePixels = True, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry,
             .Info = If(Entry.IsBeta, "测试版", "稳定版") &
             .Info = If(Entry.IsBeta, "测试版", "稳定版") &
                 If(Entry.ReleaseTime = "",
                 If(Entry.ReleaseTime = "",
-                If(ModeDebug, "种类:" & Entry.Category & If(Entry.Branch Is Nothing, "", ",开发分支:" & Entry.Branch), ""),
+                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), "")),
                 "发布于 " & Entry.ReleaseTime & If(ModeDebug, ",种类:" & Entry.Category & If(Entry.Branch Is Nothing, "", ",开发分支:" & Entry.Branch), "")),
-            .Logo = PathImage & "Blocks/Anvil.png"
+            .Logo = PathImage & "Icons/NeoForged.png"
         }
         }
         AddHandler NewItem.Click, OnClick
         AddHandler NewItem.Click, OnClick
         '建立菜单
         '建立菜单

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

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

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

@@ -541,7 +541,7 @@
         ElseIf SelectedForge IsNot Nothing Then
         ElseIf SelectedForge IsNot Nothing Then
             Return "pack://application:,,,/images/Blocks/Anvil.png"
             Return "pack://application:,,,/images/Blocks/Anvil.png"
         ElseIf SelectedNeoForge IsNot Nothing Then
         ElseIf SelectedNeoForge IsNot Nothing Then
-            Return "pack://application:,,,/images/Blocks/Anvil.png"
+            Return "pack://application:,,,/images/Icons/NeoForged.png"
         ElseIf SelectedLiteLoader IsNot Nothing Then
         ElseIf SelectedLiteLoader IsNot Nothing Then
             Return "pack://application:,,,/images/Blocks/Egg.png"
             Return "pack://application:,,,/images/Blocks/Egg.png"
         ElseIf SelectedOptiFine IsNot Nothing Then
         ElseIf SelectedOptiFine IsNot Nothing Then

+ 1 - 0
Plain Craft Launcher 2/Pages/PageVersion/PageVersionOverall.xaml

@@ -37,6 +37,7 @@
                             <local:MyComboBoxItem Content="红石灯(关)" Tag="pack://application:,,,/images/Blocks/RedstoneLampOff.png" />
                             <local:MyComboBoxItem Content="红石灯(关)" Tag="pack://application:,,,/images/Blocks/RedstoneLampOff.png" />
                             <local:MyComboBoxItem Content="鸡蛋" Tag="pack://application:,,,/images/Blocks/Egg.png" />
                             <local:MyComboBoxItem Content="鸡蛋" Tag="pack://application:,,,/images/Blocks/Egg.png" />
                             <local:MyComboBoxItem Content="布料(Fabric)" Tag="pack://application:,,,/images/Blocks/Fabric.png" />
                             <local:MyComboBoxItem Content="布料(Fabric)" Tag="pack://application:,,,/images/Blocks/Fabric.png" />
+                            <local:MyComboBoxItem Content="狐狸(NeoForge)" Tag="pack://application:,,,/images/Icons/NeoForged.png" />
                         </local:MyComboBox>
                         </local:MyComboBox>
                         <TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="分类" Margin="0,0,25,0" />
                         <TextBlock VerticalAlignment="Center" Grid.Row="2" HorizontalAlignment="Left" Text="分类" Margin="0,0,25,0" />
                         <local:MyComboBox Grid.Column="1" Grid.Row="2" x:Name="ComboDisplayType">
                         <local:MyComboBox Grid.Column="1" Grid.Row="2" x:Name="ComboDisplayType">

+ 2 - 0
Plain Craft Launcher 2/Resources/Custom.xaml

@@ -202,6 +202,8 @@
 			<!-- 鸡蛋 -->
 			<!-- 鸡蛋 -->
 			<Image Width="30" Margin="5,0,0,0" Source="pack://application:,,,/images/Blocks/Fabric.png"/>
 			<Image Width="30" Margin="5,0,0,0" Source="pack://application:,,,/images/Blocks/Fabric.png"/>
 			<!-- 布料(Fabric 图标) -->
 			<!-- 布料(Fabric 图标) -->
+      <Image Width="30" Margin="5,0,0,0" Source="pack://application:,,,/images/Icons/NeoForged.png"/>
+      <!-- 狐狸(NeoForge 图标) -->
 		</StackPanel>
 		</StackPanel>
         <TextBlock TextWrapping="Wrap" Margin="0,0,0,4"
         <TextBlock TextWrapping="Wrap" Margin="0,0,0,4"
                     Text="使用时,将上方对应行的 Source 复制到 MyListItem 的 Logo 属性处即可。"/>
                     Text="使用时,将上方对应行的 Source 复制到 MyListItem 的 Logo 属性处即可。"/>