Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

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

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

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

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

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

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

    alexandrage Администратор

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

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

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

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

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

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

    Код:
    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
  7. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Код:
    @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 + "Нельзя использовать данное зелье!");
                }
            }
        }
    
     
  8. Fenix78563

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

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

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

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

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

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

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

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

    Баллы:
    46
    Окончательный вариант. Рабочий.
    Код:
     @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;
        }
       }
      }
     }
    
     
Статус темы:
Закрыта.

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