1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как узнать в какую сторону смотрит игрок?

Тема в разделе "Разработка плагинов для новичков", создана пользователем JayRoon, 5 окт 2022.

Статус темы:
Закрыта.
  1. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    Извиняюсь за самый простой вопрос, суть такова.
    К примеру игрок стоит на координатах 54 100 -230. Мне надо узнать в какую сторону смотрит игрок
    там в z сторону или в x сторону и получить локацию то-есть если игрок смотрит в x сторону то получить
    координаты +2 к x т.е если он стоит на 54 100 -230 и смотрит в сторону x и мне выдаст 56 100 -230 координаты. Вроде кажется ничего трудного, а не получается и не могу найти способ, я пробовал вот так:
    Код:
    Location twoBlocksAway = plr.getLocation().add(plr.getLocation().getDirection().multiply(2));
    Но это совсем другая песня. Я понимаю что надо каким то способом получать в какую сторону смотрит игрок, получать это значение и добавлять 2. Если подскажите, буду рад.
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Сторону света можно определить по Location#getYaw - оно тебе выдаст вращения головы относительно X по часовой. Здесь вот есть подходящий ответ, только заменить Yaw на нужный тебе тип. Для универсальности можно возвращать BlockFace(ограничиться сторонами света) - далее просто применяешь его относительные модификаторы loc.add(face.getModX() * 2, 0, face.getModZ() * 2)
     
  3. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    Можно немного больше сказать о "только заменить Yaw на нужны тебе тип.", что это означает?
     
  4. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Если глянешь по ссылке, там предлагают возвращать объект Yaw. В BukkitAPI нет такого класса, но вместо него может подойти BlockFace.
     
  5. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    Я извиняюсь если не понимаю, я правильно сделал?
    Код:
           private static BlockFace getYaw(Player p) {
                float yaw = p.getLocation().getYaw();
                yaw = (yaw % 360 + 360) % 360; // true modulo, as javas modulo is weird for negative values
                if (yaw > 135 || yaw < -135) {
                    return BlockFace.NORTH;
                } else if (yaw < -45) {
                    return BlockFace.EAST;
                } else if (yaw > 45) {
                    return BlockFace.WEST;
                } else {
                    return BlockFace.SOUTH;
                }
            }
     
  6. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Да. Дополню немного свой первый ответ: BlockFace#getModX и BlockFace#getModZ возвращают модификаторы от -1 до 1, которые как бы указывают направление. Соответственно: NORTH z=1 x=0; SOUTH z=-1 x=0; EAST z=0 x=1; WEST z=0 x=-1.
     
  7. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    Спасибо, изменю код и сделаю как надо, благодарочка.
     
Статус темы:
Закрыта.

Поделиться этой страницей