Помогите Проблема с проверкой брони

l4legenda

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
l4legenda
Вот таким способом проверяю есть ли на игроке броня.
Код:
                 for(Player pl: Bukkit.getOnlinePlayers()){
                     ItemStack[] armor = pl.getInventory().getArmorContents();
                    
                     if (armor[0].getType() == Material.CHAINMAIL_HELMET) {
                        }
                        if (armor[1].getType() == Material.CHAINMAIL_CHESTPLATE) {
                        }
                        if (armor[2].getType() == Material.CHAINMAIL_LEGGINGS) {
                        }
                        if (armor[3].getType() == Material.CHAINMAIL_BOOTS) {
                        }
                 }
Если на нем нет брони то выдает ошибку. Почему это происходит и как можно это исправить ?
 
Код:
try{

}catch(NullPointerException e){
p.sendMessage("На тебе нет брони какой-то");
}
 
Фи, как неэффективно. Исключения стоят дорого, так что так можно легко просадить производительность.
 
Конкретно этот случай - нет, но другие - да.
UPD. Замерил. В этом случае разница невелика, но обычная проверка на null всё равно компактнее с точки зрения исходников и быстрее на какие-то микросекунды.
 
Последнее редактирование:
Я вот в эсеншелсе видел, что каждая "ошибка" аля игрок не найден, недостаточно аргументов - кидается исключение. Зачем...
 
player.getEquipment().getHelmet(). Ошибка выдается потому, что item null, вызвать getType() нельзя
 
Я вот в эсеншелсе видел, что каждая "ошибка" аля игрок не найден, недостаточно аргументов - кидается исключение. Зачем...
Полагаю, так удобно выбраться в код, запустивший выполнение команды, не пробрасывая данные через кучу return'ов.
 
Назад
Верх