private ServerPlugin loadJarPlugin( String name, Path srcJar, FileSnapshot snapshot, Path tmp, PluginDescription description) throws IOException, InvalidPluginException, MalformedURLException { JarFile jarFile = new JarFile(tmp.toFile()); boolean keep = false; try { Manifest manifest = jarFile.getManifest(); Plugin.ApiType type = Plugin.getApiType(manifest); List<URL> urls = new ArrayList<>(2); String overlay = System.getProperty("gerrit.plugin-classes"); if (overlay != null) { Path classes = Paths.get(overlay).resolve(name).resolve("main"); if (Files.isDirectory(classes)) { log.info(String.format("plugin %s: including %s", name, classes)); urls.add(classes.toUri().toURL()); } } urls.add(tmp.toUri().toURL()); ClassLoader pluginLoader = new URLClassLoader(urls.toArray(new URL[urls.size()]), PluginLoader.parentFor(type)); JarScanner jarScanner = createJarScanner(tmp); ServerPlugin plugin = new ServerPlugin( name, description.canonicalUrl, description.user, srcJar, snapshot, jarScanner, description.dataDir, pluginLoader); plugin.setCleanupHandle(new CleanupHandle(tmp, jarFile)); keep = true; return plugin; } finally { if (!keep) { jarFile.close(); } } }
@EventHandler(priority = EventPriority.LOW) public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); String playerName = player.getName(); String bukkitVer = plugin.getServer().getBukkitVersion(); player.sendMessage( ChatColor.GREEN + "Hello " + playerName + " welcome to the server, this server is running on Bukkit version " + bukkitVer); }
PluginManager(Config serverConfig, Iterable<ServerPlugin> plugins, LogProvider logProvider) { Map<String, Pair<ServerPlugin, ServerExtender>> extensions = new HashMap<String, Pair<ServerPlugin, ServerExtender>>(); Log log = logProvider.getLog(getClass()); for (ServerPlugin plugin : plugins) { PluginPointFactory factory = new PluginPointFactoryImpl(); final ServerExtender extender = new ServerExtender(factory); try { plugin.loadServerExtender(extender); } catch (Exception ex) { log.warn("Failed to load plugin [%s]: %s", plugin.toString(), ex.getMessage()); continue; } catch (LinkageError err) { log.warn("Failed to load plugin [%s]: %s", plugin.toString(), err.getMessage()); continue; } Pair<ServerPlugin, ServerExtender> old = extensions.put(plugin.name, Pair.of(plugin, extender)); if (old != null) { log.warn( String.format( "Extension naming conflict \"%s\" between \"%s\" and \"%s\"", plugin.name, old.first().getClass(), plugin.getClass())); } } for (Pair<ServerPlugin, ServerExtender> extension : extensions.values()) { log.info(String.format("Loaded server plugin \"%s\"", extension.first().name)); for (PluginPoint point : extension.other().all()) { log.info( String.format( " %s.%s: %s", point.forType().getSimpleName(), point.name(), point.getDescription())); } this.extensions.put(extension.first().name, extension.other()); } }
public PluginManager(Config serverConfig, LogProvider logProvider) { this(serverConfig, ServerPlugin.load(), logProvider); }