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

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 руки?
 
Насколько помню у PlayerInteractEvent есть метод getItem, который возвращает предмет которым игрок интерактировал. В данном случае рука вообще не будет иметь никакой роли. Ещё в PlayerInteractEvent есть метод getHand(), он должен возвращать руку.

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

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

Код:
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 руки?
Ты забыл
Код:
@EventHandler
И зарегистрировал ли ты слушатель в onEnable?
 
Привет. Столкнулся с проблемой. Хотел сделать простейшее отслеживание действий игрока, но что-то пошло не так. Я хотел: Если игрок нажмает "ЛКМ", то идет отправка в чат сообщения, простейшая рп-отыгровка стука. Буду рад помощи. Код приложу ниже.

Код:
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 руки?
Попробуй этот код
Код:
    @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 блоков.
 
Назад
Верх