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

Помогите заспавнить предметы сзади игрока

Тема в разделе "Разработка плагинов для новичков", создана пользователем Нейн, 21 май 2023.

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

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

    Баллы:
    66
    Имя в Minecraft:
    AmokDev
    Всем доброго времени суток!

    Я хотел заспавнить предметы сзади игрока, но столкнулся с проблемой, не смог этого сделать :D
    Вот мой код: https://pastebin.com/GWtKWzR0 (Я новичёк как в Java, так и в Bukkit, не судите строго :3)

    Можете пожалуйста подсказать, что я делаю неправильно? Буду благодарен!
     
    Последнее редактирование: 4 июн 2023
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ты работаешь с координатами игрока, а надо работать с направлением взгляда игрока. Достаточно взять вектор взгляда, домножить его на -1 для разворота и домножить на нужное расстояние до предмета.
    Почитать про вектора можно, например, тут: https://rubukkit.org/threads/perevod-vektornoe-programmirovanie-dlja-chajnikov.136442/
     
  3. Автор темы
    Нейн

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

    Баллы:
    66
    Имя в Minecraft:
    AmokDev
    Не совсем понял как их использовать :eek:

    Разве нельзя просто отрицательными координатами это реализовать? (мне нужно не конкретно сзади игрока, а чтобы предметы появлялись рандомно по кругу 0_0)
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Если спаун предметов не должен зависеть от поворота игрока, тогда действительно достаточно рассчитать координаты X,Y,Z. Если точки должны находиться по кругу, то это простая геометрическая задача на вычисление координат точек на окружности:
    X = R*cos(угол)
    Z = R*sin(угол)
    R - радиус окружности.
    Угол соответственно равен 360 разделить на кол-во точек.
    Не забудь к полученным значениям добавить текущие координаты игрока.
    Y - это высота, поэтому достаточно будет просто взять высоту игрока и при необходимости прибавлять к нему константное значение
     
  5. Автор темы
    Нейн

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

    Баллы:
    66
    Имя в Minecraft:
    AmokDev
    Спасибо большое!
     
  6. Автор темы
    Нейн

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

    Баллы:
    66
    Имя в Minecraft:
    AmokDev
    Извините, я все равно не понял как сделать это, не могли бы Вы подсказать как это реализовать прямо в коде, пожалуйста? :ninja:
     
  7. NoooobKa

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

    Баллы:
    76
    Имя в Minecraft:
    NoooobKa
    Код:
                ItemStack item = null; //Твой предмет
                Location playerLocation = null; //Локация игрока
                World world = playerLocation.getWorld();
    
                int itemCount = 10; //Количество предметов которые должны появится вокруг игрока
                double angle = 360; // itemCount; //Получаем угол между предметами
                double radius = 4.5; //Растояние, в блоках, от игрока до айтема
    
                for (int i = 0; i < itemCount; i++) { //Цикл для расчёта координат дропа предмета
                    double x = radius * Math.cos(angle * i); //Расчитываем х
                    double z = radius * Math.sin(angle * i); //Расчитываем z
                    Location dropLocation = playerLocation.clone().add(x, 0, z); //Добавляем к локации игрока полученые расчеты
                    world.dropItem(dropLocation, item); //Дропаем наш айтем в полученой локации
                }
     
  8. Автор темы
    Нейн

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

    Баллы:
    66
    Имя в Minecraft:
    AmokDev
    Благодарю
     
Статус темы:
Закрыта.

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