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

Помогите Отбросить игрока от блока

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

  1. Автор темы
    SpokeKamchatka

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

    Баллы:
    66
    В общем, нужна функция, которая отбросит игрока от блока в некотором направлении с некоторой силой (так же, если бы рядом с игроком взорвался динамит)

    Спасибо : )
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Location loc = setDirection(block.getLocation().add(0.5,0.5,0.5), player.getLocation());
    player.setVelocity(loc.getDirection());

    Код:
        public static Location setDirection(Location loc, Location lookat) {
            loc = loc.clone();
            double dx = lookat.getX() - loc.getX();
            double dy = lookat.getY() - loc.getY();
            double dz = lookat.getZ() - loc.getZ();
            if (dx != 0) {
                if (dx < 0) {
                    loc.setYaw((float) (1.5 * Math.PI));
                } else {
                    loc.setYaw((float) (0.5 * Math.PI));
                }
                loc.setYaw((float) loc.getYaw() - (float) Math.atan(dz / dx));
            } else if (dz < 0) {
                loc.setYaw((float) Math.PI);
            }
            double dxz = Math.sqrt(Math.pow(dx, 2) + Math.pow(dz, 2));
            loc.setPitch((float) -Math.atan(dy / dxz));
            loc.setYaw(-loc.getYaw() * 180f / (float) Math.PI);
            loc.setPitch(loc.getPitch() * 180f / (float) Math.PI);
            return loc;
        }
     

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