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

Помогите Если игрок в радиусе, то...

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

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

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
    Есть такая ситуация:
    Идет игрок, ничего не подозревает, строит дом, собирает цветочки в общем всякие там у него заморочки.
    Тем временем, в радиусе 20 блоков от него, стоит моб, зомби.

    Игрок должен получить сообщение, если моб зашел в радиус 20 блоков от игрока. Как это сделать?

    Можно ли это сделать через NMS? Т.К знаю, что там есть атрибут FOLLOW_RANGE (как то так), возможно ли, получить ту самую энтитю через NMS?
    А вообще, можно и другие варианты, с минимальной потерей производительности
     
  2. AtomicInteger

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

    Баллы:
    76
    Как минимум, это придется делать на постоянной основе, то есть шедулером или подобным.Дальше, нужно будет проверять сущностей вблизи, хоть реализацией бакита, хоть самописным алгоритмом.Так что по производительности не очень получается.Можно сделать проверку со стороны игрока, в шедулере перебираем всех игроков, проверяем на сущностей вблизи и высылаем сообщение.В качестве оптимизации можно заменить 2 метода своими: getOnlinePlayers заменить на коллекцию, а изменять эту коллекцию при входе/выходе игрока и getNearbyEntities, переписать только по х и +- 4 блока по у.Как вариант, может быть, но может кто-то что-нибудь получше посоветует.
     
  3. Автор темы
    IcedwinterZ

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

    Баллы:
    76
    Имя в Minecraft:
    IcedwinterZ
  4. Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Если честно, вот ваш "не оптимизированный" вариант:

    Код:
    @Override
    public void run () {
    for (Player player : Bukkit.getOnlinePlayers()) {
    for (Entity entity : player.getNearbyEntities(20, 20, 20)) {
    if (entity.getType() == EntityType.ZOMBIE) player.sendMessage("Спасайся, где-то рядом пидор бегает!");}
    }
    }
    
     
  5. xDark

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

    Баллы:
    96
    break;
     
  6. Exception_Prototype

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

    Баллы:
    96
    [​IMG]
     

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