Помогите Странно работает двойной прыжок

У тебя должно все работать с оригинальным кодом, потому что ты устанавливаешь каждый раз новый вектор игроку, сбрасывая старый, из-за чего не требуется даже гасить скорость.
Возможно какой то античит блокирует.
Никаких античитов и прочего не установлено.
 
Почему назад то. Вектор будет нулевым если прибавить противоположные скорости.
Ещё заметил, что игрока слабо подкидывает при определённой координате Y у вектора player.getVelocity (-0.0780004 или что-то около этого), в общем странно как-то, не знаю что и делать, другие плагины на двойной прыжок с этой же проблемой.

Но иногда игрока нормально подкидывает при той же координате Y.
 
Ещё заметил, что игрока слабо подкидывает при определённой координате Y у вектора player.getVelocity (-0.0780004 или что-то около этого), в общем странно как-то, не знаю что и делать, другие плагины на двойной прыжок с этой же проблемой.

Но иногда игрока нормально подкидывает при той же координате Y.
Попробуй телепортировать игрока на его же координаты перед толчком
 
Так и быть, помогу не грамотным. Тяжело когда матешу не учат совсем.
doubleJump условная ифка для активации.
Код:
    @EventHandler
    public void on(PlayerMoveEvent e) {
        if (doubleJump) {
            Player p = e.getPlayer();
            Location vector = e.getFrom().subtract(e.getTo());
            p.setVelocity(new Vector(-vector.getX(), 0.5, -vector.getZ()));
        }
    }
 
Так и быть, помогу не грамотным. Тяжело когда матешу не учат совсем.
doubleJump условная ифка для активации.
Код:
    @EventHandler
    public void on(PlayerMoveEvent e) {
        if (doubleJump) {
            Player p = e.getPlayer();
            Location vector = e.getFrom().subtract(e.getTo());
            p.setVelocity(new Vector(-vector.getX(), 0.5, -vector.getZ()));
        }
    }
Так там вроде игроку velocity ставится не в PlayerMoveEvent, а в PlayerToggleFlightEvent
 
Так там вроде игроку velocity ставится не в PlayerMoveEvent, а в PlayerToggleFlightEvent
Я не разбираюсь как оно юзается для таких прыжков, никогда не делал, переменную вектора для вертикального ускорения можно поместить в хешмап.
 
Та ну, как-то не хорошо получается, в моём примере лучше было, только никак не могу решить проблему, попробую ещё может через 1 тик ставить velocity, вдруг поможет.
Идеально прыгает, не знаю о чем ты.
 
Код:
public class EventListener implements Listener {

    private Map<String, Vector> v;

    public EventListener() {
        this.v = new HashMap<String, Vector>();
    }

    @EventHandler
    public void on(PlayerJoinEvent e) {
        Player p = e.getPlayer();
        this.v.put(p.getName(), new Vector(0, 0, 0));
    }

    @EventHandler
    public void on(PlayerQuitEvent e) {
        this.v.remove(e.getPlayer().getName());
    }

    @EventHandler
    public void on(PlayerToggleFlightEvent e) {
        Player p = e.getPlayer();
        if (e.isFlying() && e.getPlayer().getGameMode() != GameMode.CREATIVE) {
            p.setVelocity(new Vector(-this.v.get(p.getName()).getX(), 0.5, -this.v.get(p.getName()).getZ()));
            e.setCancelled(true);
        }
        p.setAllowFlight(false);
    }

    @EventHandler
    public void on(PlayerMoveEvent e) {
        Player p = e.getPlayer();
        this.v.put(p.getName(), e.getFrom().toVector().subtract(e.getTo().toVector()));
        if (p.isOnGround()) {
            p.setAllowFlight(true);
        }
    }
}
 
Последнее редактирование:
Ну еще ифку надо да, чтоб в воздухе не повторяли много раз)
 
Код:
public class EventListener implements Listener {

    private Map<String, Vector> v;

    public EventListener() {
        this.v = new HashMap<String, Vector>();
    }

    @EventHandler
    public void on(PlayerJoinEvent e) {
        Player p = e.getPlayer();
        this.v.put(p.getName(), new Vector(0, 0, 0));
    }

    @EventHandler
    public void on(PlayerQuitEvent e) {
        this.v.remove(e.getPlayer().getName());
    }

    @EventHandler
    public void on(PlayerToggleFlightEvent e) {
        Player p = e.getPlayer();
        if (e.isFlying() && e.getPlayer().getGameMode() != GameMode.CREATIVE) {
            p.setVelocity(new Vector(-this.v.get(p.getName()).getX(), 0.5, -this.v.get(p.getName()).getZ()));
            e.setCancelled(true);
        }
        p.setAllowFlight(false);
    }

    @EventHandler
    public void on(PlayerMoveEvent e) {
        Player p = e.getPlayer();
        this.v.put(p.getName(), e.getFrom().toVector().subtract(e.getTo().toVector()));
        if (p.isOnGround()) {
            p.setAllowFlight(true);
        }
    }
}
Что-то сейчас попробовал, и моя проблема никуда не ушла, так же плохо подбрасывает при приземлении. Могу сделать видео, если нужно.
 
Последнее редактирование:
Что-то сейчас попробовал, и моя проблема никуда не ушла, так же плохо подбрасывает при приземлении. Могу сделать видео, если нужно.
Нет там никаких проблем, не нужно там скорость игрока гасить как я предположил ранее. Только вертикальную сохранять, что я и сделал. С велосити она не снимается, потому пришлось в ивент лезть. Иначе прыжок не естественный будет.
 
Нет там никаких проблем, не нужно там скорость игрока гасить как я предположил ранее. Только вертикальную сохранять, что я и сделал. С велосити она не снимается, потому пришлось в ивент лезть. Иначе прыжок не естественный будет.
Я же говорю, проблема присутствует. На какой версии проверяли? Я на paper 1.15.2 и spigot 1.15.2. Я для теста полностью скопировал код, который вы написали, проверил, ничего не изменилось, игрока в определённый момент перед приземлением слабо подкидывает. Возможно, вы не поймали этот момент. Если вниз просто лететь с высоты и использовать двойной прыжок, то все хорошо.
 
Я же говорю, проблема присутствует. На какой версии проверяли? Я на paper 1.15.2 и spigot 1.15.2. Я для теста полностью скопировал код, который вы написали, проверил, ничего не изменилось, игрока в определённый момент перед приземлением слабо подкидывает. Возможно, вы не поймали этот момент. Если вниз просто лететь с высоты и использовать двойной прыжок, то все хорошо.
Да как только не прыгал, всегда одинаково и с воздуха и с земли и с высоты. Единственное, это требовалось сохранить вертикальное ускорение игрока.
 
Да как только не прыгал, всегда одинаково и с воздуха и с земли и с высоты. Единственное, это требовалось сохранить вертикальное ускорение игрока.
Ну давайте я тогда видео скину, посмотрите. Проблема не когда с земли быстро на пробел 2 раза жмешь, а когда 1 раз прыгнул, а потом перед приземлением двойной прыжок использовал.
 
Последнее редактирование:
Назад
Верх