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

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

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

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

    l4legenda Участник Пользователь

    Баллы:
    36
    Имя в 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) {
                            }
                     }
    Если на нем нет брони то выдает ошибку. Почему это происходит и как можно это исправить ?
     
  2. Хостинг MineCraft
    <
  3. gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Нужно добавить подобные проверки:
    Код:
    armor[N] != null
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Эту магию сложно понять. То оно воздух то null.
     
  5. hyndorik

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

    Баллы:
    66
    Имя в Minecraft:
    hyndo
    Код:
    try{
    
    }catch(NullPointerException e){
    p.sendMessage("На тебе нет брони какой-то");
    }
     
  6. gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Фи, как неэффективно. Исключения стоят дорого, так что так можно легко просадить производительность.
     
  7. Exception_Prototype

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

    Баллы:
    46
    На 1.17.10 достаточно было на AIR, а потом 1.12 добавилось != null.
     
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Пустым catch-ем? Да лан?
     
  9. gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Он не пустой. Там есть вывод сообщения. В любом случае это гораздо дороже обычного null check.
     
  10. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Ты замерял?
     
  11. gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Конкретно этот случай - нет, но другие - да.
    UPD. Замерил. В этом случае разница невелика, но обычная проверка на null всё равно компактнее с точки зрения исходников и быстрее на какие-то микросекунды.
     
    Последнее редактирование: 3 июл 2017
  12. Exception_Prototype

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

    Баллы:
    46
    Я вот в эсеншелсе видел, что каждая "ошибка" аля игрок не найден, недостаточно аргументов - кидается исключение. Зачем...
     
  13. DonDays

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

    Баллы:
    96
    Имя в Minecraft:
    DonDays
    player.getEquipment().getHelmet(). Ошибка выдается потому, что item null, вызвать getType() нельзя
     
  14. gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Полагаю, так удобно выбраться в код, запустивший выполнение команды, не пробрасывая данные через кучу return'ов.
     

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