Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

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

Нейн

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
AmokDev
Всем доброго времени суток!

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

Можете пожалуйста подсказать, что я делаю неправильно? Буду благодарен!
 
Последнее редактирование:
Ты работаешь с координатами игрока, а надо работать с направлением взгляда игрока. Достаточно взять вектор взгляда, домножить его на -1 для разворота и домножить на нужное расстояние до предмета.
Почитать про вектора можно, например, тут: https://rubukkit.org/threads/perevod-vektornoe-programmirovanie-dlja-chajnikov.136442/
 
Ты работаешь с координатами игрока, а надо работать с направлением взгляда игрока. Достаточно взять вектор взгляда, домножить его на -1 для разворота и домножить на нужное расстояние до предмета.
Почитать про вектора можно, например, тут: https://rubukkit.org/threads/perevod-vektornoe-programmirovanie-dlja-chajnikov.136442/
Не совсем понял как их использовать :eek:

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

Разве нельзя просто отрицательными координатами это реализовать? (мне нужно не конкретно сзади игрока, а чтобы предметы появлялись рандомно по кругу 0_0)
Если спаун предметов не должен зависеть от поворота игрока, тогда действительно достаточно рассчитать координаты X,Y,Z. Если точки должны находиться по кругу, то это простая геометрическая задача на вычисление координат точек на окружности:
X = R*cos(угол)
Z = R*sin(угол)
R - радиус окружности.
Угол соответственно равен 360 разделить на кол-во точек.
Не забудь к полученным значениям добавить текущие координаты игрока.
Y - это высота, поэтому достаточно будет просто взять высоту игрока и при необходимости прибавлять к нему константное значение
 
Если спаун предметов не должен зависеть от поворота игрока, тогда действительно достаточно рассчитать координаты X,Y,Z. Если точки должны находиться по кругу, то это простая геометрическая задача на вычисление координат точек на окружности:
X = R*cos(угол)
Z = R*sin(угол)
R - радиус окружности.
Угол соответственно равен 360 разделить на кол-во точек.
Не забудь к полученным значениям добавить текущие координаты игрока.
Y - это высота, поэтому достаточно будет просто взять высоту игрока и при необходимости прибавлять к нему константное значение
Спасибо большое!
 
Если спаун предметов не должен зависеть от поворота игрока, тогда действительно достаточно рассчитать координаты X,Y,Z. Если точки должны находиться по кругу, то это простая геометрическая задача на вычисление координат точек на окружности:
X = R*cos(угол)
Z = R*sin(угол)
R - радиус окружности.
Угол соответственно равен 360 разделить на кол-во точек.
Не забудь к полученным значениям добавить текущие координаты игрока.
Y - это высота, поэтому достаточно будет просто взять высоту игрока и при необходимости прибавлять к нему константное значение
Извините, я все равно не понял как сделать это, не могли бы Вы подсказать как это реализовать прямо в коде, пожалуйста? :ninja:
 
Код:
            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); //Дропаем наш айтем в полученой локации
            }
 
Код:
            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); //Дропаем наш айтем в полученой локации
            }
Благодарю
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх