package tc.oc.commons.bungee.plugin; import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.api.plugin.PluginManager; import tc.oc.commons.core.plugin.AbstractPluginResolver; @Singleton public class BungeePluginResolver extends AbstractPluginResolver<Plugin> { private final PluginManager pluginManager; @Inject BungeePluginResolver(PluginManager pluginManager) { this.pluginManager = pluginManager; } @Override public @Nullable Plugin getImplicitProvidingPlugin(Class<?> klass) { final ClassLoader loader = klass.getClassLoader(); for(Plugin plugin : pluginManager.getPlugins()) { if(loader == plugin.getClass().getClassLoader()) return plugin; } return null; } @Override public @Nullable <T extends Plugin> T getPlugin(Class<T> cls) { for(Plugin plugin : pluginManager.getPlugins()) { if(cls.isInstance(plugin)) return (T) plugin; } return null; } }