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

Помогите Отслеживание энтити в радиусе, наиболее оптимальное решение

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Спасибо, еще вопрос, под каждого моба делать класс?
     
  2. AtomicInteger

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

    Баллы:
    76
    Это, я бы сказал, вопрос архитектуры.Я бы согласно парадигмам ООП делал так: 1 объект = 1 класс.
     
  3. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Самое херовое то, что такую нмс хрен ты под рефлексию сам переделаешь. А без неё придётся твой плагин под каждую версию обновлять.
     
  4. AtomicInteger

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

    Баллы:
    76
    Переделать то легко, но вот скорость работы...Приходится чем-то жертвовать, что поделать.
     
  5. Автор темы
    IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Да я уже с NMS доигрался, есть альтернативы? С мин. нагрузкой, кроме NMS, с шедуллером не вариант, хотя, попробую ка я
     
  6. AtomicInteger

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

    Баллы:
    76
    Хотя, возможно в 9 нас обрадуют на счёт рефлексии, я где-то читал об этом.
     
  7. Автор темы
    IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Пока делаю шудуллером, возник вопрос, мне каждые 10 тик, перебирать игроков? Или каждую минуту, в отдельном шудуллере, добавлять в коллецию (которую тоже потом придется перебирать )
     
  8. AtomicInteger

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

    Баллы:
    76
    Будешь перебирать каждого игрока и getNearbyEntities в шедулере?Плохое решение...
     
  9. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    Сделай хешсет, в него заноси игроков при входе и убирай при выходе. В цикле бери игроков только из этого шедулера.
    Есть лучше?
     
  10. Автор темы
    IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    А если NMS до меня вообще не допирает, наверное, потому что, нету времени
     
  11. AtomicInteger

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

    Баллы:
    76
    Тоже хотел написать это:) + Можешь модифицировать алгоритм перебора сущностей, что бы они только по горизонтали перебирались, так нагрузки будет меньше.Хотя, мобы перестанут трогать тебя на +1 блоке по у :)
     
  12. CoolBoy

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

    Баллы:
    96
    Имя в Minecraft:
    Xezard
    С нмс проблема будет в том, что ты будешь наследоваться от нмс класса при переопределении метода / поля, который тебе нужен. Такую штуку тоже под рефлексию можно запилить, но, крайне проблематично.
    Шедулер - костыль, но, наиболее выгоден в твоём варианте.
    Либо жди, пока кто-нибудь из местных не скинет тебе готовый рабочий код.
     
  13. AtomicInteger

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

    Баллы:
    76
    NMS, как по мне, однозначно лучше.
     
  14. Автор темы
    IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Код:
    public static List<Entity> entityLocationRange(Location locAt, int range){
            List<Entity> ent = new ArrayList<Entity>();
            for(Entity e : locAt.getWorld().getEntities()){
                if(e.getLocation().add(0, 2, 0).distanceSquared(locAt) <= range){
                    ent.add(e);
                }
            }
            return ent;
        }
    М?)
    А смысл в коде, если я его не понимаю? Хотя, может будет потом время, покопаюсь с NMS
     
  15. alexandrage

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

    Баллы:
    173
    Так и я об этом, там такое есть в кастомнпс.
     

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