diff options
author | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-07-10 22:10:27 -0400 |
---|---|---|
committer | Jesse Plamondon-Willard <github@jplamondonw.com> | 2017-07-10 22:10:27 -0400 |
commit | 674ad0d90f8780130a5fcefb3869acfe2315df2a (patch) | |
tree | eb79fa170a0b74a34061ea1d6838ae5589131c85 /src/StardewModdingAPI/Framework/ModLoading | |
parent | 1edd98aef027faa768f56cf0b3591e64e20ba096 (diff) | |
parent | 834aee92f222fa739d7daa6c71f48b7e0df47ffe (diff) | |
download | SMAPI-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.cs | 29 |
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 } ) |