fabric loader descriptors support
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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>()
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user