using StardewModdingAPI.Framework.Models;
namespace StardewModdingAPI.Framework.ModLoading
{
/// Metadata for a mod.
internal class ModMetadata : IModMetadata
{
/*********
** Accessors
*********/
/// The mod's display name.
public string DisplayName { get; }
/// The mod's full directory path.
public string DirectoryPath { get; }
/// The mod manifest.
public IManifest Manifest { get; }
/// Metadata about the mod from SMAPI's internal data (if any).
public ModDataRecord DataRecord { get; }
/// The metadata resolution status.
public ModMetadataStatus Status { get; private set; }
/// The reason the metadata is invalid, if any.
public string Error { get; private set; }
/// The mod instance (if it was loaded).
public IMod Mod { get; private set; }
/// The mod-provided API (if any).
public object Api { get; private set; }
/*********
** Public methods
*********/
/// Construct an instance.
/// The mod's display name.
/// The mod's full directory path.
/// The mod manifest.
/// Metadata about the mod from SMAPI's internal data (if any).
public ModMetadata(string displayName, string directoryPath, IManifest manifest, ModDataRecord dataRecord)
{
this.DisplayName = displayName;
this.DirectoryPath = directoryPath;
this.Manifest = manifest;
this.DataRecord = dataRecord;
}
/// Set the mod status.
/// The metadata resolution status.
/// The reason the metadata is invalid, if any.
/// Return the instance for chaining.
public IModMetadata SetStatus(ModMetadataStatus status, string error = null)
{
this.Status = status;
this.Error = error;
return this;
}
/// Set the mod instance.
/// The mod instance to set.
public IModMetadata SetMod(IMod mod)
{
this.Mod = mod;
return this;
}
/// Set the mod-provided API instance.
/// The mod-provided API.
public IModMetadata SetApi(object api)
{
this.Api = api;
return this;
}
}
}