using System; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Contract; using BepInEx.Logging; using UnityEngine; namespace BepInEx.Unity.Mono; /// /// The base plugin type that is used by the BepInEx plugin loader. /// public abstract class BaseUnityPlugin : MonoBehaviour { /// /// Create a new instance of a plugin and all of its tied in objects. /// /// BepInPlugin attribute is missing. protected BaseUnityPlugin() { var metadata = MetadataHelper.GetMetadata(this); if (metadata == null) throw new InvalidOperationException("Can't create an instance of " + GetType().FullName + " because it inherits from BaseUnityPlugin and the BepInPlugin attribute is missing."); if (BaseChainloader.Instance.Plugins.TryGetValue(metadata.GUID, out var pluginInfo)) { Info = pluginInfo; Info.Instance = this; } else { throw new InvalidOperationException($"The plugin information for {metadata.GUID} couldn't be found on the chainloader"); } Logger = BepInEx.Logging.Logger.CreateLogSource(metadata.Name); Config = new ConfigFile(Utility.CombinePaths(Paths.ConfigPath, metadata.GUID + ".cfg"), false, metadata); } /// /// Information about this plugin as it was loaded. /// public PluginInfo Info { get; } /// /// Logger instance tied to this plugin. /// public ManualLogSource Logger { get; } /// /// Default config file tied to this plugin. The config file will not be created until /// any settings are added and changed, or is called. /// public ConfigFile Config { get; } }