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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    96
    Skype:
    thecoolboy2070
    Имя в Minecraft:
    CoolBoy
    Сделай хешсет, в него заноси игроков при входе и убирай при выходе. В цикле бери игроков только из этого шедулера.[DOUBLEPOST=1486666977,1486666944][/DOUBLEPOST]
    Есть лучше?
     
  11. Автор темы
    IcedwinterZ

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

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

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

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

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

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

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

    Баллы:
    46
    NMS, как по мне, однозначно лучше.
     
  15. Автор темы
    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;
        }
    М?)[DOUBLEPOST=1486667206,1486667148][/DOUBLEPOST]
    А смысл в коде, если я его не понимаю? Хотя, может будет потом время, покопаюсь с NMS
     
  16. alexandrage

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

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

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