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; }
|
public string Author { get; set; }
|
||||||
|
|
||||||
/// <summary>The mod version.</summary>
|
/// <summary>The mod version.</summary>
|
||||||
[JsonConverter(typeof(SemanticVersionConverter))]
|
[JsonConverter(typeof(ManifestFieldConverter))]
|
||||||
public ISemanticVersion Version { get; set; }
|
public ISemanticVersion Version { get; set; }
|
||||||
|
|
||||||
/// <summary>The minimum SMAPI version required by this mod, if any.</summary>
|
/// <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>
|
/// <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; }
|
||||||
|
|
||||||
|
/// <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>
|
/// <summary>The unique mod ID.</summary>
|
||||||
public string UniqueID { get; set; }
|
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;
|
||||||
|
using System.Collections.Generic;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Newtonsoft.Json.Linq;
|
using Newtonsoft.Json.Linq;
|
||||||
|
using StardewModdingAPI.Framework.Models;
|
||||||
|
|
||||||
namespace StardewModdingAPI.Framework.Serialisation
|
namespace StardewModdingAPI.Framework.Serialisation
|
||||||
{
|
{
|
||||||
/// <summary>Overrides how SMAPI reads and writes <see cref="ISemanticVersion"/>.</summary>
|
/// <summary>Overrides how SMAPI reads and writes <see cref="ISemanticVersion"/> and <see cref="IManifestDependency"/> fields.</summary>
|
||||||
internal class SemanticVersionConverter : JsonConverter
|
internal class ManifestFieldConverter : JsonConverter
|
||||||
{
|
{
|
||||||
/*********
|
/*********
|
||||||
** Accessors
|
** Accessors
|
||||||
|
@ -21,7 +23,7 @@ namespace StardewModdingAPI.Framework.Serialisation
|
||||||
/// <param name="objectType">The object type.</param>
|
/// <param name="objectType">The object type.</param>
|
||||||
public override bool CanConvert(Type objectType)
|
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>
|
/// <summary>Reads the JSON representation of the object.</summary>
|
||||||
|
@ -31,12 +33,31 @@ namespace StardewModdingAPI.Framework.Serialisation
|
||||||
/// <param name="serializer">The calling serializer.</param>
|
/// <param name="serializer">The calling serializer.</param>
|
||||||
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
|
||||||
{
|
{
|
||||||
JObject obj = JObject.Load(reader);
|
// semantic version
|
||||||
int major = obj.Value<int>("MajorVersion");
|
if (objectType == typeof(ISemanticVersion))
|
||||||
int minor = obj.Value<int>("MinorVersion");
|
{
|
||||||
int patch = obj.Value<int>("PatchVersion");
|
JObject obj = JObject.Load(reader);
|
||||||
string build = obj.Value<string>("Build");
|
int major = obj.Value<int>(nameof(ISemanticVersion.MajorVersion));
|
||||||
return new SemanticVersion(major, minor, patch, build);
|
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>
|
/// <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>
|
/// <summary>The name of the DLL in the directory that has the <see cref="Mod.Entry"/> method.</summary>
|
||||||
string EntryDll { get; }
|
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>
|
/// <summary>Any manifest fields which didn't match a valid field.</summary>
|
||||||
IDictionary<string, object> ExtraFields { get; }
|
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\ConsoleInterceptionManager.cs" />
|
||||||
<Compile Include="Framework\Logging\InterceptingTextWriter.cs" />
|
<Compile Include="Framework\Logging\InterceptingTextWriter.cs" />
|
||||||
<Compile Include="Framework\CommandHelper.cs" />
|
<Compile Include="Framework\CommandHelper.cs" />
|
||||||
|
<Compile Include="Framework\Models\ManifestDependency.cs" />
|
||||||
<Compile Include="Framework\Models\ModCompatibilityType.cs" />
|
<Compile Include="Framework\Models\ModCompatibilityType.cs" />
|
||||||
<Compile Include="Framework\Models\SConfig.cs" />
|
<Compile Include="Framework\Models\SConfig.cs" />
|
||||||
<Compile Include="Framework\ModLoading\ModMetadata.cs" />
|
<Compile Include="Framework\ModLoading\ModMetadata.cs" />
|
||||||
|
@ -141,13 +142,14 @@
|
||||||
<Compile Include="Framework\SContentManager.cs" />
|
<Compile Include="Framework\SContentManager.cs" />
|
||||||
<Compile Include="Framework\Serialisation\JsonHelper.cs" />
|
<Compile Include="Framework\Serialisation\JsonHelper.cs" />
|
||||||
<Compile Include="Framework\Serialisation\SelectiveStringEnumConverter.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="ICommandHelper.cs" />
|
||||||
<Compile Include="IContentEventData.cs" />
|
<Compile Include="IContentEventData.cs" />
|
||||||
<Compile Include="IContentEventHelper.cs" />
|
<Compile Include="IContentEventHelper.cs" />
|
||||||
<Compile Include="IContentEventHelperForDictionary.cs" />
|
<Compile Include="IContentEventHelperForDictionary.cs" />
|
||||||
<Compile Include="IContentEventHelperForImage.cs" />
|
<Compile Include="IContentEventHelperForImage.cs" />
|
||||||
<Compile Include="IContentHelper.cs" />
|
<Compile Include="IContentHelper.cs" />
|
||||||
|
<Compile Include="IManifestDependency.cs" />
|
||||||
<Compile Include="IModRegistry.cs" />
|
<Compile Include="IModRegistry.cs" />
|
||||||
<Compile Include="Events\LocationEvents.cs" />
|
<Compile Include="Events\LocationEvents.cs" />
|
||||||
<Compile Include="Events\MenuEvents.cs" />
|
<Compile Include="Events\MenuEvents.cs" />
|
||||||
|
|
Loading…
Reference in New Issue