add compile flag for experimental mod dependencies features
This commit is contained in:
parent
bf02c54f8b
commit
89d7a3f846
|
@ -70,7 +70,9 @@ namespace StardewModdingAPI.Tests
|
||||||
[nameof(IManifest.UniqueID)] = $"{Sample.String()}.{Sample.String()}",
|
[nameof(IManifest.UniqueID)] = $"{Sample.String()}.{Sample.String()}",
|
||||||
[nameof(IManifest.EntryDll)] = $"{Sample.String()}.dll",
|
[nameof(IManifest.EntryDll)] = $"{Sample.String()}.dll",
|
||||||
[nameof(IManifest.MinimumApiVersion)] = $"{Sample.Int()}.{Sample.Int()}-{Sample.String()}",
|
[nameof(IManifest.MinimumApiVersion)] = $"{Sample.Int()}.{Sample.Int()}-{Sample.String()}",
|
||||||
|
#if EXPERIMENTAL
|
||||||
[nameof(IManifest.Dependencies)] = new[] { originalDependency },
|
[nameof(IManifest.Dependencies)] = new[] { originalDependency },
|
||||||
|
#endif
|
||||||
["ExtraString"] = Sample.String(),
|
["ExtraString"] = Sample.String(),
|
||||||
["ExtraInt"] = Sample.Int()
|
["ExtraInt"] = Sample.Int()
|
||||||
};
|
};
|
||||||
|
@ -107,9 +109,11 @@ namespace StardewModdingAPI.Tests
|
||||||
Assert.AreEqual(original["ExtraString"], mod.Manifest.ExtraFields["ExtraString"], "The manifest's extra fields should contain an 'ExtraString' value.");
|
Assert.AreEqual(original["ExtraString"], mod.Manifest.ExtraFields["ExtraString"], "The manifest's extra fields should contain an 'ExtraString' value.");
|
||||||
Assert.AreEqual(original["ExtraInt"], mod.Manifest.ExtraFields["ExtraInt"], "The manifest's extra fields should contain an 'ExtraInt' value.");
|
Assert.AreEqual(original["ExtraInt"], mod.Manifest.ExtraFields["ExtraInt"], "The manifest's extra fields should contain an 'ExtraInt' value.");
|
||||||
|
|
||||||
|
#if EXPERIMENTAL
|
||||||
Assert.IsNotNull(mod.Manifest.Dependencies, "The dependencies field should not be null.");
|
Assert.IsNotNull(mod.Manifest.Dependencies, "The dependencies field should not be null.");
|
||||||
Assert.AreEqual(1, mod.Manifest.Dependencies.Length, "The dependencies field should contain one value.");
|
Assert.AreEqual(1, mod.Manifest.Dependencies.Length, "The dependencies field should contain one value.");
|
||||||
Assert.AreEqual(originalDependency[nameof(IManifestDependency.UniqueID)], mod.Manifest.Dependencies[0].UniqueID, "The first dependency's unique ID doesn't match.");
|
Assert.AreEqual(originalDependency[nameof(IManifestDependency.UniqueID)], mod.Manifest.Dependencies[0].UniqueID, "The first dependency's unique ID doesn't match.");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/****
|
/****
|
||||||
|
@ -211,6 +215,7 @@ namespace StardewModdingAPI.Tests
|
||||||
// if Moq doesn't throw a method-not-setup exception, the validation didn't override the status.
|
// if Moq doesn't throw a method-not-setup exception, the validation didn't override the status.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if EXPERIMENTAL
|
||||||
/****
|
/****
|
||||||
** ProcessDependencies
|
** ProcessDependencies
|
||||||
****/
|
****/
|
||||||
|
@ -339,6 +344,7 @@ namespace StardewModdingAPI.Tests
|
||||||
modD.Verify(p => p.SetStatus(ModMetadataStatus.Failed, It.IsAny<string>()), Times.Once, "Mod D was expected to fail since it's part of a dependency loop.");
|
modD.Verify(p => p.SetStatus(ModMetadataStatus.Failed, It.IsAny<string>()), Times.Once, "Mod D was expected to fail since it's part of a dependency loop.");
|
||||||
modE.Verify(p => p.SetStatus(ModMetadataStatus.Failed, It.IsAny<string>()), Times.Once, "Mod E was expected to fail since it's part of a dependency loop.");
|
modE.Verify(p => p.SetStatus(ModMetadataStatus.Failed, It.IsAny<string>()), Times.Once, "Mod E was expected to fail since it's part of a dependency loop.");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*********
|
/*********
|
||||||
|
@ -361,6 +367,7 @@ namespace StardewModdingAPI.Tests
|
||||||
return manifest;
|
return manifest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if EXPERIMENTAL
|
||||||
/// <summary>Get a randomised basic manifest.</summary>
|
/// <summary>Get a randomised basic manifest.</summary>
|
||||||
/// <param name="uniqueID">The mod's name and unique ID.</param>
|
/// <param name="uniqueID">The mod's name and unique ID.</param>
|
||||||
/// <param name="dependencies">The dependencies this mod requires.</param>
|
/// <param name="dependencies">The dependencies this mod requires.</param>
|
||||||
|
@ -387,5 +394,6 @@ namespace StardewModdingAPI.Tests
|
||||||
}
|
}
|
||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,6 +126,7 @@ namespace StardewModdingAPI.Framework.ModLoading
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if EXPERIMENTAL
|
||||||
/// <summary>Sort the given mods by the order they should be loaded.</summary>
|
/// <summary>Sort the given mods by the order they should be loaded.</summary>
|
||||||
/// <param name="mods">The mods to process.</param>
|
/// <param name="mods">The mods to process.</param>
|
||||||
public IEnumerable<IModMetadata> ProcessDependencies(IEnumerable<IModMetadata> mods)
|
public IEnumerable<IModMetadata> ProcessDependencies(IEnumerable<IModMetadata> mods)
|
||||||
|
@ -138,11 +139,13 @@ namespace StardewModdingAPI.Framework.ModLoading
|
||||||
|
|
||||||
return sortedMods.Reverse();
|
return sortedMods.Reverse();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*********
|
/*********
|
||||||
** Private methods
|
** Private methods
|
||||||
*********/
|
*********/
|
||||||
|
#if EXPERIMENTAL
|
||||||
/// <summary>Sort a mod's dependencies by the order they should be loaded, and remove any mods that can't be loaded due to missing or conflicting dependencies.</summary>
|
/// <summary>Sort a mod's dependencies by the order they should be loaded, and remove any mods that can't be loaded due to missing or conflicting dependencies.</summary>
|
||||||
/// <param name="mods">The full list of mods being validated.</param>
|
/// <param name="mods">The full list of mods being validated.</param>
|
||||||
/// <param name="mod">The mod whose dependencies to process.</param>
|
/// <param name="mod">The mod whose dependencies to process.</param>
|
||||||
|
@ -257,6 +260,7 @@ namespace StardewModdingAPI.Framework.ModLoading
|
||||||
return states[mod] = ModDependencyStatus.Sorted;
|
return states[mod] = ModDependencyStatus.Sorted;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/// <summary>Get all mod folders in a root folder, passing through empty folders as needed.</summary>
|
/// <summary>Get all mod folders in a root folder, passing through empty folders as needed.</summary>
|
||||||
/// <param name="rootPath">The root folder path to search.</param>
|
/// <param name="rootPath">The root folder path to search.</param>
|
||||||
|
|
|
@ -30,9 +30,11 @@ namespace StardewModdingAPI.Framework.Models
|
||||||
/// <summary>The name of the DLL in the directory that has the <see cref="Mod.Entry"/> method.</summary>
|
/// <summary>The name of the DLL in the directory that has the <see cref="Mod.Entry"/> method.</summary>
|
||||||
public string EntryDll { get; set; }
|
public string EntryDll { get; set; }
|
||||||
|
|
||||||
|
#if EXPERIMENTAL
|
||||||
/// <summary>The other mods that must be loaded before this mod.</summary>
|
/// <summary>The other mods that must be loaded before this mod.</summary>
|
||||||
[JsonConverter(typeof(ManifestFieldConverter))]
|
[JsonConverter(typeof(ManifestFieldConverter))]
|
||||||
public IManifestDependency[] Dependencies { get; set; }
|
public IManifestDependency[] Dependencies { get; set; }
|
||||||
|
#endif
|
||||||
|
|
||||||
/// <summary>The unique mod ID.</summary>
|
/// <summary>The unique mod ID.</summary>
|
||||||
public string UniqueID { get; set; }
|
public string UniqueID { get; set; }
|
||||||
|
|
|
@ -29,8 +29,10 @@ namespace StardewModdingAPI
|
||||||
/// <summary>The name of the DLL in the directory that has the <see cref="Mod.Entry"/> method.</summary>
|
/// <summary>The name of the DLL in the directory that has the <see cref="Mod.Entry"/> method.</summary>
|
||||||
string EntryDll { get; }
|
string EntryDll { get; }
|
||||||
|
|
||||||
|
#if EXPERIMENTAL
|
||||||
/// <summary>The other mods that must be loaded before this mod.</summary>
|
/// <summary>The other mods that must be loaded before this mod.</summary>
|
||||||
IManifestDependency[] Dependencies { get; }
|
IManifestDependency[] Dependencies { get; }
|
||||||
|
#endif
|
||||||
|
|
||||||
/// <summary>Any manifest fields which didn't match a valid field.</summary>
|
/// <summary>Any manifest fields which didn't match a valid field.</summary>
|
||||||
IDictionary<string, object> ExtraFields { get; }
|
IDictionary<string, object> ExtraFields { get; }
|
||||||
|
|
|
@ -357,8 +357,10 @@ namespace StardewModdingAPI
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if EXPERIMENTAL
|
||||||
// process dependencies
|
// process dependencies
|
||||||
mods = resolver.ProcessDependencies(mods).ToArray();
|
mods = resolver.ProcessDependencies(mods).ToArray();
|
||||||
|
#endif
|
||||||
|
|
||||||
// load mods
|
// load mods
|
||||||
modsLoaded = this.LoadMods(mods, new JsonHelper(), (SContentManager)Game1.content, deprecationWarnings);
|
modsLoaded = this.LoadMods(mods, new JsonHelper(), (SContentManager)Game1.content, deprecationWarnings);
|
||||||
|
|
Loading…
Reference in New Issue