fabric loader descriptors support

This commit is contained in:
2025-01-02 18:42:19 +05:00
parent 679d89b4b0
commit 23ec6dd194
5 changed files with 41 additions and 22 deletions

View File

@@ -67,7 +67,7 @@ public class Library
public List<Rule>? rules { get; set; }
public Natives? natives { get; set; }
public Extract? extract { get; set; }
[JsonRequired] public LibraryDownloads downloads { get; set; } = null!;
public LibraryDownloads? downloads { get; set; }
}
public class AssetIndexProperties

View File

@@ -81,8 +81,8 @@ public class InstalledGameVersionProps : IComparable<InstalledGameVersionProps>,
new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Concat });
descriptorRaw = parentDescriptorRaw;
// removing dependency
descriptorRaw.Remove("inheritsFrom");
File.WriteAllText(DescriptorPath, descriptorRaw.ToString());
// descriptorRaw.Remove("inheritsFrom");
// File.WriteAllText(DescriptorPath, descriptorRaw.ToString());
}
var descriptor = descriptorRaw.ToObject<GameVersionDescriptor>()

View File

@@ -7,13 +7,28 @@ public class Libraries
{
private static readonly string[] enabled_features = [];
public record JarLib(string name, IOPath jarFilePath, Artifact artifact);
public record NativeLib(string name, IOPath jarFilePath, Artifact artifact, Extract? extractionOptions)
public record JarLib(string name, IOPath jarFilePath, Artifact? artifact);
public record NativeLib(string name, IOPath jarFilePath, Artifact? artifact, Extract? extractionOptions)
: JarLib(name, jarFilePath, artifact);
public IReadOnlyCollection<JarLib> Libs { get; }
private IOPath GetJarFilePath(Artifact artifact)
public static IOPath GetPathFromMavenName(string mavenName, string ext = "jar")
{
int sep_0 = mavenName.IndexOf(':');
if (sep_0 == -1)
throw new ArgumentException($"Invalid maven name: {mavenName}");
int sep_1 = mavenName.IndexOf(':', sep_0 + 1);
if (sep_1 == -1)
throw new ArgumentException($"Invalid maven name: {mavenName}");
var package = mavenName.Substring(0, sep_0).Replace('.', '/');
var artifact = mavenName.Substring(sep_0 + 1, sep_1 - sep_0 - 1);
var version = mavenName.Substring(sep_1 + 1);
string file_name = $"{artifact}-{version}.{ext}";
return Path.Concat(PathHelper.GetLibrariesDir(), package, artifact, version, file_name);
}
private static IOPath GetPathFromArtifact(Artifact artifact)
{
string relativePath;
if (!string.IsNullOrEmpty(artifact.path))
@@ -60,26 +75,30 @@ public class Libraries
}
Artifact artifact = null!;
if(l.downloads.classifiers != null && !l.downloads.classifiers.TryGetValue(nativesKey, out artifact!))
if(l.downloads?.classifiers != null && !l.downloads.classifiers.TryGetValue(nativesKey, out artifact!))
throw new Exception($"can't find artifact for '{l.name}' with nativesKey '{nativesKey}'");
// skipping duplicates (WHO THE HELL CREATES THIS DISCRIPTORS AAAAAAAAA)
if(!libHashes.Add(artifact.sha1))
continue;
libs.Add(new NativeLib(l.name, GetJarFilePath(artifact), artifact, l.extract));
libs.Add(new NativeLib(l.name, GetPathFromArtifact(artifact), artifact, l.extract));
}
else
{
Artifact? artifact = l.downloads.artifact;
if (artifact == null)
throw new NullReferenceException($"artifact for '{l.name}' is null");
// skipping duplicates
if(!libHashes.Add(artifact.sha1))
continue;
libs.Add(new JarLib(l.name, GetJarFilePath(artifact), artifact));
Artifact? artifact = l.downloads?.artifact;
if (artifact is null)
{
libs.Add(new JarLib(l.name, GetPathFromMavenName(l.name), artifact));
}
else
{
// skipping duplicates
if (!libHashes.Add(artifact.sha1))
continue;
libs.Add(new JarLib(l.name, GetPathFromArtifact(artifact), artifact));
}
}
}