コード例 #1
0
  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;
  }