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

IcedwinterZ

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

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

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

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

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

if (entity.getType() == EntityType.ZOMBIE) player.sendMessage("Спасайся, где-то рядом пидор бегает!");}
cwl.gif
 
Назад
Верх