|
- using System;
-
- using IllusionInjector;
- using IllusionPlugin;
-
- namespace GamecraftModdingAPI.Utility
- {
- /// <summary>
- /// Simple plugin interaction operations
- /// </summary>
- public static class Dependency
- {
- /// <summary>
- /// Find a plugin by name
- /// </summary>
- /// <returns>The plugin.</returns>
- /// <param name="name">The plugin's name.</param>
- public static IPlugin GetPlugin(string name)
- {
- foreach(IPlugin plugin in PluginManager.Plugins)
- {
- if (plugin.Name == name)
- {
- return plugin;
- }
- }
- return null;
- }
-
- /// <summary>
- /// Gets the plugin version.
- /// This gives priority to the plugin's Version string but falls back to the Assembly's version
- /// </summary>
- /// <returns>The plugin's version.</returns>
- /// <param name="name">The plugin's name.</param>
- 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)
- // <summary>
- // Hell the specified name and version.
- // </summary>
- // <returns>The hell.</returns>
- // <param name="name">Name.</param>
- // <param name="version">Version.</param>
- /// <summary>
- /// 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).
- /// </summary>
- /// <returns>Are you in dependency hell?</returns>
- /// <param name="name">The plugin's name'</param>
- /// <param name="version">The target version.</param>
- public static bool Hell(string name, Version version = null)
- {
- Version pluginVersion = GetPluginVersion(name);
- if (version == null) {
- return pluginVersion == null;
- }
- return (pluginVersion == null || pluginVersion < version);
- }
- }
- }
|