Универсальные события
В игре постоянно происходят всякие события, и HollowCore
позволяет ловить некоторые из них или
даже отменять, если это возможно.
Список событий
се события так сразу и не найдёшь, некоторые из них могут предоставляться другими модами или
быть созданы вами. Но основные из них вы можете найти в пакете
ru.hollowhorizon.hc.common.events
.
Создание обработчиков событий
Создайте метод, где в качестве аргумента укажите класс нужного события. После - добавьте
аннотацию @SubscribeEvent
(в параметры аннотации можете указать её приоритет, чем ниже - тем
раньше будет вызван метод, по сравнению с событиями других модов. Сделано это для того, чтобы вы
могли отменить события раньше других модов, если это вам нужно).
@SubscribeEvent
// Данный метод запустится, когда игрок войдёт в мир или на сервер
fun onPlayerJoin(event: PlayerEvent.Join) {
... // То что будет происходить, когда метод будет вызван событием
}
Создание своих событий
Если нужно создать своё событие, то реализуйте интерфейс
ru.hollowhorizon.hc.common.events.Event
, м при необходимости
ru.hollowhorizon.hc.common.events.Cancelable
, если ваше событие можно отменить.
После - лоя вызова события создайте новый экземпляр класса и вызовите метод
EventBus.post(event)
, где event
- экземпляр вашего класса. Если ваше событие кто-то
отменил - то значение переменной isCanceled
- изменится на true
.
// Экземпляр вашего класса
class UniverseCollapseEvent(val message: String): Event, Cancelable {
override var isCanceled: Boolean = false // Начальное значение отменяемого события должно быть - false (иначе смысл его отменять, не так ли?)
}
// Пример запуска вашего события
fun somewhereInYourCode() {
val event = UniverseCollapseEvent("Ой...") // Создаём событие
EventBus.post(event) // Вызываем событие
if(event.isCanceled) return // Если событие отменено, то завершаем метод
Minecraft.crash(...) // Событие не завершено, делайте дальше, что хотите
}
// Пример использования вашего события
@SubscribeEvent
fun onUniverseCollapse(event: UniverseCollapseEvent) {
event.isCanceled = true
}