@SuppressWarnings("unchecked")
public Plugin loadPlugin(PluginDescriptionFile plugin) throws UnknownDependencyException {
final SimplePluginManager manager = (SimplePluginManager) server.getPluginManager();
try {
final File file = new File("plugins", plugin.getName());
final Class[] init =
new Class[] {
PluginLoader.class, Server.class, PluginDescriptionFile.class, File.class, File.class
};
final JavaPlugin instance =
(JavaPlugin)
Class.forName(plugin.getMain())
.getConstructor(init)
.newInstance(this, server, plugin, file, file);
readField(SimplePluginManager.class, manager, List.class, "plugins").add(instance);
readField(SimplePluginManager.class, manager, Map.class, "lookupNames")
.put(instance.getName().toLowerCase(), instance);
return instance;
} catch (Throwable t) {
throw new UnknownDependencyException(
t, "Unable to load plugin: " + plugin.getName() + " (" + plugin.getMain() + ")");
}
}
@Override
public Plugin loadPlugin(File file) throws UnknownDependencyException, InvalidPluginException {
return loader.loadPlugin(file);
}
@Override
public Plugin loadPlugin(File file)
throws InvalidPluginException, InvalidDescriptionException, UnknownDependencyException {
return delegate.loadPlugin(file);
}
@Override
public Plugin loadPlugin(File file) throws InvalidPluginException, InvalidDescriptionException, UnknownDependencyException {
return delegate.loadPlugin(file);
}