Помогите Отлов пкм с предметом в руках

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

Plasticable

Старожил
Девелопер
Пользователь
Баллы
173
Имя в Minecraft
Plasticable
Ку всем,как отловить событие нажатие правой кнопки мыши (использование) с определённым предметом в руках?
 
Код:
    @EventHandler
    public void onIntercact(PlayerInteractEvent e) {
        Player p = e.getPlayer();
        if (p.getItemInHand().equals(Material.DIAMOND)) {
            if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK) || e.getAction().equals(Action.RIGHT_CLICK_AIR)) {
                p.sendMessage("lol");
                return;
            }
        }
    }
 
Код:
    @EventHandler
    public void onIntercact(PlayerInteractEvent e) {
        Player p = e.getPlayer();
        if (p.getItemInHand().equals(Material.DIAMOND)) {
            if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK) || e.getAction().equals(Action.RIGHT_CLICK_AIR)) {
                p.sendMessage("lol");
                return;
            }
        }
    }
При ПКМ по чему-либо ничего не происходит.
Код:
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;

public class OnInteract implements Listener {
    @EventHandler
        public void onIntercact(PlayerInteractEvent e) {
            Player p = e.getPlayer();
            if (p.getItemInHand().equals(Material.BLAZE_ROD)) {
                if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK) || e.getAction().equals(Action.RIGHT_CLICK_AIR)) {
                    p.sendMessage("lol");
                    return;
                }
            }
        }
}
 
Код:
    @EventHandler
    public void onIntercact(PlayerInteractEvent e) {
        Player p = e.getPlayer();
        if (p.getItemInHand().equals(Material.DIAMOND)) {
            if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK) || e.getAction().equals(Action.RIGHT_CLICK_AIR)) {
                p.sendMessage("lol");
                return;
            }
        }
    }
Вот и ошибочка. Проверять нужно так: e.getAction() == Action.RIGHT_CLICK_BLOCK
Хотя.. Да, так будет лучше.

PS. @Plasticable, ты регистрировал эвент в главном классе?
 
Вот и ошибочка. Проверять нужно так: e.getAction() == Action.RIGHT_CLICK_BLOCK
Хотя.. Да, так будет лучше.

PS. @Plasticable, ты регистрировал эвент в главном классе?
Да.
Всё равно не работает. Мой код сейчас:
Код:
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;

public class OnInteract implements Listener {
    @EventHandler
        public void onIntercact(PlayerInteractEvent e) {
            Player p = e.getPlayer();
            if (p.getItemInHand().equals(Material.BLAZE_ROD)) {
                if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
                    p.sendMessage("lol");
                    return;
                }
            }
        }
}
 
Да.
Всё равно не работает. Мой код сейчас:
Код:
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;

public class OnInteract implements Listener {
    @EventHandler
        public void onIntercact(PlayerInteractEvent e) {
            Player p = e.getPlayer();
            if (p.getItemInHand().equals(Material.BLAZE_ROD)) {
                if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
                    p.sendMessage("lol");
                    return;
                }
            }
        }
}
Тоже самое проделай и с p.getItemInHand().
 
Код:
  @EventHandler
        public void onIntercact(PlayerInteractEvent e) {
            Player p = e.getPlayer();
            if(p.getItemInHand() == null)  return;
            if (p.getItemInHand().getType() == Material.BLAZE_ROD) {
                if (e.getAction() == Action.RIGHT_CLICK_BLOCK) {
                    p.sendMessage("lol");
                }
            }
}
Где-то так.
 
Ну да, я же гений, я же сравнивал ItemStack, а потом не переделал под Material .-.
 
Хм, а зачем вызывать getItemInHand(), если из самого event'а можно узнать, каким предметом кликнули getItem()?
 
Всем спасибо.
Код:
if (p.getItemInHand().getType() == Material.BLAZE_ROD) {
            if (e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) {
                p.sendMessage("lol");
               
            }
        }
Работает.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх