Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Баг с двойным вызовом события

Метки:
Теги Теги
1.12.2 event plugin development
Статус
Закрыто для дальнейших ответов.

NotCopter

Участник
Пользователь
Баллы
31
Всем привет, есть у меня вот такой код:

Код:
@EventHandler private void onClick(InventoryClickEvent ev) {
        if (!ev.getClickedInventory().getName().equals("Выбор команды")) return;
        ev.setCancelled(true);

        ev.getWhoClicked().sendMessage("CLICKED!");
        Object[] team_names = teams.keySet().toArray();
        int[] placement = getPlacement();
        for (int i = 0; i < teams.size(); i++) {
            if (ev.getSlot() != placement[i]) continue;
            ev.getWhoClicked().sendMessage((String) team_names[i] + " - выбранная команда");
            return;
        }
    }

Проблема в том, что при клике на предмет (или просто в пустую область) событие вызывается дважды:
upload_2023-8-31_17-24-15.png

Как это фиксить? Сервер - Paper 1.12.2
 
Возможно, ивент вызывается для разных ClickType или InventoryAction
Выведи где-нибудь результат с getAction() и getClick(). Как увидишь что отличается в обоих вызовах, добавишь где-нибудь проверку.

Так как есть похожая ситуация с interact ивентом, где вызывается отдельно для левой и правой руки.
 
Возможно, ивент вызывается для разных ClickType или InventoryAction
Выведи где-нибудь результат с getAction() и getClick(). Как увидишь что отличается в обоих вызовах, добавишь где-нибудь проверку.

Так как есть похожая ситуация с interact ивентом, где вызывается отдельно для левой и правой руки.
Всё проще, я регестрировал всех инстансов этого класа в качестве слушателей, хотя достаточно было одного
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх