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

В разработке Сканировать блоки вокруг игрока

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

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

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

    Баллы:
    103
    Имя в Minecraft:
    SiT
    Хочу осуществить код, который будет определять насколько в закрытом от общего мира помещении находится игрок, например в доме или пещере.
    Просто сканировать блоки в несколько сторон слишком примитивно.

    Также известно, что проверка блоков нагруженный процесс, но других простых способов я не знаю.

    Вот мой код, в котором есть две проблемы: не завершается планировщик и высокая нагрузка на основной поток. При попытке в асинхроне выполнять происходят непредсказуемые вещи.
    https://pastebin.com/raw/7g33vvJ6
     
  2. LuckyZeeRo

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

    Баллы:
    96
    Имя в Minecraft:
    i0xHeX
    1. Никогда не взаемодействуй с API ядра в асинхронном потоке с исключением того, что ты абсолютно уверен, что это потокобезопасно. В твоем случае как либо взамодействовать с активной картой в асинхроне нельзя. Я могу порекомендовать копировать чанки (делать снепшоты), а затем в асинхроне смотреть блоки.
    Код:
    ChunkSnapshot snapshot = chunk.getChunkSnapshot(false, false, false);
    2. Не завершается потому что каждый цикл ты заново присваиваешь переменную:
    Код:
    int cycleCount = duration;
    Выведи ее за цикл, и офк там будет ошибка "effectively final", самый простой способ юзать AtomicInteger или массив с 1 элементом.
    3. Enum эффективнее сравнивать так, меньше инструкций:
    Код:
    b1.getType() == Material.AIR
     
  3. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    да скорее из-за большей читабельности нужно так сравнивать, меньше инструкций в байт коде это второстепенный фактор, мы на джава пишем, а не инструкции считаем.
     
  4. Автор темы
    Sitmobedaf

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

    Баллы:
    103
    Имя в Minecraft:
    SiT
    Спс. На счёт переменной в цикле протупил конечно.
     

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