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

Помогите Эвент на использование зелий. [Решено]

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

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

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

    Баллы:
    96
    Какой эвент отвечает за использования игроком зелья?
    Мне нужно перехватить использования зелья (просто когда выпивает его) и получить тип этого зелья.
     
  2. FlamestoN

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

    Баллы:
    66
    Skype:
    flameston
    Имя в Minecraft:
    FlamestoN
  3. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ивента после юза зелья вроде как нет, только до.
     
  4. FlamestoN

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

    Баллы:
    66
    Skype:
    flameston
    Имя в Minecraft:
    FlamestoN
  5. iD3LSY

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

    Баллы:
    76
    Немного посмотрел, подумал, но как узнать эффект зелья не нашёл.

    Чтобы получить зелье, можешь использовать
    Код:
    public void PlayerItemConsume(PlayerItemConsumeEvent e) {
        if(e.getItem().getType() == Material.POTION) {
            Potion pi = Potion.fromItemStack(e.getItem());
        }
    }
    Если покопаешь, может и эффект найдёшь :)
    Так. Усё. Вот, держи

    Код:
    public void PlayerItemConsume(PlayerItemConsumeEvent e) {
        if(e.getItem().getType() == Material.POTION) {
            PotionMeta pm = (PotionMeta) e.getItem().getItemMeta();
            e.getPlayer().sendMessage("" + pm.getBasePotionData().getType());
        }
    }
     
    Последнее редактирование: 14 янв 2017
  6. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Код:
    @EventHandler
        public void onPotionDrink(PlayerItemConsumeEvent event) {
    
            Potion p = Potion.fromItemStack(event.getItem());
    
            for (PotionEffect pe : p.getEffects()) {
    event.getPlayer().sendMessage(pe.getType().toString());
    
                if (pe.getType().toString().equals("INVISIBILITY")) {
                    event.setCancelled(true);
                    event.getPlayer().sendMessage(ChatColor.RED + "Нельзя использовать данное зелье!");
                }
            }
        }
    
     
  7. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    с этим что то не так?

    или ты делишься конечным кодом?
     
  8. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Просто кинул, мож у кого поправки будут.
     
  9. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    ну сей ивент вызывается не только при выпивании зелья, но и при поедании других поедаемых вещей, поэтому надо делать проверку, либо ставить try catch
     
  10. Автор темы
    Exception_Prototype

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

    Баллы:
    96
    Окончательный вариант. Рабочий.
    Код:
     @EventHandler
     public void onPotionDrink(PlayerItemConsumeEvent event) {
      if (event.getItem().getType() == Material.POTION) {
       Potion p = Potion.fromItemStack(event.getItem());
    
       for (PotionEffect pe : p.getEffects()) {
        if (pe.getType().toString().contains("INVISIBILITY")) {
         event.setCancelled(true);
         event.getPlayer().sendMessage(ChatColor.RED + "Нельзя использовать данное зелье!");
         return;
        }
       }
      }
     }
    
     
Статус темы:
Закрыта.

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