Жизненный цикл плагина
Во время инициализации, перезагрузки и выключения игры, сервера и мира 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:
ProvideServiceEvent.GameScoped and ProvideServiceEvent.EngineScoped for plugins that provide services (see Сервисы).
RegisterCommandEvent for registering commands as they are now engine scoped and are tied to datapacks, not listening to this event may result in commands not being re-registered when requested (see Команды).
RegisterDataEvent for providing DataRegistrations, allowing for persistent storage of custom data (see API данных).
RegisterRegistryValueEvent.GameScoped, RegisterRegistryValueEvent.EngineScoped and RegisterRegistryValueEvent.WorldScoped for providing additional entries to registries.
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.