Помогите PlayerInteractEvent вызывается два раза

Lisenochek

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Lisenochek
Очень странная проблема. Руку проверяю, но все равно, когда я открываю ЛЮБУЮ деревянную дверь, в очень частых случаях проскакивает отклик ивента с LEFT_CLICK_AIR

Вот например:
Код:
    @EventHandler
    public void onInteractWithBlock(PlayerInteractEvent e) {

        Player player = e.getPlayer();

        if (e.getHand() != EquipmentSlot.HAND) return;

        Bukkit.broadcastMessage(e.getHand() + " " + e.getAction().name() + " " + (e.getClickedBlock() == null ? "NULL" : e.getClickedBlock().getType().name()));

        Bukkit.getPluginManager().callEvent(new PlayerInteractItemEvent(player, player.getInventory().getItemInMainHand(), e));
    }

Казалось бы, при открытии двери должен ивент откликнуться ОДИН раз с действием RIGHT_CLICK_BLOCK, одна к нему добавляется еще и LEFT_CLICK_AIR. Для меня это очень серьезный баг и я не понимаю, как его залатать. Если в аннотации @EventHandler добавить ignoreCancelled=true, то это решит проблему, однако появится другая: ЛКМ перестанет работать от слова ВООБЩЕ.

Версия у меня 1.12.2
Я прошу помощи, помогите!
 
Действительно, почему это он 2 раза калится 😁
f4e0e385c4.jpg
 
Действительно, почему это он 2 раза калится 😁
f4e0e385c4.jpg
Это кастомный ивент, который в основном нужен для реализации использования предмета. Ничего криминального, вот пример:

Код:
    @EventHandler
    public void onUseBandage(PlayerInteractItemEvent e) {

        if (!Utils.checkItem(e.getStack(), Items.BANDAGE.getStack())) return;

        ItemsUse.create(e.getPlayer(), ItemsUse.UsingItems.BANDAGE);
    }
 
Я пробовал уже не вызывать этот ивент. Тупо дебаг. Результат все тот же! ((
 
Это уже обсуждали на форуме, и не раз, ивент вызывается 2 раза, потому что в майнкрафте добавлена 2 рука, добавь обычный if, в чём проблема? Ивент имеет метод getHand()
 
Всем тем, кто пишет про вторую руку - посмотрите на код выше
 
Живи с этим. LEFT_CLICK_* прицеплен на анимацию руки, а она высылается клиентом при взаимодействии со многими блоками.
 
Живи с этим. LEFT_CLICK_* прицеплен на анимацию руки, а она высылается клиентом при взаимодействии со многими блоками.
Я понял. Есть варианты, как это можно закостылить?
 
ну ты так и не ответил что собираешься делать с эвентом и почему нельзя просто проигнорировать LEFT_CLICK_AIR
Чисто с точки зрения моего плагина, происходит ложный выстрел из оружия, когда игрок им пытается открыть дверь
 
Если тема актуальна, то предложу свой вариант решения как ты и просил с костылями, есть 3 варианта
1. Если 2-ой клик вызывается всегда
2. Если он вызывается по разному
3. Проверь сколько раз вызывается евент(тоже бывают проблемы у новичков)

Отпиши в личку какой тебе ближе всего, по возможности отвечу(на всякий случай
https://t.me/evg_onegin)
 
Назад
Верх