summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework/ModLoading
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <github@jplamondonw.com>2018-10-08 19:13:03 -0400
committerJesse Plamondon-Willard <github@jplamondonw.com>2018-10-08 19:13:03 -0400
commitea3d3a6648f0a1c679a7593cfed0dacaed1ec045 (patch)
tree38e905efbea6b2c863e1327ea9e8156b325a2fd6 /src/SMAPI/Framework/ModLoading
parentec6025aad35addab8121a31d1c4abf667fd5210a (diff)
downloadSMAPI-ea3d3a6648f0a1c679a7593cfed0dacaed1ec045.tar.gz
SMAPI-ea3d3a6648f0a1c679a7593cfed0dacaed1ec045.tar.bz2
SMAPI-ea3d3a6648f0a1c679a7593cfed0dacaed1ec045.zip
make duplicate-mod more intuitive
The error now shows the relative folder paths (instead of manifest IDs), and only one error will be logged instead of one per duplicate.
Diffstat (limited to 'src/SMAPI/Framework/ModLoading')
-rw-r--r--src/SMAPI/Framework/ModLoading/ModMetadata.cs7
-rw-r--r--src/SMAPI/Framework/ModLoading/ModResolver.cs5
2 files changed, 9 insertions, 3 deletions
diff --git a/src/SMAPI/Framework/ModLoading/ModMetadata.cs b/src/SMAPI/Framework/ModLoading/ModMetadata.cs
index c02f0830..0a5f5d3f 100644
--- a/src/SMAPI/Framework/ModLoading/ModMetadata.cs
+++ b/src/SMAPI/Framework/ModLoading/ModMetadata.cs
@@ -19,6 +19,9 @@ namespace StardewModdingAPI.Framework.ModLoading
/// <summary>The mod's full directory path.</summary>
public string DirectoryPath { get; }
+ /// <summary>The <see cref="IModMetadata.DirectoryPath"/> relative to the game's Mods folder.</summary>
+ public string RelativeDirectoryPath { get; }
+
/// <summary>The mod manifest.</summary>
public IManifest Manifest { get; }
@@ -59,12 +62,14 @@ namespace StardewModdingAPI.Framework.ModLoading
/// <summary>Construct an instance.</summary>
/// <param name="displayName">The mod's display name.</param>
/// <param name="directoryPath">The mod's full directory path.</param>
+ /// <param name="relativeDirectoryPath">The <paramref name="directoryPath"/> relative to the game's Mods folder.</param>
/// <param name="manifest">The mod manifest.</param>
/// <param name="dataRecord">Metadata about the mod from SMAPI's internal data (if any).</param>
- public ModMetadata(string displayName, string directoryPath, IManifest manifest, ModDataRecordVersionedFields dataRecord)
+ public ModMetadata(string displayName, string directoryPath, string relativeDirectoryPath, IManifest manifest, ModDataRecordVersionedFields dataRecord)
{
this.DisplayName = displayName;
this.DirectoryPath = directoryPath;
+ this.RelativeDirectoryPath = relativeDirectoryPath;
this.Manifest = manifest;
this.DataRecord = dataRecord;
}
diff --git a/src/SMAPI/Framework/ModLoading/ModResolver.cs b/src/SMAPI/Framework/ModLoading/ModResolver.cs
index 65a311dc..26ec82d7 100644
--- a/src/SMAPI/Framework/ModLoading/ModResolver.cs
+++ b/src/SMAPI/Framework/ModLoading/ModResolver.cs
@@ -41,7 +41,8 @@ namespace StardewModdingAPI.Framework.ModLoading
ModMetadataStatus status = folder.ManifestParseError == null
? ModMetadataStatus.Found
: ModMetadataStatus.Failed;
- yield return new ModMetadata(folder.DisplayName, folder.Directory.FullName, manifest, dataRecord).SetStatus(status, folder.ManifestParseError);
+ string relativePath = PathUtilities.GetRelativePath(rootPath, folder.Directory.FullName);
+ yield return new ModMetadata(folder.DisplayName, folder.Directory.FullName, relativePath, manifest, dataRecord).SetStatus(status, folder.ManifestParseError);
}
}
@@ -188,7 +189,7 @@ namespace StardewModdingAPI.Framework.ModLoading
{
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))}).");
+ mod.SetStatus(ModMetadataStatus.Failed, $"you have multiple copies of this mod installed ({string.Join(", ", group.Select(p => p.RelativeDirectoryPath).OrderBy(p => p))}).");
}
}
}