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

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

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

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

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Ку всем,как отловить событие нажатие правой кнопки мыши (использование) с определённым предметом в руках?
     
  2. Хостинг MineCraft
    <
  3. aceJKE

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

    Баллы:
    123
  4. Автор темы
    Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
  5. aceJKE

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

    Баллы:
    123
    Код:
        @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;
                }
            }
        }
     
  6. Автор темы
    Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    При ПКМ по чему-либо ничего не происходит.[DOUBLEPOST=1395584329,1395584280][/DOUBLEPOST]
    Код:
    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;
                    }
                }
            }
    }
     
  7. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Вот и ошибочка. Проверять нужно так: e.getAction() == Action.RIGHT_CLICK_BLOCK
    Хотя.. Да, так будет лучше.

    PS. @Plasticable, ты регистрировал эвент в главном классе?
     
  8. Автор темы
    Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    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;
                    }
                }
            }
    }
     
  9. JustBlender

    JustBlender Старожил Девелопер Пользователь

    Баллы:
    123
    Skype:
    justblender
    Имя в Minecraft:
    JustBlender
    Тоже самое проделай и с p.getItemInHand().
     
  10. Автор темы
    Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Что именно?[DOUBLEPOST=1395585989,1395585901][/DOUBLEPOST]
    Код:
    if (p.getItemInHand() == Material.BLAZE_ROD) {
    Ошибка
    Incompatible operand types ItemStack and Material

    Или что?
     
  11. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
    Код:
      @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");
                    }
                }
    }
    Где-то так.
     
  12. aceJKE

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

    Баллы:
    123
    Ну да, я же гений, я же сравнивал ItemStack, а потом не переделал под Material .-.
     
  13. makssof

    makssof Старожил Девелопер Пользователь

    Баллы:
    103
    Skype:
    makssofez
    Код:
    if (p.getItemInHand().getType() == Material.BLAZE_ROD)
     
    Plasticable нравится это.
  14. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Хм, а зачем вызывать getItemInHand(), если из самого event'а можно узнать, каким предметом кликнули getItem()?
     
  15. Автор темы
    Plasticable

    Plasticable Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    plasticable
    Имя в Minecraft:
    Plasticable
    Всем спасибо.
    Код:
    if (p.getItemInHand().getType() == Material.BLAZE_ROD) {
                if (e.getAction() == Action.RIGHT_CLICK_BLOCK || e.getAction() == Action.RIGHT_CLICK_AIR) {
                    p.sendMessage("lol");
                   
                }
            }
    Работает.
     
Статус темы:
Закрыта.

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