1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем NotCopter, 31 авг 2023.

Статус темы:
Закрыта.
  1. Автор темы
    NotCopter

    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
     
  2. HauserGrim

    HauserGrim Активный участник Пользователь

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

    Так как есть похожая ситуация с interact ивентом, где вызывается отдельно для левой и правой руки.
     
  3. Автор темы
    NotCopter

    NotCopter Участник Пользователь

    Баллы:
    31
    Всё проще, я регестрировал всех инстансов этого класа в качестве слушателей, хотя достаточно было одного
     
Статус темы:
Закрыта.

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