public void EnablePlugin(Plugin plugin) { plugin.Info("Enabling plugin " + plugin.Details.name + " " + plugin.Details.version); ConfigManager.Manager.RegisterPlugin(plugin); plugin.Register(); plugin.OnEnable(); enabledPlugins.Add(plugin.Details.id, plugin); }
public void LoadPluginAssembly(string path) { Logger.Debug("PLUGIN_LOADER", path); Assembly a = Assembly.LoadFrom(path); try { foreach (Type t in a.GetTypes()) { if (t.IsSubclassOf(typeof(Plugin)) && t != typeof(Plugin)) { try { Plugin plugin = (Plugin)Activator.CreateInstance(t); PluginDetails details = (PluginDetails)Attribute.GetCustomAttribute(t, typeof(PluginDetails)); if (details.id != null) { if (details.SmodMajor != SMOD_MAJOR && details.SmodMinor != SMOD_MINOR) { Logger.Warn("PLUGIN_LOADER", "Trying to load an outdated plugin " + details.name + " " + details.version); } else { plugin.Details = details; plugin.Pipes = new PluginPipes(plugin); ConfigManager.Manager.RegisterPlugin(plugin); LangManager.Manager.RegisterPlugin(plugin); PipeManager.Manager.RegisterPlugin(plugin); plugin.Register(); disabledPlugins.Add(details.id, plugin); Logger.Info("PLUGIN_LOADER", "Plugin loaded: " + plugin.ToString()); } } else { Logger.Warn("PLUGIN_LOADER", "Plugin loaded but missing an id: " + t + "[" + path + "]"); } } catch (Exception e) { Logger.Error("PLUGIN_LOADER", "Failed to create instance of plugin " + t + "[" + path + "]"); Logger.Error("PLUGIN_LOADER", e.GetType().Name + ": " + e.Message); Logger.Error("PLUGIN_LOADER", e.StackTrace); } } } } catch (Exception e) { Logger.Error("PLUGIN_LOADER", "Failed to load DLL [" + path + "], is it up to date?"); Logger.Debug("PLUGIN_LOADER", e.Message); Logger.Debug("PLUGIN_LOADER", e.StackTrace); } }