summaryrefslogtreecommitdiff
path: root/src/StardewModdingAPI/Framework/ModLoading
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2017-07-10 22:10:27 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2017-07-10 22:10:27 -0400
commit674ad0d90f8780130a5fcefb3869acfe2315df2a (patch)
treeeb79fa170a0b74a34061ea1d6838ae5589131c85 /src/StardewModdingAPI/Framework/ModLoading
parent1edd98aef027faa768f56cf0b3591e64e20ba096 (diff)
parent834aee92f222fa739d7daa6c71f48b7e0df47ffe (diff)
downloadSMAPI-674ad0d90f8780130a5fcefb3869acfe2315df2a.tar.gz
SMAPI-674ad0d90f8780130a5fcefb3869acfe2315df2a.tar.bz2
SMAPI-674ad0d90f8780130a5fcefb3869acfe2315df2a.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/StardewModdingAPI/Framework/ModLoading')
-rw-r--r--src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs29
1 files changed, 25 insertions, 4 deletions
diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs
index 38dddce7..b75453b7 100644
--- a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs
+++ b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs
@@ -95,6 +95,9 @@ namespace StardewModdingAPI.Framework.ModLoading
/// <param name="apiVersion">The current SMAPI version.</param>
public void ValidateManifests(IEnumerable<IModMetadata> mods, ISemanticVersion apiVersion)
{
+ mods = mods.ToArray();
+
+ // validate each manifest
foreach (IModMetadata mod in mods)
{
// skip if already failed
@@ -137,7 +140,7 @@ namespace StardewModdingAPI.Framework.ModLoading
}
// validate required fields
-#if SMAPI_2_0
+#if !SMAPI_1_x
{
List<string> missingFields = new List<string>(3);
@@ -153,6 +156,24 @@ namespace StardewModdingAPI.Framework.ModLoading
}
#endif
}
+
+ // validate IDs are unique
+#if !SMAPI_1_x
+ {
+ var duplicatesByID = mods
+ .GroupBy(mod => mod.Manifest.UniqueID?.Trim(), mod => mod, StringComparer.InvariantCultureIgnoreCase)
+ .Where(p => p.Count() > 1);
+ foreach (var group in duplicatesByID)
+ {
+ foreach (IModMetadata mod in group)
+ {
+ if (mod.Status == ModMetadataStatus.Failed)
+ continue; // don't replace metadata error
+ mod.SetStatus(ModMetadataStatus.Failed, $"its unique ID '{mod.Manifest.UniqueID}' is used by multiple mods ({string.Join(", ", group.Select(p => p.DisplayName))}).");
+ }
+ }
+ }
+#endif
}
/// <summary>Sort the given mods by the order they should be loaded.</summary>
@@ -234,10 +255,10 @@ namespace StardewModdingAPI.Framework.ModLoading
MinVersion = entry.MinimumVersion,
Mod = dependencyMod,
IsRequired =
-#if SMAPI_2_0
- entry.IsRequired
-#else
+#if SMAPI_1_x
true
+#else
+ entry.IsRequired
#endif
}
)