- Версия(и) Minecraft
- 1.12.2, 7.1
События
События (events) используются, чтобы сообщить плагинам о том, что что-то произошло. Многие события могут быть отменены, то есть, можно предотвратить действие, к которому относится событие. Отменяемые события реализуют интерфейс
В Sponge имеется много событий; но также плагины могут создавать свои собственные события, которые могут отлавливать другие плагины.
Слушателям событий присваивается приоритет, определяющий порядок, в котором слушатель событий запускается в контексте других слушателей событий (например, из других плагинов). Например, слушатель событий с приоритетом
Диспетчер событий или менеджер событий - это класс, который отслеживает, какие плагины прослушивают какое либо событие, а также отвечает за вызов событий для слушателей событий.
Информация о любом событии передается всем плагинам без исключения!!
Слушатели событий
Чтобы прослушать(отловить) событие, слушатель события должен быть зарегистрирован. Это делается путем создания метода с любым именем, определяя первый параметр как желаемый тип события, а затем прикрепляя аннотацию
Также, все классы, содержащие слушатели, должен быть зарегистрирован в менеджере событий. Исключением является класс с аннотацией
Примечание:
" Шина событий поддерживает супертипы. Например,
Регистрация слушателей событий в других классах
Для регистрации слушателей событий, с аннотацией
Динамическая регистрация слушателей событий
Некоторым плагинам (такие как скриптовые плагины) может понадобиться динамически регистрировать слушатели событий. В этом случае слушатель событий - это не метод с аннотацией
Пример реализации EventListener
Пример регистации:
Примечание:
"Для слушателей событий, созданных с помощью аннотации @Listener, можно настроить порядок выполнения. Для динамически зарегистрированных слушателей нужно использовать метод EventManager#registerListener, передавая третьим аргументом Order"
Отмена регистрации слушателей событий
Чтобы отменить регистрацию одного слушателя событий, вы можете использовать метод
Кроме того, можно использовать
передавая ссылку на плагин, чтобы отменить регистрацию всех слушателей
событий, связанных с этим плагином. Обратите внимание, что это удалит все слушатели событий плагина, даже те, которые зарегистрированы с аннотациями
О аннотации @Listener
У аннотации
GameReloadEvent
Чтобы все плагины не предоставляли свои собственные команды перезагрузки, Sponge предоставляет свою встроенную, которую плагины могут прослушивать и при выполнении выполнять любые действия по перезагрузке. То, что представляет собой «перезагрузка», зависит только от плагина.
Обратите внимание, что это отличается от того, что обычно подразумевается под „перезагрузкой“, поскольку событие является просто вызовом для плагинов и не выполняет никакой перезагрузки самостоятельно.
События (events) используются, чтобы сообщить плагинам о том, что что-то произошло. Многие события могут быть отменены, то есть, можно предотвратить действие, к которому относится событие. Отменяемые события реализуют интерфейс
Cancellable
. В Sponge имеется много событий; но также плагины могут создавать свои собственные события, которые могут отлавливать другие плагины.
Слушателям событий присваивается приоритет, определяющий порядок, в котором слушатель событий запускается в контексте других слушателей событий (например, из других плагинов). Например, слушатель событий с приоритетом
EARLY
будет выполнен перед большинством других слушателей событий. См. О аннотации @Listener
для получения дополнительной информации. Диспетчер событий или менеджер событий - это класс, который отслеживает, какие плагины прослушивают какое либо событие, а также отвечает за вызов событий для слушателей событий.
Информация о любом событии передается всем плагинам без исключения!!
Слушатели событий
Чтобы прослушать(отловить) событие, слушатель события должен быть зарегистрирован. Это делается путем создания метода с любым именем, определяя первый параметр как желаемый тип события, а затем прикрепляя аннотацию
@Listener
к методу, как показано ниже.
Java:
import org.spongepowered.api.event.Listener;
@Listener
public void onSomeEvent(SomeEvent event) {
// Делаем что - то....
}
@Plugin
. Он регистрируется автоматический.Примечание:
" Шина событий поддерживает супертипы. Например,
ChangeBlockEvent.Break
наследует ChangeBlockEvent
. Поэтому слушшатель может отлавливать ChangeBlockEvent
и все равно получать ChangeBlockEvent.Break
. Однако слушатель, который отлавливает только ChangeBlockEvent.Break
, не будет уведомлен о других типах ChangeBlockEvent
. "Регистрация слушателей событий в других классах
Для регистрации слушателей событий, с аннотацией
@Listener
, которые не входят в основной класс плагина, вы можете использовать метод EventManager#registerListeners(Object, Object)
, который принимает ссылку на плагин и экземпляр класса, содержащий слушателей событий.
Java:
import org.spongepowered.api.Sponge;[/SIZE][/FONT]
[SIZE=4][FONT=georgia]
public class ExampleListener {
@Listener
public void onSomeEvent(SomeEvent event) {
// Do something with the event
}
}
Sponge.getEventManager().registerListeners(this, new ExampleListener());
Динамическая регистрация слушателей событий
Некоторым плагинам (такие как скриптовые плагины) может понадобиться динамически регистрировать слушатели событий. В этом случае слушатель событий - это не метод с аннотацией
@Listener
, а класс, реализующий интерфейс EventListener
. Этот слушатель событий может быть зарегистрирован путем вызова EventManager#registerListener
, который принимает ссылку на плагин в качестве первого аргумента, Class события, как второй аргумент, а самого слушателя в качестве последнего аргумента. При желании вы можете указать Order для запуска слушателя событий в качестве третьего аргумента или логическое значение в качестве четвертого аргумента (перед экземпляром слушателя), которое определяет, следует ли вызывать слушателя до других модификаций сервера.Пример реализации EventListener
Java:
import org.spongepowered.api.event.EventListener;
import org.spongepowered.api.event.block.ChangeBlockEvent;
public class ExampleListener implements EventListener<ChangeBlockEvent.Break> {
@Override
public void handle(ChangeBlockEvent.Break event) throws Exception {
[...]
}
}
Java:
EventListener<ChangeBlockEvent.Break> listener = new ExampleListener();
Sponge.getEventManager().registerListener(this, ChangeBlockEvent.Break.class, listener);
"Для слушателей событий, созданных с помощью аннотации @Listener, можно настроить порядок выполнения. Для динамически зарегистрированных слушателей нужно использовать метод EventManager#registerListener, передавая третьим аргументом Order"
Отмена регистрации слушателей событий
Чтобы отменить регистрацию одного слушателя событий, вы можете использовать метод
EventManager#unregisterListeners(Object)
, который принимает экземпляр класса, содержащего слушателей событий.
Java:
EventListener listener = ...;
Sponge.getEventManager().unregisterListeners(listener);
Кроме того, можно использовать
EventManager#unregisterPluginListeners(Object)
,передавая ссылку на плагин, чтобы отменить регистрацию всех слушателей
событий, связанных с этим плагином. Обратите внимание, что это удалит все слушатели событий плагина, даже те, которые зарегистрированы с аннотациями
@Listener
.
Java:
PluginContainer plugin = ...;
Sponge.getEventManager().unregisterPluginListeners(plugin);
О аннотации @Listener
У аннотации
@Listener
имеется несколько настраиваемых полей:order
устанавливает приоритет исходя из которого состовляется порядок вызывания слушателей.beforeModifications
указывает, должен ли слушатель событий вызываться перед модами сервера, такими как моды Forge. По умолчанию установлено значение false.
@Listener
настроен так, что ваш слушатели событий не будут вызываться, если событие отменяемое и было отменено (например, другим плагином).GameReloadEvent
Чтобы все плагины не предоставляли свои собственные команды перезагрузки, Sponge предоставляет свою встроенную, которую плагины могут прослушивать и при выполнении выполнять любые действия по перезагрузке. То, что представляет собой «перезагрузка», зависит только от плагина.
GameReloadEvent
сработает, когда игрок выполнит команду перезагрузки /sponge plugins.
Событие не обязательно ограничено перезагрузкой конфигурации.
Java:
@Listener
public void reload(GameReloadEvent event) {
//Перезагружаемся
}