add basic dependencies to manifest (#285)
This commit is contained in:
parent
17ff230d8e
commit
3da27346c6
|
@ -21,7 +21,7 @@ namespace StardewModdingAPI.Framework.Models
|
|||
public string Author { get; set; }
|
||||
|
||||
/// <summary>The mod version.</summary>
|
||||
[JsonConverter(typeof(SemanticVersionConverter))]
|
||||
[JsonConverter(typeof(ManifestFieldConverter))]
|
||||
public ISemanticVersion Version { get; set; }
|
||||
|
||||
/// <summary>The minimum SMAPI version required by this mod, if any.</summary>
|
||||
|
@ -30,6 +30,10 @@ namespace StardewModdingAPI.Framework.Models
|
|||
/// <summary>The name of the DLL in the directory that has the <see cref="Mod.Entry"/> method.</summary>
|
||||
public string EntryDll { get; set; }
|
||||
|
||||
/// <summary>The other mods that must be loaded before this mod.</summary>
|
||||
[JsonConverter(typeof(ManifestFieldConverter))]
|
||||
public IManifestDependency[] Dependencies { get; set; }
|
||||
|
||||
/// <summary>The unique mod ID.</summary>
|
||||
public string UniqueID { get; set; }
|
||||
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
namespace StardewModdingAPI.Framework.Models
|
||||
{
|
||||
/// <summary>A mod dependency listed in a mod manifest.</summary>
|
||||
internal class ManifestDependency : IManifestDependency
|
||||
{
|
||||
/*********
|
||||
** Accessors
|
||||
*********/
|
||||
/// <summary>The unique mod ID to require.</summary>
|
||||
public string UniqueID { get; set; }
|
||||
|
||||
|
||||
/*********
|
||||
** Public methods
|
||||
*********/
|
||||
/// <summary>Construct an instance.</summary>
|
||||
/// <param name="uniqueID">The unique mod ID to require.</param>
|
||||
public ManifestDependency(string uniqueID)
|
||||
{
|
||||
this.UniqueID = uniqueID;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,11 +1,13 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using StardewModdingAPI.Framework.Models;
|
||||
|
||||
namespace StardewModdingAPI.Framework.Serialisation
|
||||
{
|
||||
/// <summary>Overrides how SMAPI reads and writes <see cref="ISemanticVersion"/>.</summary>
|
||||
internal class SemanticVersionConverter : JsonConverter
|
||||
/// <summary>Overrides how SMAPI reads and writes <see cref="ISemanticVersion"/> and <see cref="IManifestDependency"/> fields.</summary>
|
||||
internal class ManifestFieldConverter : JsonConverter
|
||||
{
|
||||
/*********
|
||||
** Accessors
|
||||
|
@ -21,7 +23,7 @@ namespace StardewModdingAPI.Framework.Serialisation
|
|||
/// <param name="objectType">The object type.</param>
|
||||
public override bool CanConvert(Type objectType)
|
||||
{
|
||||
return objectType == typeof(ISemanticVersion);
|
||||
return objectType == typeof(ISemanticVersion) || objectType == typeof(IManifestDependency[]);
|
||||
}
|
||||
|
||||
/// <summary>Reads the JSON representation of the object.</summary>
|
||||
|
@ -31,12 +33,31 @@ namespace StardewModdingAPI.Framework.Serialisation
|
|||
/// <param name="serializer">The calling serializer.</param>
|
||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||
{
|
||||
JObject obj = JObject.Load(reader);
|
||||
int major = obj.Value<int>("MajorVersion");
|
||||
int minor = obj.Value<int>("MinorVersion");
|
||||
int patch = obj.Value<int>("PatchVersion");
|
||||
string build = obj.Value<string>("Build");
|
||||
return new SemanticVersion(major, minor, patch, build);
|
||||
// semantic version
|
||||
if (objectType == typeof(ISemanticVersion))
|
||||
{
|
||||
JObject obj = JObject.Load(reader);
|
||||
int major = obj.Value<int>(nameof(ISemanticVersion.MajorVersion));
|
||||
int minor = obj.Value<int>(nameof(ISemanticVersion.MinorVersion));
|
||||
int patch = obj.Value<int>(nameof(ISemanticVersion.PatchVersion));
|
||||
string build = obj.Value<string>(nameof(ISemanticVersion.Build));
|
||||
return new SemanticVersion(major, minor, patch, build);
|
||||
}
|
||||
|
||||
// manifest dependency
|
||||
if (objectType == typeof(IManifestDependency[]))
|
||||
{
|
||||
List<IManifestDependency> result = new List<IManifestDependency>();
|
||||
foreach (JObject obj in JArray.Load(reader).Children<JObject>())
|
||||
{
|
||||
string uniqueID = obj.Value<string>(nameof(IManifestDependency.UniqueID));
|
||||
result.Add(new ManifestDependency(uniqueID));
|
||||
}
|
||||
return result.ToArray();
|
||||
}
|
||||
|
||||
// unknown
|
||||
throw new NotSupportedException($"Unknown type '{objectType?.FullName}'.");
|
||||
}
|
||||
|
||||
/// <summary>Writes the JSON representation of the object.</summary>
|
|
@ -29,6 +29,9 @@ namespace StardewModdingAPI
|
|||
/// <summary>The name of the DLL in the directory that has the <see cref="Mod.Entry"/> method.</summary>
|
||||
string EntryDll { get; }
|
||||
|
||||
/// <summary>The other mods that must be loaded before this mod.</summary>
|
||||
IManifestDependency[] Dependencies { get; }
|
||||
|
||||
/// <summary>Any manifest fields which didn't match a valid field.</summary>
|
||||
IDictionary<string, object> ExtraFields { get; }
|
||||
}
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
namespace StardewModdingAPI
|
||||
{
|
||||
/// <summary>A mod dependency listed in a mod manifest.</summary>
|
||||
public interface IManifestDependency
|
||||
{
|
||||
/*********
|
||||
** Accessors
|
||||
*********/
|
||||
/// <summary>The unique mod ID to require.</summary>
|
||||
string UniqueID { get; }
|
||||
}
|
||||
}
|
|
@ -133,6 +133,7 @@
|
|||
<Compile Include="Framework\Logging\ConsoleInterceptionManager.cs" />
|
||||
<Compile Include="Framework\Logging\InterceptingTextWriter.cs" />
|
||||
<Compile Include="Framework\CommandHelper.cs" />
|
||||
<Compile Include="Framework\Models\ManifestDependency.cs" />
|
||||
<Compile Include="Framework\Models\ModCompatibilityType.cs" />
|
||||
<Compile Include="Framework\Models\SConfig.cs" />
|
||||
<Compile Include="Framework\ModLoading\ModMetadata.cs" />
|
||||
|
@ -141,13 +142,14 @@
|
|||
<Compile Include="Framework\SContentManager.cs" />
|
||||
<Compile Include="Framework\Serialisation\JsonHelper.cs" />
|
||||
<Compile Include="Framework\Serialisation\SelectiveStringEnumConverter.cs" />
|
||||
<Compile Include="Framework\Serialisation\SemanticVersionConverter.cs" />
|
||||
<Compile Include="Framework\Serialisation\ManifestFieldConverter.cs" />
|
||||
<Compile Include="ICommandHelper.cs" />
|
||||
<Compile Include="IContentEventData.cs" />
|
||||
<Compile Include="IContentEventHelper.cs" />
|
||||
<Compile Include="IContentEventHelperForDictionary.cs" />
|
||||
<Compile Include="IContentEventHelperForImage.cs" />
|
||||
<Compile Include="IContentHelper.cs" />
|
||||
<Compile Include="IManifestDependency.cs" />
|
||||
<Compile Include="IModRegistry.cs" />
|
||||
<Compile Include="Events\LocationEvents.cs" />
|
||||
<Compile Include="Events\MenuEvents.cs" />
|
||||
|
|
Loading…
Reference in New Issue