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

Помогите Телепорт Entity вокруг заданной локации

Тема в разделе "Разработка плагинов для новичков", создана пользователем Disca, 14 июн 2019.

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

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

    Баллы:
    66
    Как сделать плавный телепорт entity вокруг заданной локации?(ArmorStand)
     
  2. IlyaHaker

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

    Баллы:
    76
    Запускаешь Runnable, который будет срабатывать, скажем, раз в секунду и устанавливаешь координаты новой локации таким образом:
    x = r * cos(3.14 * k / n)
    y = y
    z = r * sin(3.14 * k / n)
    где r - нужный тебе радиус, k - счетчик, который увеличивается на единицу с каждой итерацией и n - число, сколько итераций нужно, чтобы пройти полный круг
     
  3. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Это скорее вопрос по геометрии, а не по баккиту.
    Чтобы телепортировать - entity.teleport(location).
    Человек выше кинул код для подсчёта координат точек (location). Добавлю только, что вместо 3.14 стоит использовать константу Math.PI
     
  4. Автор темы
    Disca

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

    Баллы:
    66
    Код:
           private double x = 11.655;
        private double y = 87;
        private double z = -32.191;
        
        private World w = Bukkit.getWorld("world");
        
        private ArmorStand as = (ArmorStand) w.spawnEntity(new Location(w, 11.546, 87, -32.052), EntityType.ARMOR_STAND);
    
        private double r = 1;
    
        private double k = 1;
    
        private double n = 10;
    
    @Override
        public void run() {
                    k++;
                    String name = "§cИгроков: §e" + Bukkit.getOnlinePlayers().size();
                    as.setCustomName(name);
                    x = r * Math.cos(3.14 * k / n);
                    z = r * Math.sin(3.14 * k / n);
                    as.teleport(new Location(w, x, y, z));
        }
    Что-то не видно стойку. Без расчётов она видна.
     
  5. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Кажется, тебе нужно сохранить оригинальную локацию и каждый раз по новой прибавлять к ней те x и z, которые тебе подкинули выше, т.е.
    Код:
                    int adjustedX = x + r * Math.cos(3.14 * k / n);
                    int adjustedZ = z + r * Math.sin(3.14 * k / n);
                    as.teleport(new Location(w, adjustedX, y, adjustedZ));
    А вообще, если стойка всегда будет крутиться только вокруг одной локации, тебе стоит просчитать все локации заранее и записать их в какой-нибудь массив, дабы сервер не считал это всё раз за разом.
     
  6. Автор темы
    Disca

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

    Баллы:
    66
    Спасибо.
     
  7. Автор темы
    Disca

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

    Баллы:
    66
    А можно и если можно, то как рассчитать yaw и pitch, чтобы локация была всегда слева?
     
  8. IlyaHaker

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

    Баллы:
    76
    yaw = 180 * k / n - 90
    pitch = 0
     
  9. Автор темы
    Disca

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

    Баллы:
    66
    Спасибо, а как сделать чтобы телепортировало в другую сторону?
     
  10. IlyaHaker

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

    Баллы:
    76
    x = x + r * cos(Math.PI * (60 - k) / n)
    z = z + r * sin(Math.PI * (60 - k) / n)
    yaw = 180 * (60 - k) / n + 90
    pitch = 0
     
  11. Автор темы
    Disca

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

    Баллы:
    66
    Спасибо, тема закрыта.
     
Статус темы:
Закрыта.

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