From eedb0fe55009a318afe97fa18e1b6c2269b0d7b5 Mon Sep 17 00:00:00 2001 From: laolarou Date: Mon, 1 Jan 2024 20:31:30 -0800 Subject: [PATCH] fix Forge launch issue --- .../ProjBobcat/Class/Model/MavenInfo.cs | 2 +- .../Launch/DefaultVersionLocator.cs | 37 ++++++++++++------- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/ProjBobcat/ProjBobcat/Class/Model/MavenInfo.cs b/ProjBobcat/ProjBobcat/Class/Model/MavenInfo.cs index b481d915..c9bff564 100644 --- a/ProjBobcat/ProjBobcat/Class/Model/MavenInfo.cs +++ b/ProjBobcat/ProjBobcat/Class/Model/MavenInfo.cs @@ -4,7 +4,7 @@ /// Maven包的有关信息。 /// Maven Package Information. /// -public class MavenInfo +public record MavenInfo { /// /// 组织名。 diff --git a/ProjBobcat/ProjBobcat/DefaultComponent/Launch/DefaultVersionLocator.cs b/ProjBobcat/ProjBobcat/DefaultComponent/Launch/DefaultVersionLocator.cs index f0c295ef..0f06b267 100644 --- a/ProjBobcat/ProjBobcat/DefaultComponent/Launch/DefaultVersionLocator.cs +++ b/ProjBobcat/ProjBobcat/DefaultComponent/Launch/DefaultVersionLocator.cs @@ -188,6 +188,19 @@ public override (List, List) GetNatives(Library[] libr // 不同版本的Minecraft有不同的library JSON字符串的结构。 // Different versions of Minecraft have different library JSON's structure. + // Fix for new native format introduced in 1.19 + if (lib.Name.Contains("natives", StringComparison.OrdinalIgnoreCase) && + lib.Downloads?.Artifact != null) + { + result.Item1.Add(new NativeFileInfo + { + Extract = lib.Extract, + FileInfo = lib.Downloads.Artifact + }); + + continue; + } + var isNative = (lib.Natives?.Count ?? 0) > 0; if (isNative) { @@ -263,22 +276,20 @@ public override (List, List) GetNatives(Library[] libr if (lib.Downloads?.Artifact != null) { - if (lib.Downloads.Artifact.Name == null) - { + if (string.IsNullOrEmpty(lib.Downloads.Artifact.Name)) lib.Downloads.Artifact.Name = lib.Name; - - if (!result.Item2.Any(l => l.Name!.Equals(lib.Name, StringComparison.OrdinalIgnoreCase))) - result.Item2.Add(lib.Downloads.Artifact); - } + + if (!result.Item2.Any(l => l.Name!.Equals(lib.Name, StringComparison.OrdinalIgnoreCase))) + result.Item2.Add(lib.Downloads.Artifact); } else { - if ((lib.Natives?.Count ?? 0) == 0) - if (!result.Item2.Any(l => l.Name!.Equals(lib.Name, StringComparison.OrdinalIgnoreCase))) - result.Item2.Add(new FileInfo - { - Name = lib.Name - }); + if ((lib.Natives?.Count ?? 0) != 0) continue; + if (!result.Item2.Any(l => l.Name!.Equals(lib.Name, StringComparison.OrdinalIgnoreCase))) + result.Item2.Add(new FileInfo + { + Name = lib.Name + }); } } @@ -441,7 +452,7 @@ public override (List, List) GetNatives(Library[] libr continue; var lMaven = result.Libraries[j].Name!.ResolveMavenString()!; - if (!lMaven.GetMavenFullName().Equals(mLMaven.GetMavenFullName(), StringComparison.Ordinal)) + if (lMaven != mLMaven) continue; var v1 = new ComparableVersion(lMaven.Version);