enforce mod ID convention (only alphanumeric, hyphen, dot, and underscore)
This commit is contained in:
parent
30bf40ab2b
commit
5121ae7b4a
|
@ -27,9 +27,10 @@
|
||||||
* Fixed console command input not saved to the log.
|
* Fixed console command input not saved to the log.
|
||||||
* Fixed `helper.ModRegistry.GetApi` interface validation errors not mentioning which interface caused the issue.
|
* Fixed `helper.ModRegistry.GetApi` interface validation errors not mentioning which interface caused the issue.
|
||||||
* **Breaking changes** (see [migration guide](https://stardewvalleywiki.com/Modding:Migrate_to_Stardew_Valley_1.3)):
|
* **Breaking changes** (see [migration guide](https://stardewvalleywiki.com/Modding:Migrate_to_Stardew_Valley_1.3)):
|
||||||
* dropped some deprecated APIs;
|
* Dropped some deprecated APIs.
|
||||||
* `LocationEvents` have been rewritten (see above);
|
* `LocationEvents` have been rewritten (see above).
|
||||||
* mods can't intercept chatbox input, including the game's hotkeys to toggle the chatbox (default `T` and `?`).
|
* Mods can't intercept chatbox input, including the game's hotkeys to toggle the chatbox (default `T` and `?`).
|
||||||
|
* Mod IDs should only contain letters, numbers, hyphens, dots, and underscores (so they can be safely used in many contexts like URLs); this restriction is now enforced.
|
||||||
|
|
||||||
* In console commands:
|
* In console commands:
|
||||||
* Added `player_add name`, which lets you add items to your inventory by name instead of ID.
|
* Added `player_add name`, which lets you add items to your inventory by name instead of ID.
|
||||||
|
|
|
@ -2,6 +2,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
using StardewModdingAPI.Framework.Exceptions;
|
using StardewModdingAPI.Framework.Exceptions;
|
||||||
using StardewModdingAPI.Framework.ModData;
|
using StardewModdingAPI.Framework.ModData;
|
||||||
using StardewModdingAPI.Framework.Models;
|
using StardewModdingAPI.Framework.Models;
|
||||||
|
@ -194,8 +195,15 @@ namespace StardewModdingAPI.Framework.ModLoading
|
||||||
missingFields.Add(nameof(IManifest.UniqueID));
|
missingFields.Add(nameof(IManifest.UniqueID));
|
||||||
|
|
||||||
if (missingFields.Any())
|
if (missingFields.Any())
|
||||||
|
{
|
||||||
mod.SetStatus(ModMetadataStatus.Failed, $"its manifest is missing required fields ({string.Join(", ", missingFields)}).");
|
mod.SetStatus(ModMetadataStatus.Failed, $"its manifest is missing required fields ({string.Join(", ", missingFields)}).");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// validate ID format
|
||||||
|
if (Regex.IsMatch(mod.Manifest.UniqueID, "[^a-z0-9_.-]", RegexOptions.IgnoreCase))
|
||||||
|
mod.SetStatus(ModMetadataStatus.Failed, "its manifest specifies an invalid ID (IDs must only contain letters, numbers, underscores, periods, or hyphens).");
|
||||||
}
|
}
|
||||||
|
|
||||||
// validate IDs are unique
|
// validate IDs are unique
|
||||||
|
|
Loading…
Reference in New Issue