Помогите Как сделать дистанцию чата?

Статус
Закрыто для дальнейших ответов.
А, ((Player)sender).getLocation().getWorld().getPlayers() чтобы игроки на тех же координатах в других мирах не видели сообщение, потому что distance не обращает внимание на мир? Или если distance расчитывает не только координаты x,y,z а еще и мир, то это бесполезно, полагаю.
Во-первых, меньше игроков проверять придется. Во-вторых, как писали ранее, ошибка.
А разве метод distance не делает тоже самое?
Он возвращает дистанцию по теореме Пифагора. Метод distanceSquared опускает одну тяжёлую операцию - вывод из-под корня. Т.е. если distance 9, distanceSquared вернёт 81. Поэтому мы просто заранее возводим в квадрат проверяемую дистанцию и сверяем её с полученной.
 
Во-первых, меньше игроков проверять придется. Во-вторых, как писали ранее, ошибка.

Он возвращает дистанцию по теореме Пифагора. Метод distanceSquared опускает одну тяжёлую операцию - вывод из-под корня. Т.е. если distance 9, distanceSquared вернёт 81. Поэтому мы просто заранее возводим в квадрат проверяемую дистанцию и сверяем её с полученной.
Там оверхет никакущий в Math.sqrt, даже при 200 операций на тик вычислять и сервер это не заметит. Это придется конкретно упоростья и разом флудить 300+ ботами. Но тогда сервер уже упадет от отправки пакетов на чат :D
 
Последнее редактирование:
Там оверхет никакущий в Math.sqrt, даже при 200 операций на тик вычислять и сервер это не заметит.с Это придется конкретно упоростья и разом флудить 300+ ботами. Но тогда сервер уже упадет от отправки пакетов на чат :D
Мало ли как ещё тс решит использовать проверку на расстоянии - при движении например. Да и в конце концов - размер кода увеличится максимум на пару строк, читабельность не жертвуется.
 
Конечно извини если я не заметил тут ответ, но продублируйте его если он тут есть. Из-за споров я ничего не понял, а только запутался
 
Конечно извини если я не заметил тут ответ, но продублируйте его если он тут есть. Из-за споров я ничего не понял, а только запутался
Ответ @Lillie-May, но с поправкой получения игроков из мира, а не всего онлайна. Опционально - проверка не дистанции, а дистанции в квадрате.
 
Нужно сделать дист. чата, игрок пишет что-то, всем в радиусе 5 блоков должно писать что-то
Игрок - "p"
Пытался так:
Код:
Location ploc = p.getLocation();
for (target : Bukkit.getOnlinePlayers()) {
  if (target.getLocation().distance(ploc) == 5) {
    target.sendMessage("text");
  }
}
Но постоянно писало даже тем, кто в радиусе 50 блоков
Ты отправляешь сообщение всем игрокам а if работает если рядом игрок
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх