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

Статус
Закрыто для дальнейших ответов.

Conorfish

Активный участник
Пользователь
Баллы
76
Нужно сделать дист. чата, игрок пишет что-то, всем в радиусе 5 блоков должно писать что-то
Игрок - "p"
Пытался так:
Код:
Location ploc = p.getLocation();
for (target : Bukkit.getOnlinePlayers()) {
  if (target.getLocation().distance(ploc) == 5) {
    target.sendMessage("text");
  }
}
Но постоянно писало даже тем, кто в радиусе 50 блоков
 
Код:
    @EventHandler
    public void onTest(AsyncPlayerChatEvent e) {
        Location loc = e.getPlayer().getLocation();
        e.getRecipients().removeIf(player -> player.getLocation().distance(loc)>100);
    }
 
Код:
    @EventHandler
    public void onTest(AsyncPlayerChatEvent e) {
        Location loc = e.getPlayer().getLocation();
        e.getRecipients().removeIf(player -> player.getLocation().distance(loc)>100);
    }
я наверно тупой, но надо написать этим игрокам что-то(куда текст-то)?
Также, мне не через Эвент, через команду /me
 
Код:
for (Player player : Bukkit.getOnlinePlayers())
{
  if (sender.getLocation().distance(player.getLocation()) < 10) player.sendMessage(message);
}
Игроков лучше взять из мира игрока - ((Player)sender).getLocation().getWorld().getPlayers() - а дистанцию проверять через distanceSquared(Location), перед этим проверяемую дистанцию возвести в квадрат.
 
Нужно сделать дист. чата, игрок пишет что-то, всем в радиусе 5 блоков должно писать что-то
Игрок - "p"
Пытался так:
Код:
Location ploc = p.getLocation();
for (target : Bukkit.getOnlinePlayers()) {
  if (target.getLocation().distance(ploc) == 5) {
    target.sendMessage("text");
  }
}
Но постоянно писало даже тем, кто в радиусе 50 блоков
Не логичный оператор в твоем случае стоит. По логике, все кто стоит ровно 5 блоков друг от друга, увидят написанный текст, не дальше, не ближе.
В твоем случае нужно ставить <= 5.
 
Игроков лучше взять из мира игрока - ((Player)sender).getLocation().getWorld().getPlayers() - а дистанцию проверять через distanceSquared(Location), перед этим проверяемую дистанцию возвести в квадрат.
"Игроков лучше взять из мира игрока - ((Player)sender).getLocation().getWorld().getPlayers()" - не понимаю чем лучше.
distanceSquared(Location) - лучше, но я писала псевдо код.


Не логичный оператор в твоем случае стоит. По логике, все кто стоит ровно 5 блоков друг от друга, увидят написанный текст, не дальше, не ближе.
В твоем случае нужно ставить <= 5.
distance возвращает дистанцию между локациями, если она меньше 5, идем дальше, в чем проблема?
 
Игроков лучше взять из мира игрока - ((Player)sender).getLocation().getWorld().getPlayers() - а дистанцию проверять через distanceSquared(Location), перед этим проверяемую дистанцию возвести в квадрат.
А, ((Player)sender).getLocation().getWorld().getPlayers() чтобы игроки на тех же координатах в других мирах не видели сообщение, потому что distance не обращает внимание на мир? Или если distance расчитывает не только координаты x,y,z а еще и мир, то это бесполезно, полагаю.
 
А, ((Player)sender).getLocation().getWorld().getPlayers() чтобы игроки на тех же координатах в других мирах не видели сообщение, потому что distance не обращает внимание на мир? Или если distance расчитывает не только координаты x,y,z а еще и мир, то это бесполезно, полагаю.
При попытке получить расстояние между двумя точками которые находятся на РАЗНЫХ мирах, метод будет бросать исключение. Поэтому важно перед этим убеждаться что обе точки находятся в одном мире.
 
А, ((Player)sender).getLocation().getWorld().getPlayers() чтобы игроки на тех же координатах в других мирах не видели сообщение, потому что distance не обращает внимание на мир? Или если distance расчитывает не только координаты x,y,z а еще и мир, то это бесполезно, полагаю.
Еще как обращает throw new IllegalArgumentException("Cannot measure distance between " + getWorld().getName() + " and " + o.getWorld().getName());
 
Не логичный оператор в твоем случае стоит. По логике, все кто стоит ровно 5 блоков друг от друга, увидят написанный текст, не дальше, не ближе.
В твоем случае нужно ставить <= 5.
Только сейчас поняла что ты это не мне написал, а я тебе начала отвечать про свой код. :facepalm:
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх