Menadżer wtyczek

Ostrzeżenie

Ta dokumentacja została napisana dla SpongeAPI 7 i możliwe, że jest już przestarzała. Jeśli masz ochotę wspomóc w jej aktualizacji, prosimy, utwórz PR!

Plugin Manager jest miejscem, do którego Twój plugin zostaje wysłany po załadowaniu przez serwer. Serwer ładuje Twój plugin poprzez znalezienie jego głównej klasy oznaczonej adnotacją Plugin, która zawiera ogólne informacje o pluginie i wysyła nowe instancje pluginu do menedżera. Menedżer zachowuje tę instancję we własnej kolekcji, którą możesz podejrzeć i wyciągać dane przy pomocy dostarczanych przez niego metod, umożliwiając w ten sposób łatwą interakcję z innym załadowanym pluginem, jeśli tego potrzebujesz.

Klasa PluginManager

Publiczne metody wewnątrz :javadoc:`PluginManager`a są używane do pozyskiwania informacji o bieżącej kolekcji wczytanych pluginów obok ich instancji. Pluginy są przechowywane wewnątrz :javadoc:`PluginContainer`a (omówionego w następnej sekcji) w celu łatwego centrum informacji o konkretnym pluginie. Dla przykładu, możesz użyć ``PluginManager``a do komunikowania się z innym pluginem, przechwytywanie jego instancji i korzystanie z metod które oferuje w celu zapewnienia kompatybilności lub rozszerzonych funkcji.

Otrzymywanie menadżera pluginów

You can get an instance of the server’s PluginManager using a few different ways.

1. Wstrzykiwanie zależności

Wskazówka

See the Wstrzykiwanie zależności guide for help on using dependency injection.

The PluginManager is one of the few API instances that are injected into the main class upon being loaded. To ask for a reference, create a new variable to hold the PluginManager instance and simply annotate it with @Inject.

import com.google.inject.Inject;
import org.spongepowered.api.plugin.PluginManager;

@Inject
private PluginManager pluginManager;

2. menadżer Usług

Wskazówka

See Usługi for a full guide about the 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. Wystąpienie Gry

Wskazówka

See the JavaDocs for Game for full information about the class, as well as its methods and their usage.

A game instance can provide a reference to the server’s PluginManager as well for convenience.

private PluginManager pluginManager = game.getPluginManager();

Now that you have an instance to the plugin manager, let’s use it.

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.pluginManager();

Używanie menadżera pluginów

The plugin manager provides several methods for working with plugins.

A lot of methods return plugin containers, which will be discussed in the next section. Plugin containers are pretty much self-explanatory „containers” of the actual plugin instance.

With the plugin manager, it is possible to get all plugins currently loaded through the plugin manager:

import org.spongepowered.plugin.PluginContainer;

import java.util.Collection;

private Collection<PluginContainer> plugins = pluginManager.getPlugins();

Or, it is possible to obtain an instance to a plugin container directly, by the example shown below:

private PluginContainer myOtherPlugin = pluginManager.getPlugin("myOtherPluginId").orElse(null);

The PluginContainer Class

When grabbing a plugin from the PluginManager, you’ll notice very quickly that you are not given an immediate instance of the requested plugin. Instead, you’ll be greeted by a PluginContainer containing information about the plugin attained from its @Plugin annotation in its main class, as well as the loaded instance.

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);

Informacja

PluginContainer#getInstance() will return as an Object. You need to cast it as the target plugin after obtaining it from the container.