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

Помогите Эвент забрасывания удочки.

MOR_IV

Активный участник
Пользователь
Баллы
88
Имя в Minecraft
MOR_IV
Доброго времени. Возникла проблема. Мне нужно отловить эвент забрасывания удочки bukkit.
Смысл в чем, если ловить PlayerInteractEvent или PlayerFishEvent, то я не могу отличить эвент забрасывания, от эвента отмены ловли или подсечки. Как сделать?
 
Мне надо при забрасывании с шансом отнять из инвентаря глаз паука. Все написал, а с этим разобраться не могу. Если использовать PlayerFishEvent.getCaught() , то он возвращает только в случае вылавливания рыбы, а в других случаях нету, если просто слушать PlayerFishEvent, то отнимает и при забрасывании и при вытаскивании удилища.
 
Почитай доки по этому классу.
Там перечислены все методы, которые содержит класс этого ивента. Если методы этого класса не позволяют удовлетворить твои нужды, то, боюсь, придется работать с NMS или какой-нибудь подобной фигней.

А, если лень гуглить - https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/event/player/PlayerFishEvent.html
 
Я уже читал этот класс, поэтому сюда и написал...
 
Пробовал. Не канает. Проблема не в эвенте, а в том, что забрассывание от вытаскивания не отличается.
Ну так есть куча решений для этого, например, хранить данные в HashMap, где ключ является String, а значение Boolean, и затем сверять.
 
Последнее редактирование:
А если вот так?
Java:
    @EventHandler(priority = EventPriority.HIGHEST)
    public void onFishThrow(ProjectileLaunchEvent ev){
        if(ev.getEntityType() == EntityType.FISHING_HOOK){
            getServer().getConsoleSender().sendMessage("Player " + ((Player)ev.getEntity().getShooter()).getName() + " throw fishing rod");
        }
    }
 
Последнее редактирование:
Ну так есть куча решений для этого, например, хранить все в мапе<string, boolean> и затем сверять.
А если вот так?
Java:
    @EventHandler(priority = EventPriority.HIGHEST)
    public void onFishThrow(ProjectileLaunchEvent ev){
        if(ev.getEntityType() == EntityType.FISHING_HOOK){
            getServer().getConsoleSender().sendMessage("Player " + ((CraftPlayer)ev.getEntity().getShooter()).getName() + " throw fishing rod");
        }
    }
Что за дерьмо вы написали?
 
Я понял свою ошибку.
Вот это
Java:
((CraftPlayer)ev.getEntity().getShooter()).getName()
Надо заменить на это
Java:
((Player)ev.getEntity().getShooter()).getName()
Когда я тестировал, то в консоли заметил и из-за этого почему-то решил скастовать именно с этим классом.
Код:
Player CraftPlayer{name=kesha0129} throw fishing rod

P/S Спасибо за подсказку!
 

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

Назад
Верх