Войти или зарегистрироваться

.

Статус
Закрыто для дальнейших ответов.
Я телепортирую игрока блоков на ~10 выше земли, можно ли ему как-то организовать "медленное" или хотя-бы "замедленное" падение? Ну чтоб и красиво было и урона не получил. Какими костылями это можно сделать? (1.9)
типо как с крыльями, только тупо вертикально вниз?
 
Возможно понесу полнейший бред, но можно попробывать добавлять велосити к игроку, направление которого будет противоположно падению.
 
Возможно новый эффект левитации?
 
Простейшее решение:
Java:
    @EventHandler
    public void onMove(PlayerMoveEvent e)
    {
        Player pl = e.getPlayer();

        Location f = e.getFrom().clone();
        Location t = e.getTo().clone();

        //направление вектора движения
        Vector dir = t.subtract(f).toVector().normalize();

        //координаты валидны
        if(!(Double.isNaN(dir.getX()) && Double.isNaN(dir.getY()) && Double.isNaN(dir.getZ())))
        {
            if(dir.getY() < 0)
            {
                if(Math.abs(dir.getBlockY()) > Math.abs(dir.getX()) && Math.abs(dir.getY()) > Math.abs(dir.getZ()))
                {
                    //более красивое отлавливание падения делайте сами
                    pl.setVelocity(dir.multiply(0.5d));//0.5 - множитель замедления.
                }
            }
        }
    }
UPD: edited.
 
Последнее редактирование:
Возможно новый эффект левитации?
Врядли, отрицательный эффект (типо левитация силой -1) нельзя же вроде..
Простейшее решение:
Java:
    @EventHandler
    public void onMove(PlayerMoveEvent e)
    {
        Player pl = e.getPlayer();
 
        Location f = e.getFrom().clone();
        Location t = e.getTo().clone();
 
        //направление вектора движения
        Vector dir = t.subtract(f).toVector().normalize();
 
        //координаты валидны
        if(!(Double.isNaN(dir.getX()) && Double.isNaN(dir.getY()) && Double.isNaN(dir.getZ())))
        {
            if(dir.getY() < 0)
            {
                if(Math.abs(dir.getBlockY()) > Math.abs(dir.getX()) && Math.abs(dir.getY()) > Math.abs(dir.getZ()))
                {
                    //более красивое отлавливание падения делайте сами
                    pl.setVelocity(pl.getVelocity().multiply(0.5d));//0.5 - тек. скорость пополам
                }
            }
        }
    }
Спасибо, обязательно попробую когда дома буду!!
И лучше бы изменять скорость только по Y. Я протестировал - персонаж падает вертикально, но в стороны двигаться не может.

На ваше усмотрение, в общем..
Если игрок падает с замедленной скоростью и не может двигатся это для меня вообще идеально!! Главное чтоб когда игрок достиг земли все стало нормально!!
 
Врядли, отрицательный эффект (типо левитация силой -1) нельзя же вроде..

Спасибо, обязательно попробую когда дома буду!!

Если игрок падает с замедленной скоростью и не может двигатся это для меня вообще идеально!! Главное чтоб когда игрок достиг земли все стало нормально!!
Как вам угодно. Экспериментируйте.
 
Обязательно, но сейчас в боулинге - с телефона((
 
Автор, посмотрите плагины Lift и SkyDiver, там это есть, ля буду гарантирую
 
Только эффект игроку какой-нибудь накладывать, иначе в клиенте он будет рывками падать, так как клиент думает что игрок падает с обычной скоростью.
Ээ... Любой эффект? И чем это поможет?
Автор, посмотрите плагины Lift и SkyDiver, там это есть, ля буду гарантирую
Попробую, но читать плагины для меня сложнее чем писать...
 
Можешь дать feather falling на ботинки, если это минигейм
 
Попробую, но читать плагины для меня сложнее чем писать...

Включаем игроку полёт чтобы не "дёргался" и силой гравитации вектора тащим его вниз

screen.png

Java:
    private Vector getVector() {
        double rotation = (double) ((this.player.getLocation().getYaw() - 90.0F) % 360.0F);

        if (rotation < 0.0D) {
            rotation += 360.0D;
        }

        return !this.isSlowDescending ? new Vector(-(this.ForwardSpeed * Math.cos(Math.toRadians(rotation))), this.FastDescend, -(this.ForwardSpeed * Math.sin(Math.toRadians(rotation)))) : new Vector(-(this.ForwardSpeed * Math.cos(Math.toRadians(rotation))), this.SlowDescend, -(this.ForwardSpeed * Math.sin(Math.toRadians(rotation))));
    }
 
Включаем игроку полёт чтобы не "дёргался" и силой гравитации вектора тащим его вниз

Посмотреть вложение 40252

Java:
    private Vector getVector() {
        double rotation = (double) ((this.player.getLocation().getYaw() - 90.0F) % 360.0F);

        if (rotation < 0.0D) {
            rotation += 360.0D;
        }

        return !this.isSlowDescending ? new Vector(-(this.ForwardSpeed * Math.cos(Math.toRadians(rotation))), this.FastDescend, -(this.ForwardSpeed * Math.sin(Math.toRadians(rotation)))) : new Vector(-(this.ForwardSpeed * Math.cos(Math.toRadians(rotation))), this.SlowDescend, -(this.ForwardSpeed * Math.sin(Math.toRadians(rotation))));
    }
Окееей, попытаюсь, главное сразу выключить полет по приземлению, и "тащение" вниз, мне не нужны халявщики которые будут себе флай получать xD
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх