using System; using StardewValley; namespace StardewModdingAPI { /// The name for an asset loaded through the content pipeline. public interface IAssetName : IEquatable { /********* ** Accessors *********/ /// The full normalized asset name, including the locale if applicable (like Data/Achievements.fr-FR). string Name { get; } /// The base asset name without the locale code. string BaseName { get; } /// The locale code specified in the , if it's a valid code recognized by the game content. string? LocaleCode { get; } /// The language code matching the , if applicable. LocalizedContentManager.LanguageCode? LanguageCode { get; } /********* ** Public methods *********/ /// Get whether the given asset name is equivalent, ignoring capitalization and formatting. /// The asset name to compare this instance to. /// Whether to compare the given name with the (if true) or (if false). This has no effect on any locale included in the given . bool IsEquivalentTo(string? assetName, bool useBaseName = false); /// Get whether the given asset name is equivalent, ignoring capitalization and formatting. /// The asset name to compare this instance to. /// Whether to compare the given name with the (if true) or (if false). bool IsEquivalentTo(IAssetName? assetName, bool useBaseName = false); /// Get whether the asset name starts with the given value, ignoring capitalization and formatting. This can be used with a trailing slash to test for an asset folder, like Data/. /// The prefix to match. /// Whether to match if the prefix occurs mid-word, so Data/AchievementsToIgnore matches prefix Data/Achievements. If this is false, the prefix only matches if the asset name starts with the prefix followed by a non-alphanumeric character (including ., /, or \\) or the end of string. /// Whether to match the prefix if there's a subfolder path after it, so Data/Achievements/Example matches prefix Data/Achievements. If this is false, the prefix only matches if the asset name has no / or \\ characters after the prefix. bool StartsWith(string? prefix, bool allowPartialWord = true, bool allowSubfolder = true); /// Get whether the asset is directly within the given asset path. /// For example, Characters/Dialogue/Abigail is directly under Characters/Dialogue but not Characters or Characters/Dialogue/Ab. To allow sub-paths, use instead. /// The asset path to check. This doesn't need a trailing slash. bool IsDirectlyUnderPath(string? assetFolder); /// Get an asset name representing the without locale. internal IAssetName GetBaseAssetName(); } }