1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Отслеживание клика

Тема в разделе "Разработка плагинов для новичков", создана пользователем thebooom, 18 июн 2020.

  1. Автор темы
    thebooom

    thebooom Активный участник

    Баллы:
    61
    Привет. Столкнулся с проблемой. Хотел сделать простейшее отслеживание действий игрока, но что-то пошло не так. Я хотел: Если игрок нажмает "ЛКМ", то идет отправка в чат сообщения, простейшая рп-отыгровка стука. Буду рад помощи. Код приложу ниже.

    Код:
    package things.main;
    
    import org.bukkit.Bukkit;
    import org.bukkit.ChatColor;
    import org.bukkit.Material;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Listener;
    import org.bukkit.event.block.Action;
    import org.bukkit.event.player.PlayerInteractEvent;
    
    public class knock implements Listener{
    
        
        //если лкм по двери, то рп оповещение
        public void interact (PlayerInteractEvent e){
            Action a = e.getAction();
            
            if(a != Action.RIGHT_CLICK_BLOCK) return;
            Player p = e.getPlayer();
    
            
            if (p.getItemInHand().getType() == Material.AIR) {
                if (e.getClickedBlock().getType() == Material.ACACIA_DOOR || e.getClickedBlock().getType() == Material.DARK_OAK_DOOR || e.getClickedBlock().getType() == Material.BIRCH_DOOR || e.getClickedBlock().getType() == Material.IRON_DOOR || e.getClickedBlock().getType() == Material.JUNGLE_DOOR || e.getClickedBlock().getType() == Material.OAK_DOOR) {
                        Bukkit.broadcastMessage(ChatColor.GRAY + "* " + p.getName() + " постучал в двери.");
                    }
                }
            }
            
        }
    
    
    UPD: Версия 1.15.2, возможно проблема в том, что начиная с версии 1.9+ у игрока 2 руки?
     
  2. ifxandy

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

    Баллы:
    76
    Имя в Minecraft:
    witwar
    Насколько помню у PlayerInteractEvent есть метод getItem, который возвращает предмет которым игрок интерактировал. В данном случае рука вообще не будет иметь никакой роли. Ещё в PlayerInteractEvent есть метод getHand(), он должен возвращать руку.

    По канону в Java классы обычно называют с большой буквы(я про "knock")
    Условия с 1100500 "||" практика не очень, это очень трудно воспринимать.

    UPD: Правильно помню.
     
  3. HunterGaming

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

    Баллы:
    96
    Имя в Minecraft:
    sqdFendy
    Ты забыл
    Код:
    @EventHandler
    И зарегистрировал ли ты слушатель в onEnable?
     
  4. LOVEC3327

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

    Баллы:
    76
    Имя в Minecraft:
    LOVEC3327
    Попробуй этот код
    Код:
        @EventHandler
        void playerInteract(PlayerInteractEvent e) {
            Player p = e.getPlayer();
            if (p.getGameMode() == GameMode.SURVIVAL) {
                if (e.getAction() == Action.LEFT_CLICK_BLOCK && p.getInventory().getItemInMainHand().getType() == Material.AIR) {
                    if (e.getClickedBlock().getBlockData() instanceof Door) {
                        Bukkit.broadcastMessage(ChatColor.GRAY + "* " + p.getName() + " постучал в двери.");
                    }
                }
            }
        }
    И не забудь зарегистрировать слушатель. Ну и я бы сделал оповещение не по всему серверу, а в радиусе 10-20 блоков.
     

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