using System; using System.Collections.Generic; using System.IO; using StardewModdingAPI.Toolkit.Serialization.Models; namespace StardewModdingAPI.Framework.ModHelpers { /// Provides an API for managing content packs. internal class ContentPackHelper : BaseHelper, IContentPackHelper { /********* ** Fields *********/ /// The content packs loaded for this mod. private readonly Lazy ContentPacks; /// Create a temporary content pack. private readonly Func CreateContentPack; /********* ** Public methods *********/ /// Construct an instance. /// The mod using this instance. /// The content packs loaded for this mod. /// Create a temporary content pack. public ContentPackHelper(IModMetadata mod, Lazy contentPacks, Func createContentPack) : base(mod) { this.ContentPacks = contentPacks; this.CreateContentPack = createContentPack; } /// public IEnumerable GetOwned() { return this.ContentPacks.Value; } /// public IContentPack CreateFake(string directoryPath) { string id = Guid.NewGuid().ToString("N"); string relativePath = Path.GetRelativePath(Constants.ModsPath, directoryPath); return this.CreateTemporary( directoryPath: directoryPath, id: id, name: $"{this.Mod.DisplayName} (fake content pack: {relativePath})", description: $"A temporary content pack created by the {this.Mod.DisplayName} mod.", author: "???", new SemanticVersion(1, 0, 0) ); } /// public IContentPack CreateTemporary(string directoryPath, string id, string name, string description, string author, ISemanticVersion version) { // validate if (string.IsNullOrWhiteSpace(directoryPath)) throw new ArgumentNullException(nameof(directoryPath)); if (string.IsNullOrWhiteSpace(id)) throw new ArgumentNullException(nameof(id)); if (string.IsNullOrWhiteSpace(name)) throw new ArgumentNullException(nameof(name)); if (!Directory.Exists(directoryPath)) throw new ArgumentException($"Can't create content pack for directory path '{directoryPath}' because no such directory exists."); // create manifest IManifest manifest = new Manifest( uniqueID: id, name: name, author: author, description: description, version: version, contentPackFor: this.ModID ); // create content pack return this.CreateContentPack(directoryPath, manifest); } } }