diff options
Diffstat (limited to 'src/SMAPI/Framework/ModLoading/ModResolver.cs')
| -rw-r--r-- | src/SMAPI/Framework/ModLoading/ModResolver.cs | 23 | 
1 files changed, 10 insertions, 13 deletions
| diff --git a/src/SMAPI/Framework/ModLoading/ModResolver.cs b/src/SMAPI/Framework/ModLoading/ModResolver.cs index afb388d0..74e7cb32 100644 --- a/src/SMAPI/Framework/ModLoading/ModResolver.cs +++ b/src/SMAPI/Framework/ModLoading/ModResolver.cs @@ -56,9 +56,10 @@ namespace StardewModdingAPI.Framework.ModLoading          /// <param name="mods">The mod manifests to validate.</param>          /// <param name="apiVersion">The current SMAPI version.</param>          /// <param name="getUpdateUrl">Get an update URL for an update key (if valid).</param> +        /// <param name="validateFilesExist">Whether to validate that files referenced in the manifest (like <see cref="IManifest.EntryDll"/>) exist on disk. This can be disabled to only validate the manifest itself.</param>          [SuppressMessage("ReSharper", "ConstantConditionalAccessQualifier", Justification = "Manifest values may be null before they're validated.")]          [SuppressMessage("ReSharper", "ConditionIsAlwaysTrueOrFalse", Justification = "Manifest values may be null before they're validated.")] -        public void ValidateManifests(IEnumerable<IModMetadata> mods, ISemanticVersion apiVersion, Func<string, string?> getUpdateUrl) +        public void ValidateManifests(IEnumerable<IModMetadata> mods, ISemanticVersion apiVersion, Func<string, string?> getUpdateUrl, bool validateFilesExist = true)          {              mods = mods.ToArray(); @@ -140,19 +141,15 @@ namespace StardewModdingAPI.Framework.ModLoading                              continue;                          } -                        // invalid path -                        if (!File.Exists(Path.Combine(mod.DirectoryPath, mod.Manifest.EntryDll!))) +                        // file doesn't exist +                        if (validateFilesExist)                          { -                            mod.SetStatus(ModMetadataStatus.Failed, ModFailReason.InvalidManifest, $"its DLL '{mod.Manifest.EntryDll}' doesn't exist."); -                            continue; -                        } - -                        // invalid capitalization -                        string? actualFilename = new DirectoryInfo(mod.DirectoryPath).GetFiles(mod.Manifest.EntryDll!).FirstOrDefault()?.Name; -                        if (actualFilename != mod.Manifest.EntryDll) -                        { -                            mod.SetStatus(ModMetadataStatus.Failed, ModFailReason.InvalidManifest, $"its {nameof(IManifest.EntryDll)} value '{mod.Manifest.EntryDll}' doesn't match the actual file capitalization '{actualFilename}'. The capitalization must match for crossplatform compatibility."); -                            continue; +                            string fileName = CaseInsensitivePathLookup.GetCachedFor(mod.DirectoryPath).GetFilePath(mod.Manifest.EntryDll!); +                            if (!File.Exists(Path.Combine(mod.DirectoryPath, fileName))) +                            { +                                mod.SetStatus(ModMetadataStatus.Failed, ModFailReason.InvalidManifest, $"its DLL '{mod.Manifest.EntryDll}' doesn't exist."); +                                continue; +                            }                          }                      } | 
