public synchronized Plugin loadPlugin(File paramFile, boolean ignoresoftdepends) throws InvalidPluginException, UnknownDependencyException, InvalidDescriptionFileException { CommonPlugin result; PluginDescriptionFile desc; CommonClassLoader loader; desc = getDescription(paramFile); File dataFolder = new File(paramFile.getParentFile(), desc.getName()); processDependencies(desc); if (!ignoresoftdepends) { processSoftDependencies(desc); } try { if (engine.getPlatform() == Platform.CLIENT) { loader = new ClientClassLoader(this, this.getClass().getClassLoader()); } else { loader = new CommonClassLoader(this, this.getClass().getClassLoader()); } loader.addURL(paramFile.toURI().toURL()); Class<?> main = Class.forName(desc.getMain(), true, loader); Class<? extends CommonPlugin> plugin = main.asSubclass(CommonPlugin.class); boolean locked = manager.lock(key); Constructor<? extends CommonPlugin> constructor = plugin.getConstructor(); result = constructor.newInstance(); result.initialize(this, engine, desc, dataFolder, paramFile, loader); if (!locked) { manager.unlock(key); } } catch (Exception e) { throw new InvalidPluginException(e); } loader.setPlugin(result); loaders.put(desc.getName(), loader); return result; }