summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI.Toolkit.CoreInterfaces
diff options
context:
space:
mode:
Diffstat (limited to 'src/StardewModdingAPI.Toolkit.CoreInterfaces')
-rw-r--r--src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifest.cs44
-rw-r--r--src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifestContentPackFor.cs12
-rw-r--r--src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifestDependency.cs18
-rw-r--r--src/StardewModdingAPI.Toolkit.CoreInterfaces/ISemanticVersion.cs62
-rw-r--r--src/StardewModdingAPI.Toolkit.CoreInterfaces/Properties/AssemblyInfo.cs4
-rw-r--r--src/StardewModdingAPI.Toolkit.CoreInterfaces/StardewModdingAPI.Toolkit.CoreInterfaces.csproj17
6 files changed, 157 insertions, 0 deletions
diff --git a/src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifest.cs b/src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifest.cs
new file mode 100644
index 00000000..7375f005
--- /dev/null
+++ b/src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifest.cs
@@ -0,0 +1,44 @@
+using System.Collections.Generic;
+
+namespace StardewModdingAPI
+{
+ /// <summary>A manifest which describes a mod for SMAPI.</summary>
+ public interface IManifest
+ {
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>The mod name.</summary>
+ string Name { get; }
+
+ /// <summary>A brief description of the mod.</summary>
+ string Description { get; }
+
+ /// <summary>The mod author's name.</summary>
+ string Author { get; }
+
+ /// <summary>The mod version.</summary>
+ ISemanticVersion Version { get; }
+
+ /// <summary>The minimum SMAPI version required by this mod, if any.</summary>
+ ISemanticVersion MinimumApiVersion { get; }
+
+ /// <summary>The unique mod ID.</summary>
+ string UniqueID { get; }
+
+ /// <summary>The name of the DLL in the directory that has the <c>Entry</c> method. Mutually exclusive with <see cref="ContentPackFor"/>.</summary>
+ string EntryDll { get; }
+
+ /// <summary>The mod which will read this as a content pack. Mutually exclusive with <see cref="EntryDll"/>.</summary>
+ IManifestContentPackFor ContentPackFor { get; }
+
+ /// <summary>The other mods that must be loaded before this mod.</summary>
+ IManifestDependency[] Dependencies { get; }
+
+ /// <summary>The namespaced mod IDs to query for updates (like <c>Nexus:541</c>).</summary>
+ string[] UpdateKeys { get; }
+
+ /// <summary>Any manifest fields which didn't match a valid field.</summary>
+ IDictionary<string, object> ExtraFields { get; }
+ }
+}
diff --git a/src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifestContentPackFor.cs b/src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifestContentPackFor.cs
new file mode 100644
index 00000000..f05a3873
--- /dev/null
+++ b/src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifestContentPackFor.cs
@@ -0,0 +1,12 @@
+namespace StardewModdingAPI
+{
+ /// <summary>Indicates which mod can read the content pack represented by the containing manifest.</summary>
+ public interface IManifestContentPackFor
+ {
+ /// <summary>The unique ID of the mod which can read this content pack.</summary>
+ string UniqueID { get; }
+
+ /// <summary>The minimum required version (if any).</summary>
+ ISemanticVersion MinimumVersion { get; }
+ }
+}
diff --git a/src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifestDependency.cs b/src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifestDependency.cs
new file mode 100644
index 00000000..e86cd1f4
--- /dev/null
+++ b/src/StardewModdingAPI.Toolkit.CoreInterfaces/IManifestDependency.cs
@@ -0,0 +1,18 @@
+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; }
+
+ /// <summary>The minimum required version (if any).</summary>
+ ISemanticVersion MinimumVersion { get; }
+
+ /// <summary>Whether the dependency must be installed to use the mod.</summary>
+ bool IsRequired { get; }
+ }
+}
diff --git a/src/StardewModdingAPI.Toolkit.CoreInterfaces/ISemanticVersion.cs b/src/StardewModdingAPI.Toolkit.CoreInterfaces/ISemanticVersion.cs
new file mode 100644
index 00000000..961ef777
--- /dev/null
+++ b/src/StardewModdingAPI.Toolkit.CoreInterfaces/ISemanticVersion.cs
@@ -0,0 +1,62 @@
+using System;
+
+namespace StardewModdingAPI
+{
+ /// <summary>A semantic version with an optional release tag.</summary>
+ public interface ISemanticVersion : IComparable<ISemanticVersion>, IEquatable<ISemanticVersion>
+ {
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>The major version incremented for major API changes.</summary>
+ int MajorVersion { get; }
+
+ /// <summary>The minor version incremented for backwards-compatible changes.</summary>
+ int MinorVersion { get; }
+
+ /// <summary>The patch version for backwards-compatible bug fixes.</summary>
+ int PatchVersion { get; }
+
+ /// <summary>An optional build tag.</summary>
+ string Build { get; }
+
+
+ /*********
+ ** Accessors
+ *********/
+ /// <summary>Whether this is a pre-release version.</summary>
+ bool IsPrerelease();
+
+ /// <summary>Get whether this version is older than the specified version.</summary>
+ /// <param name="other">The version to compare with this instance.</param>
+ bool IsOlderThan(ISemanticVersion other);
+
+ /// <summary>Get whether this version is older than the specified version.</summary>
+ /// <param name="other">The version to compare with this instance.</param>
+ /// <exception cref="FormatException">The specified version is not a valid semantic version.</exception>
+ bool IsOlderThan(string other);
+
+ /// <summary>Get whether this version is newer than the specified version.</summary>
+ /// <param name="other">The version to compare with this instance.</param>
+ bool IsNewerThan(ISemanticVersion other);
+
+ /// <summary>Get whether this version is newer than the specified version.</summary>
+ /// <param name="other">The version to compare with this instance.</param>
+ /// <exception cref="FormatException">The specified version is not a valid semantic version.</exception>
+ bool IsNewerThan(string other);
+
+ /// <summary>Get whether this version is between two specified versions (inclusively).</summary>
+ /// <param name="min">The minimum version.</param>
+ /// <param name="max">The maximum version.</param>
+ bool IsBetween(ISemanticVersion min, ISemanticVersion max);
+
+ /// <summary>Get whether this version is between two specified versions (inclusively).</summary>
+ /// <param name="min">The minimum version.</param>
+ /// <param name="max">The maximum version.</param>
+ /// <exception cref="FormatException">One of the specified versions is not a valid semantic version.</exception>
+ bool IsBetween(string min, string max);
+
+ /// <summary>Get a string representation of the version.</summary>
+ string ToString();
+ }
+}
diff --git a/src/StardewModdingAPI.Toolkit.CoreInterfaces/Properties/AssemblyInfo.cs b/src/StardewModdingAPI.Toolkit.CoreInterfaces/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..a29ba6cf
--- /dev/null
+++ b/src/StardewModdingAPI.Toolkit.CoreInterfaces/Properties/AssemblyInfo.cs
@@ -0,0 +1,4 @@
+using System.Reflection;
+
+[assembly: AssemblyTitle("SMAPI.Toolkit.CoreInterfaces")]
+[assembly: AssemblyDescription("Provides toolkit interfaces which are available to SMAPI mods.")]
diff --git a/src/StardewModdingAPI.Toolkit.CoreInterfaces/StardewModdingAPI.Toolkit.CoreInterfaces.csproj b/src/StardewModdingAPI.Toolkit.CoreInterfaces/StardewModdingAPI.Toolkit.CoreInterfaces.csproj
new file mode 100644
index 00000000..525931e5
--- /dev/null
+++ b/src/StardewModdingAPI.Toolkit.CoreInterfaces/StardewModdingAPI.Toolkit.CoreInterfaces.csproj
@@ -0,0 +1,17 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFrameworks>net4.5;netstandard2.0</TargetFrameworks>
+ <RootNamespace>StardewModdingAPI</RootNamespace>
+ <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
+ <OutputPath>..\..\bin\$(Configuration)\SMAPI.Toolkit.CoreInterfaces</OutputPath>
+ <DocumentationFile>..\..\bin\$(Configuration)\SMAPI.Toolkit.CoreInterfaces\$(TargetFramework)\StardewModdingAPI.Toolkit.CoreInterfaces.xml</DocumentationFile>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <Compile Include="..\..\build\GlobalAssemblyInfo.cs" Link="Properties\GlobalAssemblyInfo.cs" />
+ </ItemGroup>
+
+ <Import Project="..\..\build\common.targets" />
+
+</Project>