summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'src/StardewModdingAPI/Framework')
-rw-r--r--src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs31
-rw-r--r--src/StardewModdingAPI/Framework/Models/Manifest.cs10
-rw-r--r--src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs18
-rw-r--r--src/StardewModdingAPI/Framework/Models/ModDataRecord.cs4
4 files changed, 21 insertions, 42 deletions
diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs
index 4d20e7c8..d0ef1b08 100644
--- a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs
+++ b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs
@@ -61,13 +61,9 @@ namespace StardewModdingAPI.Framework.ModLoading
dataRecord = dataRecords.FirstOrDefault(record => record.ID.Matches(key, manifest));
}
- // apply defaults
- if (dataRecord?.Defaults != null)
- {
- manifest.ChucklefishID = manifest.ChucklefishID ?? dataRecord.Defaults.ChucklefishID;
- manifest.GitHubProject = manifest.GitHubProject ?? dataRecord.Defaults.GitHubProject;
- manifest.NexusID = manifest.NexusID ?? dataRecord.Defaults.NexusID;
- }
+ // add default update keys
+ if (manifest != null && manifest.UpdateKeys == null && dataRecord?.UpdateKeys != null)
+ manifest.UpdateKeys = dataRecord.UpdateKeys;
// build metadata
string displayName = !string.IsNullOrWhiteSpace(manifest?.Name)
@@ -84,7 +80,8 @@ namespace StardewModdingAPI.Framework.ModLoading
/// <summary>Validate manifest metadata.</summary>
/// <param name="mods">The mod manifests to validate.</param>
/// <param name="apiVersion">The current SMAPI version.</param>
- public void ValidateManifests(IEnumerable<IModMetadata> mods, ISemanticVersion apiVersion)
+ /// <param name="vendorModUrls">Maps vendor keys (like <c>Nexus</c>) to their mod URL template (where <c>{0}</c> is the mod ID).</param>
+ public void ValidateManifests(IEnumerable<IModMetadata> mods, ISemanticVersion apiVersion, IDictionary<string, string> vendorModUrls)
{
mods = mods.ToArray();
@@ -110,12 +107,18 @@ namespace StardewModdingAPI.Framework.ModLoading
// get update URLs
List<string> updateUrls = new List<string>();
- if (!string.IsNullOrWhiteSpace(mod.Manifest.ChucklefishID))
- updateUrls.Add($"https://community.playstarbound.com/resources/{mod.Manifest.ChucklefishID}");
- if (!string.IsNullOrWhiteSpace(mod.Manifest.NexusID))
- updateUrls.Add($"http://nexusmods.com/stardewvalley/mods/{mod.Manifest.NexusID}");
- if (!string.IsNullOrWhiteSpace(mod.Manifest.GitHubProject))
- updateUrls.Add($"https://github.com/{mod.Manifest.GitHubProject}/releases");
+ foreach (string key in mod.Manifest.UpdateKeys ?? new string[0])
+ {
+ string[] parts = key.Split(new[] { ':' }, 2);
+ if (parts.Length != 2)
+ continue;
+
+ string vendorKey = parts[0].Trim();
+ string modID = parts[1].Trim();
+
+ if (vendorModUrls.TryGetValue(vendorKey, out string urlTemplate))
+ updateUrls.Add(string.Format(urlTemplate, modID));
+ }
if (mod.DataRecord.AlternativeUrl != null)
updateUrls.Add(mod.DataRecord.AlternativeUrl);
diff --git a/src/StardewModdingAPI/Framework/Models/Manifest.cs b/src/StardewModdingAPI/Framework/Models/Manifest.cs
index c891644f..a051354c 100644
--- a/src/StardewModdingAPI/Framework/Models/Manifest.cs
+++ b/src/StardewModdingAPI/Framework/Models/Manifest.cs
@@ -34,14 +34,8 @@ namespace StardewModdingAPI.Framework.Models
[JsonConverter(typeof(SFieldConverter))]
public IManifestDependency[] Dependencies { get; set; }
- /// <summary>The mod's unique ID in the Chucklefish mod site (if any), used for update checks.</summary>
- public string ChucklefishID { get; set; }
-
- /// <summary>The mod's unique ID in Nexus Mods (if any), used for update checks.</summary>
- public string NexusID { get; set; }
-
- /// <summary>The mod's organisation and project name on GitHub (if any), used for update checks.</summary>
- public string GitHubProject { get; set; }
+ /// <summary>The namespaced mod IDs to query for updates (like <c>Nexus:541</c>).</summary>
+ public string[] UpdateKeys { get; set; }
/// <summary>The unique mod ID.</summary>
public string UniqueID { get; set; }
diff --git a/src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs b/src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs
deleted file mode 100644
index e0ab94b8..00000000
--- a/src/StardewModdingAPI/Framework/Models/ModDataDefaults.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-namespace StardewModdingAPI.Framework.Models
-{
- /// <summary>Default values for support fields to inject into the manifest.</summary>
- internal class ModDataDefaults
- {
- /*********
- ** Accessors
- *********/
- /// <summary>The mod's unique ID in the Chucklefish mod site (if any), used for update checks.</summary>
- public string ChucklefishID { get; set; }
-
- /// <summary>The mod's unique ID in Nexus Mods (if any), used for update checks.</summary>
- public string NexusID { get; set; }
-
- /// <summary>The mod's organisation and project name on GitHub (if any), used for update checks.</summary>
- public string GitHubProject { get; set; }
- }
-}
diff --git a/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs b/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs
index 0d033e82..c6a12188 100644
--- a/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs
+++ b/src/StardewModdingAPI/Framework/Models/ModDataRecord.cs
@@ -15,8 +15,8 @@ namespace StardewModdingAPI.Framework.Models
[JsonConverter(typeof(SFieldConverter))]
public ModDataID ID { get; set; }
- /// <summary>Default values for support fields to inject into the manifest.</summary>
- public ModDataDefaults Defaults { get; set; }
+ /// <summary>A value to inject into <see cref="IManifest.UpdateKeys"/> field if it's not already set.</summary>
+ public string[] UpdateKeys { get; set; }
/// <summary>The URL where the player can get an unofficial or alternative version of the mod if the official version isn't compatible.</summary>
public string AlternativeUrl { get; set; }