Жизненный цикл плагина

Во время инициализации, перезагрузки и выключения игры, сервера и мира Sponge вызывает ряд событий жизненного цикла, которые плагины могут прослушивать для соответствующих действий. Все события жизненного цикла расположены в пакете org.spongepowered.api.event.lifecycle.

Предупреждение

Все события жизненного цикла предполагают, что игра в настоящее время работает и ошибок не произошло. Некоторые события могут не вызываться, если игра вылетает или каким-либо иным образом прекращает действие, особенно любое событие, связанное с окончанием чего-либо. Поэтому ваши плагины не должны полагаться на эти события для завершения и хранения любого важного состояния.

Registration Lifecycle Events

At various points in the lifecycle of the game, Sponge will fire registration events to prompt plugins to perform specific tasks. These registration requests may come at any time, even during normal game play if, for example, a datapack reload is required. It is important that plugins that perform actions prompted by such lifecycle events listen to these events.

Some of the important registration events for most plugins are:

There are other registration events that plugins may be interested in, see the org.spongepowered.api.event.lifecycle package in the javadocs.

События Жизненного Цикла Игры

В Sponge, Game — это представление всего процесса Minecraft — с момента запуска Minecraft до окончания процесса. Поэтому Game может начинаться только один раз и останавливаться только один раз, и начнется до запуска любого Engine и завершится после остановки всех Engine. В результате, следующие события будут вызваны максимум один раз на протяжении жизни игры:

  • LoadedGameEvent запустится после того, как игра загружена и готова начать загрузку движков (но ни один еще не начал загрузку). Все плагины были загружены и коммуникации между плагинов должны быть доступны, как и все внутриигровые регистры.

  • StoppedGameEvent будет вызвано после того, как игра выключит все движки и скоро завершится. Доступных движков нет. Может быть не вызвано, если игра завершается ненадлежащим образом.

События Жизненного Цикла Движка

В отличие от Game, Engine может быть запущен и выключен несколько раз в течение жизни игры. Также несколько движков могут быть запущены одновременно. Например, для одиночного мира будут Client и Server, работающие параллельно.

The EngineLifecycleEvent is the base event for the engine lifecycle and is generic, bound to the type of Engine it is acting for. Listeners to any sub event must also specify the engine in the generic when the sub event requires it, for example, for the StartingEngineEvent on the Server, you would write your listener like this:

import org.spongepowered.api.Server
import org.spongepowered.api.event.Listener
import org.spongepowered.api.event.lifecycle.StartingEngineEvent

@Listener
public void onServerStarting(final StartingEngineEvent<Server> event) {
    // ...
}

The following events run during the engine lifecycle:

  • StartingEngineEvent will fire when the specified Engine is starting. Nothing about this engine has initialized at this point, worlds will not exist and the engine scoped registry will not be ready at this point.

  • StartedEngineEvent will fire when the specified Engine has completed initialization. Specifically, this means that the registry has been populated and in the case of the server engine, worlds have been created.

  • StoppingEngineEvent will fire when the engine has been told to shutdown and is about to shut down everything it is responsible for. May not fire if the game terminates abnormally.

Refresh Events

The RefreshGameEvent may be fired in response to a user requesting that all configuration be refreshed. Plugins should listen to this event and reload their configuration in response.