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

Статус
Закрыто для дальнейших ответов.

Exception_Prototype

Активный участник
Пользователь
Баллы
96
Какой эвент отвечает за использования игроком зелья?
Мне нужно перехватить использования зелья (просто когда выпивает его) и получить тип этого зелья.
 
Ивента после юза зелья вроде как нет, только до.
 
Немного посмотрел, подумал, но как узнать эффект зелья не нашёл.

Чтобы получить зелье, можешь использовать
Код:
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());
    }
}
 
Последнее редактирование:
Java:
@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 + "Нельзя использовать данное зелье!");
            }
        }
    }
 
Java:
@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 + "Нельзя использовать данное зелье!");
            }
        }
    }
с этим что то не так?

или ты делишься конечным кодом?
 
Java:
@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 + "Нельзя использовать данное зелье!");
            }
        }
    }
ну сей ивент вызывается не только при выпивании зелья, но и при поедании других поедаемых вещей, поэтому надо делать проверку, либо ставить try catch
 
Окончательный вариант. Рабочий.
Java:
 @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;
    }
   }
  }
 }
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх