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

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

Discussion in 'Разработка плагинов для новичков' started by IcedwinterZ, Feb 18, 2017.

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

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

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

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

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

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

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

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

    Trophy Points:
    76
    Имя в Minecraft:
    IcedwinterZ
  5. Lisenochek

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

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

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

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

    Trophy Points:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    break;
     
  7. Exception_Prototype

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

    Trophy Points:
    46
    [​IMG]
     

Share This Page