Дистанция отображения сообщения в чате

Kler

Каменная лига
Сообщения
6
Лучшие ответы
0
Симпатии
0
#1
Версия Minecraft
1.12.2
Подтверждение
Я максимально подробно описал проблему, включая исходный код файлов, краш лог, изображения и другую информацию, которая может помочь пользователям форума решить мой вопрос!
Добрый день. У меня есть команда, которая возвращает какое-то сообщение. Но она это делает на весь мир, а я хочу чтобы сообщение было видно всем игрокам только в определённом радиусе. Что имею на данный момент:

Java:
float radius = 32F;
        List<EntityPlayerMP> playerList = (List<EntityPlayerMP>) server.getPlayerList();
        
        Iterator iterator = playerList.iterator();   
        while (iterator.hasNext()) {
        for (EntityPlayerMP player : playerList) {
            player = (EntityPlayerMP)iterator.next();
            float offsetX = (float)(player.posX - senderPlayer.posX);
            float offsetZ = (float)(player.posZ - senderPlayer.posZ);
            double dis = Math.sqrt(offsetX * offsetX + offsetZ * offsetZ);
            if (dis <= radius) {
                player.sendMessage(message);
                    }
                
                }
            }
При попытке использовать команду вместо сообщения появляется ошибка: "An unknown error occurred while attempting to perform this command".
Сначала пытался делать через PlayerList, но с ним не хочет работать вот эта строчка for (EntityPlayerMP player : playerList).
 

RareScrap

Каменная лига
Сообщения
295
Лучшие ответы
8
Симпатии
62
#2
Ошибки мало. Посмотри краш в логах и выложи
 

BlesseNtumble

Железная лига
Сообщения
706
Лучшие ответы
26
Симпатии
61
#3
Ничего, что он радиус чекает от каждого игрока? Конечно всем будет отображаться
 

Kler

Каменная лига
Сообщения
6
Лучшие ответы
0
Симпатии
0
#4
Полное цитирование предыдущего сообщения запрещено
Ничего, что он радиус чекает от каждого игрока? Конечно всем будет отображаться
Можете пожалуйста сказать номер строчки, где допущена ошибка? Он вроде как вычисляет расстояние между отправителем и другими игроками и уже его сравнивает с радиусом. Так задумывалось, по крайней мере.
 

Зарак

Каменная лига
Сообщения
366
Лучшие ответы
11
Симпатии
34
#5
Java:
        float radius = 32F;
        BlockPos pos = sender.getPosition();
        List<EntityPlayerMP> playerList = server.getPlayerList().getPlayers();
        AxisAlignedBB alignedBB = new AxisAlignedBB(pos.getX() - radius, pos.getY() - radius, pos.getZ() - radius,
                pos.getX() + radius, pos.getY() + radius, pos.getZ() + radius);
        playerList.stream().filter(entityPlayerMP -> alignedBB.contains(new Vec3d(entityPlayerMP.posX, entityPlayerMP.posY, entityPlayerMP.posZ)))
                .forEach(entityPlayerMP -> entityPlayerMP.sendMessage(new TextComponentString(message)));
 

Kler

Каменная лига
Сообщения
6
Лучшие ответы
0
Симпатии
0
#6
Спасибо, уже сам расковырял один мод на 1.7.10 :D
Java:
World world = senderPlayer.getEntityWorld();
        List<EntityPlayer> playerEntities = world.playerEntities;
        int radius = 20;
        for (EntityPlayer listeningPlayer : playerEntities){
            if (2*2==5){ //тупо затычка потому что в моде откуда я это скомуниздил тут была переменная из конфига ;..;
            }
        else {
            if ((senderPlayer.getPosition().distanceSq(listeningPlayer.posX, listeningPlayer.posY, listeningPlayer.posZ)) <= (radius*radius)) {
                listeningPlayer.sendMessage(message);
            }
        }
Оставлю, вдруг кому ещё понадобится.
 

Зарак

Каменная лига
Сообщения
366
Лучшие ответы
11
Симпатии
34
#7
Тему закрой и лайк поставь лучшему ответу)
Java:
World world = senderPlayer.getEntityWorld();
        List<EntityPlayer> playerEntities = world.playerEntities;
        int radius = 20;
        for (EntityPlayer listeningPlayer : playerEntities){
            if ((senderPlayer.getPosition().distanceSq(listeningPlayer.posX, listeningPlayer.posY, listeningPlayer.posZ)) <= (radius*radius)) {
                listeningPlayer.sendMessage(message);
        }
 
Сверху