diff --git a/BepInEx.Core/Bootstrap/BaseChainloader.cs b/BepInEx.Core/Bootstrap/BaseChainloader.cs index 34ec7163..a0705af4 100644 --- a/BepInEx.Core/Bootstrap/BaseChainloader.cs +++ b/BepInEx.Core/Bootstrap/BaseChainloader.cs @@ -125,6 +125,16 @@ protected static bool PluginTargetsWrongBepin(PluginInfo pluginInfo) /// Contains information about what certain plugins were not loaded. /// public List DependencyErrors { get; } = new(); + + /// + /// Occurs after a plugin is loaded. + /// + public event Action PluginLoaded; + + /// + /// Occurs after all plugins are loaded. + /// + public event Action Finished; public virtual void Initialize(string gameExePath = null) { @@ -305,6 +315,7 @@ public virtual void Execute() var plugins = DiscoverPlugins(); Logger.Log(LogLevel.Info, $"{plugins.Count} plugin{(plugins.Count == 1 ? "" : "s")} to load"); LoadPlugins(plugins); + Finished?.Invoke(); } catch (Exception ex) { @@ -400,7 +411,7 @@ static bool IsHardDependency(BepInDependency dep) => plugin.Instance = LoadPlugin(plugin, ass); loadedPlugins.Add(plugin); - //_plugins.Add((TPlugin)plugin.Instance); + PluginLoaded?.Invoke(plugin); } catch (Exception ex) { diff --git a/Runtimes/Unity/BepInEx.Unity.IL2CPP/IL2CPPChainloader.cs b/Runtimes/Unity/BepInEx.Unity.IL2CPP/IL2CPPChainloader.cs index 85414877..5f857cdd 100644 --- a/Runtimes/Unity/BepInEx.Unity.IL2CPP/IL2CPPChainloader.cs +++ b/Runtimes/Unity/BepInEx.Unity.IL2CPP/IL2CPPChainloader.cs @@ -48,6 +48,11 @@ public class IL2CPPChainloader : BaseChainloader /// Type of the component to add public static Il2CppObjectBase AddUnityComponent(Type t) => Il2CppUtils.AddComponent(t); + /// + /// Occurs after a plugin is instantiated and just before is called. + /// + public event Action PluginLoad; + public override void Initialize(string gameExePath = null) { base.Initialize(gameExePath); @@ -125,6 +130,7 @@ public override BasePlugin LoadPlugin(PluginInfo pluginInfo, Assembly pluginAsse var pluginInstance = (BasePlugin) Activator.CreateInstance(type); + PluginLoad?.Invoke(pluginInfo, pluginAssembly, pluginInstance); pluginInstance.Load(); return pluginInstance;