using System; using IllusionInjector; using IllusionPlugin; namespace GamecraftModdingAPI.Utility { /// /// Simple plugin interaction operations /// public static class Dependency { /// /// Find a plugin by name /// /// The plugin. /// The plugin's name. public static IPlugin GetPlugin(string name) { foreach(IPlugin plugin in PluginManager.Plugins) { if (plugin.Name == name) { return plugin; } } return null; } /// /// Gets the plugin version. /// This gives priority to the plugin's Version string but falls back to the Assembly's version /// /// The plugin's version. /// The plugin's name. public static Version GetPluginVersion(string name) { IPlugin plugin = GetPlugin(name); if (plugin != null) { try { return new Version(plugin.Version); } catch (Exception e) when ( e is ArgumentException || e is ArgumentNullException || e is ArgumentOutOfRangeException || e is FormatException || e is OverflowException) {} return plugin.GetType().Assembly.GetName().Version; } return null; } // (I'm leaving the auto-generated version) // // Hell the specified name and version. // // The hell. // Name. // Version. /// /// Detect if you're in dependency hell with respect to the plugin. /// ie Check if the plugin doesn't exist or is out of date. /// When version is null, this only checks if the plugin exists. /// The version is retrieved using GetPluginVersion(string name). /// /// Are you in dependency hell? /// The plugin's name' /// The target version. public static bool Hell(string name, Version version = null) { Version pluginVersion = GetPluginVersion(name); if (version == null) { return pluginVersion == null; } return (pluginVersion == null || pluginVersion < version); } } }