Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите В чем ошибка?

_Rufu5_

Активный участник
Пользователь
Баллы
78
Имя в Minecraft
_Rufu5_
Снимок экрана 2013-12-31 в 20.40.39.png Всех с наступающим или с уже наступившем)!!! Но мне нужна помощь. Вот код, bukkit ругается на первое же условие((
Смысл плагина такова при наличии диспенсера с измененом именем требуется переименовать палку в то же имя, чтобы войти в диспенсер.
Вот логи:
Код:
public void openCase(PlayerInteractEvent event){
   
        Player player = event.getPlayer();
   
        if(event.getClickedBlock().getType() == Material.DISPENSER && player.getItemInHand().getType() == Material.STICK)
        {
            Dispenser blockD = (Dispenser)event.getClickedBlock();
            if(player.getItemInHand().getItemMeta().getDisplayName() == null || blockD.getInventory().getName() == null)return;
            if(player.getItemInHand().getItemMeta().getDisplayName().equals(blockD.getInventory().getName()))
            {
                return;
            }else
            {
                event.setCancelled(true);
            }
        }
         
    }
 
Последнее редактирование:
из блока извлеки BlockState, получишь раздатчик.
(Dispenser) event.getClickedBlock().getState();
 
Добавь проверку
if(!event.hasBlock())
return
 
Код:
@EventHandler
    public void openCase(PlayerInteractEvent event){
        Player player = event.getPlayer();
        if(!event.hasBlock())return;
        if(event.getClickedBlock().getType() == Material.DISPENSER)
        {
            Dispenser blockD = (Dispenser)event.getClickedBlock().getState();
            player.sendMessage(blockD.getInventory().getName());
            if(blockD.getInventory().getName().equalsIgnoreCase("container.dispenser"))
            {
                player.sendMessage("√");
                return;
            }else{
                if(player.getItemInHand().getType() == Material.STICK &&
                        player.getItemInHand().getItemMeta().getDisplayName().equals(blockD.getInventory().getName()))
                {
                    return;
                }else{         
                    event.setCancelled(true); 
                }
            }
        }       
    }
Вот так тоже не работает. WhY?
 
Ошибка из-за того, что при срабатывании данного события не всегда есть блок и нужно проверять getClickedBlock() на null. Данной проверки нет - от сюда и ошибка.
 
Ошибка из-за того, что при срабатывании данного события не всегда есть блок и нужно проверять getClickedBlock() на null. Данной проверки нет - от сюда и ошибка.
Для этого и нужен hasBlock(), который проверяет блок на нулл
Код:
  public boolean hasBlock()
  {
    return this.blockClicked != null;
  }
 

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

Назад
Верх