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

Помогите Как проверить есть ли что то в сундуке?

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    AguRChek_TV
    Как проверить есть ли что то в сундуке?
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Код:
    public boolean isInventoryEmpty(Inventory inv) {
        for (ItemStack item : inv.getContents()) {
            if (item != null)
                return false;
        }
        return true;
    }
    Вызываешь через isInventoryEmpty(chest.getInventory())
     
  3. Автор темы
    AguRChek_TV

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

    Баллы:
    76
    Имя в Minecraft:
    AguRChek_TV
    спасибо
     
  4. CriticaMobslps

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

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    Советую делать в асинхронном потоке, дабы не нагружать серв
     
  5. CriticaMobslps

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

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    Всё хорошо но советую использовать contine
     
  6. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Просчет наличия предметов в сундуке не так уж нагружает, чтоб проводить его в асинхроне.
    Во-первых, continue. Во-вторых, с чего ты вообще это взял? Так ты только логику сломаешь и никогда не выйдешь с результатом false.
     
  7. Lemar98

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

    Баллы:
    76
    Разве нельзя getContents проверить на empty? Ну или getContents()#length > 0
     
  8. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Он не пуст, там куча нуллей.
     
  9. CriticaMobslps

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

    Баллы:
    76
    Имя в Minecraft:
    CriticaMobs
    Ну придираться за contine и continue эт конечно верх разума, ну а в остальном, ты не проверяешь предметы, а только первый предмет, т.е если во втором слоте будет предмет, а в первом нет, то сундук будет считаться пустым, малая нагрузка? Ало, это может на школо серверах с онлайн ом 10 не будет нагрузки, 36 слотов, т.е 36 проверок(хотя в количестве я могу ошибаться), допустим на серве 36 игроков и у каждого по 36 слотов, умножай и понимай
     
  10. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Зато по делу.
    Пересмотри мой код, гений. Если предмет НЕ null (т.е. если существует), то мы возвращаем, что сундук НЕ пуст, иначе продолжаем цикл.
    В твоём предложении мы обработаем вообще все предметы, и в любом случае вернём true.
    Мы обрабатываем не инвентари игроков, а сундук, и очень сомневаюсь, что проверка происходит каждый тик.
    Переход в асинхрон также имеет свои минусы, если, например, нам нужно в тот же тик проверить наличие в сундуке предметов. Например, запрет открытия сундука, если в нём есть предметы - ты не сможешь отменить событие, просто потому что ты уже уходишь в другой поток.
     
  11. alexandrage

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

    Баллы:
    173
    Плюсую, у сундука бывают виеверы, конкурент модифи словится в асинсе и все. Окажется что сундук уже не пуст, или наоборот и проверка по писде пойдет.
     

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