Plugin Manager
The Plugin Manager is what your plugin gets sent to after being loaded by the server at startup. The server loads your plugin by finding its main class, annotated by the Plugin annotation that holds its general information, and sends a new instance of it to the manager. The manager then keeps that instance in its own collection that you can look into and pull from using methods provided by itself, thus allowing you to easily interact with another loaded plugin if you so desire.
De PluginManager Klasse
Public methods inside the PluginManager are used to grab information about the current collection of loaded
plugins, alongside their instances. The plugins are stored inside a PluginContainer (discussed in next
section) to allow for an easy center of information about the specific plugin. As an example, you can use the
PluginManager
to communicate with another plugin, grabbing its instance and using the methods it offers to provide
compatibility or extended features by means of your calling plugin.
De Plugin Manager verkrijgen
Je kan op verschillende manieren een instantie van de servers PluginManager
verkrijgen.
1. Dependency Injection
Tip
Zie de Dependency Injection handleiding voor hulp bij het gebruik van dependency injection.
De PluginManager
is een van de weinige API instanties die geïnjecteerd wordt in de main klasse wanneer het geladen wordt. Om een referentie naar de instantie te verkrijgen maak je simpelweg een nieuwe variabele aan waar de PluginManager
instantie kan gestoken worden en annoteer je deze met @Inject
.
import com.google.inject.Inject;
import org.spongepowered.api.plugin.PluginManager;
@Inject
private PluginManager pluginManager;
2. De Service Manager
Tip
Zie Services voor een volledige handleiding over de Service Manager.
The service manager also holds an instance of the server’s PluginManager
. Simply use the method
ServiceManager#provide(Class), passing the PluginManager
‘s class (PluginManager.class
) as a
parameter.
private PluginManager pluginManager = serviceManager.provideUnchecked(PluginManager.class);
3. De Game Instance
Tip
See the JavaDocs for Game for full information about the class, as well as its methods and their usage.
Een game instance kan eveneens een referentie naar de servers PluginManager
voorzien.
private PluginManager pluginManager = game.getPluginManager();
Nu dat je een instantie hebt van de plugin manager, laten we het gebruiken.
4. Using the Sponge Class
The Sponge class works similarly to Game
, with the exception that since Sponge
contains static
methods. It can be accessed anywhere throughout your plugin. You also do not need to store an instance of it, as you
would need to do with Game
.
import org.spongepowered.api.Sponge;
private PluginManager pluginManager = Sponge.getPluginManager();
De Plugin Manager gebruiken
De plugin manager voorziet enkele methodes om te werken met plugins.
Een heleboel methodes geven plugin containers terug, die we bespreken in het volgende deel. Plugin containers zij vrij vanzelfsprekend “containers” die de eigenlijke plugin bevatten.
Met de plugin manager wordt het mogelijk om alle plugins te verkrijgen die momenteel zijn geladen via de plugin manager:
import org.spongepowered.api.plugin.PluginContainer;
import java.util.Collection;
private Collection<PluginContainer> plugins = pluginManager.getPlugins();
Of, het is mogelijk om een instantie van de plugin container te verkrijgen zoals wordt aangetoond in het onderstaande voorbeeld:
private PluginContainer myOtherPlugin = pluginManager.getPlugin("myOtherPluginId").orElse(null);
De PluginContainer Klasse
Wanneer je een plugin neemt van de PluginManager
zal je al snel opmerken dat je niet meteen een instantie krijgt van de gevraagde plugin. In de plaats daarvan zal je een PluginContainer
krijgen die informatie bevat over de plugin dat verkregen is via de @Plugin
annotatie in de main klasse van de plugin en de ingelade instantie zelf.
The PluginContainer
will hold any generic information about the plugin set by its owning developer. You can use
information from here instead of hard-coding what you know about it in your supporting plugin. An example scenario would
be if the owning developer changes the name of the plugin, references to the latter in the supporting plugin would not
become wrong as a result of this change, provided you’ve used the method PluginContainer#getName() to get
its name.
private PluginContainer myOtherPlugin = pluginManager.getPlugin("myOtherPluginId").orElse(null);
private MyOtherPlugin pluginInstance = (MyOtherPlugin) myOtherPlugin.getInstance().orElse(null);
Notitie
PluginContainer#getInstance() will return as an Object
. You need to cast it as the target plugin
after obtaining it from the container.