Перейти к основному содержимому

API Событий

Позволяет подписываться на любые события Bukkit.

Базовое использование

// 1. Импорт класса события
const PlayerJoinEvent = Java.type('org.bukkit.event.player.PlayerJoinEvent');

// 2. Подписка на событие
events.on(PlayerJoinEvent, (event) => {
const player = event.getPlayer();
player.sendMessage("Добро пожаловать!");
});

Доступные события

События игрока

СобытиеКлассОписание
ВходPlayerJoinEventИгрок зашел на сервер
ВыходPlayerQuitEventИгрок покинул сервер
СмертьPlayerDeathEventИгрок умер
КомандаPlayerCommandPreprocessEventИгрок ввел команду
КликPlayerInteractEventИгрок кликнул
ПрыжокPlayerJumpEventИгрок прыгнул
ТелепортPlayerTeleportEventИгрок телепортировался

События блоков

СобытиеКлассОписание
РазрушениеBlockBreakEventБлок сломан
УстановкаBlockPlaceEventБлок установлен
ВзаимодействиеBlockInteractEventВзаимодействие с блоком

События сущностей

СобытиеКлассОписание
ВзаимодействиеEntityInteractEventВзаимодействие с сущностью
Смерть сущностиEntityDeathEventСущность умерла

Примеры

Несколько событий в одном скрипте

const PlayerJoinEvent = Java.type('org.bukkit.event.player.PlayerJoinEvent');
const PlayerQuitEvent = Java.type('org.bukkit.event.player.PlayerQuitEvent');
const PlayerDeathEvent = Java.type('org.bukkit.event.entity.PlayerDeathEvent');

// Вход
events.on(PlayerJoinEvent, (event) => {
const player = event.getPlayer();
player.sendMessage("§aДобро пожаловать!");
});

// Выход
events.on(PlayerQuitEvent, (event) => {
const player = event.getPlayer();
logger.info(player.getName() + " вышел с сервера");
});

// Смерть
events.on(PlayerDeathEvent, (event) => {
const player = event.getEntity();
event.setDeathMessage("§c" + player.getName() + " умер!");
});

Проверка типа игрока

const EntityDamageEvent = Java.type('org.bukkit.event.entity.EntityDamageEvent');

events.on(EntityDamageEvent, (event) => {
const entity = event.getEntity();

// Проверяем, что это игрок
if (entity instanceof org.bukkit.entity.Player) {
const player = entity;
player.sendMessage("§cВы получили урон!");
}
});

Отмена события

const PlayerCommandPreprocessEvent = Java.type('org.bukkit.event.player.PlayerCommandPreprocessEvent');

events.on(PlayerCommandPreprocessEvent, (event) => {
const msg = event.getMessage().toLowerCase();

// Запретить команду /stop
if (msg.startsWith("/stop")) {
event.setCancelled(true);
event.getPlayer().sendMessage("§cЭта команда недоступна!");
}
});

Работа с EventPriority

По умолчанию используется NORMAL. Для изменения приоритета нужно использовать Bukkit API напрямую:

const PlayerJoinEvent = Java.type('org.bukkit.event.player.PlayerJoinEvent');
const EventPriority = Java.type('org.bukkit.event.EventPriority');

org.bukkit.plugin.PluginManager.registerEvent(
PlayerJoinEvent,
listenerObject,
EventPriority.HIGH,
(listener, event) => {
if (event instanceof PlayerJoinEvent) {
callback.execute(event);
}
},
plugin
);