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 `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)):
|
||||
* dropped some deprecated APIs;
|
||||
* `LocationEvents` have been rewritten (see above);
|
||||
* mods can't intercept chatbox input, including the game's hotkeys to toggle the chatbox (default `T` and `?`).
|
||||
* Dropped some deprecated APIs.
|
||||
* `LocationEvents` have been rewritten (see above).
|
||||
* 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:
|
||||
* 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.IO;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using StardewModdingAPI.Framework.Exceptions;
|
||||
using StardewModdingAPI.Framework.ModData;
|
||||
using StardewModdingAPI.Framework.Models;
|
||||
|
@ -194,10 +195,17 @@ namespace StardewModdingAPI.Framework.ModLoading
|
|||
missingFields.Add(nameof(IManifest.UniqueID));
|
||||
|
||||
if (missingFields.Any())
|
||||
{
|
||||
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
|
||||
{
|
||||
var duplicatesByID = mods
|
||||
|
|
Loading…
Reference in New Issue