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

Помогите Не срабатывает триггер "EntityDamageEvent".

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

  1. Автор темы
    Mafia888

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

    Баллы:
    61
    Имя в Minecraft:
    NyashMyash99
    Доброго времени суток, форумчане)

    Вопрос не совсем в категорию "для новичков", но надеюсь что кто-то сталкивался с подобным и сможет подсказать решение...

    Задача стояла тривиальная - отловить удар по сущности, однако в ходе дебага выяснилось, что все события урона по сущностям ( наследуемые от EntityDamageEvent, например
    EntityDamageByEntityEvent ) просто не вызываются, встаёт вопрос - почему?
    Код слушателя прикладывать смысла нет, даже на стандартном бродкасте сообщения не работает.

    Проблема точно не в:
    - Регистрации слушателя: EventHandler присутствует, класс регистрируются, другие типы событий в этом же классе работают.
    - Флагах региона: Пробовал в том числе на чистом мире, где "__global__" не имеет посторонних флагов.
    - Режиме игры: Пробовал ударить сущность во всех режимах.
    - Типе сущности: Коровы не триггерят события точно так же, как и стойки для брони.
    - Приоритетах слушателя: Пробовал все, от LOWEST до MONITOR, в том числе добавляя ignoreCancelled.

    С похожей проблемой ( отсутствие вызова события ) я уже сталкивался, когда пытался отловить взрыв блока головой Визера, пока на сервере стоял "/gamerule mobGriefing false", но в текущей ситуации нельзя отменить урон по сущностям при помощи gamerule, так что вариант отпадает.

    Версия сервера: Paper 1.16.5.
    Плагины: Citizens, FAWE, HackedCore, HackedServer, HolographicDisplays, Multiverse-Core, Plugman, ProtocolLib, Vault, ViaVersion, ViaBackwards, WorldGuard, различные самописы.
     
    Последнее редактирование: 26 окт 2021
  2. ВukkitPrоfi

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

    Баллы:
    76
    а для гадалок?
     
  3. Автор темы
    Mafia888

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

    Баллы:
    61
    Имя в Minecraft:
    NyashMyash99
    Решение вопроса без гадания здесь возможно исключительно на опыте, если человек с подобным уже сталкивался и знает, где конкретно может быть проблема, ибо логичных решений со стороны кода нет.

    Варианта два:
    1. Это какая-то настройка сервера, про которую я не знаю --> кто-то с опытом настройки файлов серверов ответит быстрее, чем я буду перебирать 200 аргументов.
    2. Это настройка какого-то плагина, следствие аналогичное ( хотя вариант маловероятный, настройки скорее всего стандартные ).
     
  4. ZDCoder

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

    Баллы:
    76
    Ты пробовал хотя бы подобное ?
    @EventHandler
    public void handleEntityDamageByEntityEvent(EntityDamageByEntityEvent e) {
    if(e.getDamager() instanceof Player)
    ((Player)e.getDamager()).sendMessage("1);
    }
    }
     
  5. Автор темы
    Mafia888

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

    Баллы:
    61
    Имя в Minecraft:
    NyashMyash99
    Полагаю, что за три часа дебага я не только это "хотя-бы" попробовал)
     
    Последнее редактирование: 27 окт 2021
  6. ZDCoder

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

    Баллы:
    76
    Пересоздавать проект пробовал ? Попробуй сменить ядро на пару версий ниже/выше, в противном случае переустанови идею.
     
  7. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Проверь на пустом сервере с тем же ядром.
    Если событие срабатывает - вероятно, дело в плагинах; бинарным поиском отыщи проблемный плагин (поставь половину - если все равно срабатывает, ставь другую; если перестало - удали половину из установленных; повторять до одного плагина).
    Если не срабатывает - попробуй обновить ядро. Если после обновления все равно не работает - дело в коде. В таком случае попробуй закинуть слушатель урона в отдельный класс, а там уже по обстоятельствам нужно смотреть.
     

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