Помогите Не работает ItemInOffHand в PlayerInteractEvent

  • Автор темы Автор темы Kirpich
  • Дата начала Дата начала

Kirpich

Новичок
Пользователь
Баллы
6
Есть у меня такой код. Проблема в том, что с правой рукой работает проверка, а с левой нет. Задача такая - отменять запуск фейерверка или же зарядку арбалета, если в ЛЕВОЙ руке у меня специальный мушкет или фейерверк (со специальными названиями).

Для правой руки все работает как я хочу, если патрон в левой руке есть, то арбалет заряжается, если же нет, то нет. Теперь вот не могу с левой решить проблему. Я даже пытался в чат выводить предмет в левой руке, но он либо выводит null, либо не выводит вообще ничего.

Помогите пожалуйста.

Код:
@EventHandler
    public void booleanPatron(PlayerInteractEvent e) {
        ItemMeta itemInMainHand = e.getPlayer().getInventory().getItemInMainHand().getItemMeta();
        ItemMeta itemInOffHand = e.getPlayer().getInventory().getItemInOffHand().getItemMeta();
        if (itemInMainHand.getDisplayName().equals(ChatColor.AQUA + "Мушкет")) {
            ItemStack item = e.getPlayer().getInventory().getItemInOffHand();
            e.setCancelled(item == null || item.getType() != Material.FIREWORK_ROCKET  || !item.getItemMeta().getDisplayName().equals(ChatColor.AQUA + "Пуля для Мушкета"));
        }
        if (itemInMainHand.getDisplayName().equals(ChatColor.AQUA + "Пуля для Мушкета")) {
            ItemStack item = e.getPlayer().getInventory().getItemInOffHand();
            e.setCancelled(item == null || item.getType() != Material.CROSSBOW || !item.getItemMeta().getDisplayName().equals(ChatColor.AQUA + "Мушкет"));
        }

        if (itemInOffHand.getDisplayName().equals(ChatColor.AQUA + "Мушкет")) {
            e.getPlayer().sendMessage("в левой руке у тебя мушкет");
            e.setCancelled(true);
        }
        if (itemInOffHand.getDisplayName().equals(ChatColor.AQUA + "Пуля для Мушкета")) {
            e.getPlayer().sendMessage("в левой руке у тебя пуля");
            e.setCancelled(true);
        }
    }
 
Если выводит null - предмета в руке нет.
 
Так была же раньше такая тема, я причём объяснил довольно понятно
http://rubukkit.org/threads/zarjadit-arbalet-tolko-konkretnym-snarjadom.181618/
Я сейчас про левую руку пишу. Та тема закрыта, в правой все работает отлично, но вот теперь происходит что-то не то, из-за чего и не работает. Ищу с чем это связано, ведь раньше все работало.
 
Я сейчас про левую руку пишу. Та тема закрыта, в правой все работает отлично, но вот теперь происходит что-то не то, из-за чего и не работает. Ищу с чем это связано, ведь раньше все работало.
Ну так если тебе нужно то же самое только наоборот, то замени везде проверки с правой руки на левую и с левой на правую, по тому примеру. В чём проблема?
 
Код:
    @EventHandler
    public void booleanPatron(PlayerInteractEvent e) {
        if (e.getHand() == EquipmentSlot.HAND) {
            Использовался предмет в правой руке
        } else {
            Использовался предмет в левой руке
        }
    }
 
Последнее редактирование:
Ну так если тебе нужно то же самое только наоборот, то замени везде проверки с правой руки на левую и с левой на правую, по тому примеру. В чём проблема?
В том то и дело, что этот способ не работает. Майнкрафт просто ничего не видит. Причем с main hand все идеально, а вот off hand он будто даже не проверяет.
 
в чем проблема посмотреть что не так дебагом, а не гадать? присылай игроку название предмета, может с ним проблема, присылай сообщения по коду чтобы понять, где он перестал работать
 
в чем проблема посмотреть что не так дебагом, а не гадать? присылай игроку название предмета, может с ним проблема, присылай сообщения по коду чтобы понять, где он перестал работать
Так и делал, выше писал. Ничего не выводилось, но проблема уже решена.
 
Назад
Верх