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);
}
}
}