From 61d13d370c07bec029336890eec9501a8efc3056 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 10 Jul 2017 13:30:20 -0400 Subject: fail mods if their unique ID isn't unique (#323) --- .../Framework/ModLoading/ModResolver.cs | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/StardewModdingAPI/Framework/ModLoading') diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs index 38dddce7..69ef0b63 100644 --- a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs +++ b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs @@ -95,6 +95,9 @@ namespace StardewModdingAPI.Framework.ModLoading /// The current SMAPI version. public void ValidateManifests(IEnumerable mods, ISemanticVersion apiVersion) { + mods = mods.ToArray(); + + // validate each manifest foreach (IModMetadata mod in mods) { // skip if already failed @@ -153,6 +156,24 @@ namespace StardewModdingAPI.Framework.ModLoading } #endif } + + // validate IDs are unique +#if SMAPI_2_0 + { + 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 } /// Sort the given mods by the order they should be loaded. -- cgit From d82e57d3060c96923ba9a8efe3c9eb839abffe59 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Mon, 10 Jul 2017 14:33:36 -0400 Subject: enable SMAPI 2.0 mode by default This commit replaces the SMAPI_2_0 compile flag with SMAPI_1_x. --- src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/StardewModdingAPI/Framework/ModLoading') diff --git a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs index 69ef0b63..b75453b7 100644 --- a/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs +++ b/src/StardewModdingAPI/Framework/ModLoading/ModResolver.cs @@ -140,7 +140,7 @@ namespace StardewModdingAPI.Framework.ModLoading } // validate required fields -#if SMAPI_2_0 +#if !SMAPI_1_x { List missingFields = new List(3); @@ -158,7 +158,7 @@ namespace StardewModdingAPI.Framework.ModLoading } // validate IDs are unique -#if SMAPI_2_0 +#if !SMAPI_1_x { var duplicatesByID = mods .GroupBy(mod => mod.Manifest.UniqueID?.Trim(), mod => mod, StringComparer.InvariantCultureIgnoreCase) @@ -255,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 } ) -- cgit