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

Ну давайте я тогда видео скину, посмотрите. Проблема не когда с земли быстро на пробел 2 раза жмешь, а когда 1 раз прыгнул, а потом перед приземлением двойной прыжок использовал.
И так тоже делал.
 
И так тоже делал.

Вот код, не обращайте внимания на то, что ивенты в главном классе, это тестовый плагин. Скопировал ваш код, только звук добавил при двойном прыжке, координату Y изменил с 0.5 до 0.8 (с 0.5 проблема тоже была), и добавил PlayerVelocityEvent для дебага так сказать.
PHP:
public class DoubleJump extends JavaPlugin implements Listener {
    
    private Map<String, Vector> v;
    
    @Override
    public void onEnable() {
        this.v = new HashMap<String, Vector>();
        Bukkit.getPluginManager().registerEvents(this, this);
    }

    @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.8D, -this.v.get(p.getName()).getZ()));
            p.playSound(p.getLocation(), Sound.ENTITY_BAT_TAKEOFF, 1, 1);
            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);
        }
    }
    
    @EventHandler
    public void onVelocity(PlayerVelocityEvent e) {
        Player p = e.getPlayer();
        
        p.sendMessage(e.getVelocity().toString());
    }

}
 
Так там велосити еще шлет при ударе о землю не? Тогда это абсалютная норма. Попробуй шедурером через тик отправлять. Я то думал реально какой то баг...
 
Код:
    @EventHandler
    public void on(PlayerToggleFlightEvent e) {
        Player p = e.getPlayer();
        if (e.isFlying() && e.getPlayer().getGameMode() != GameMode.CREATIVE) {
            p.setAllowFlight(false);
            new Scheduler(p, v.get(p.getName())).runTaskLater(main, 2);
            e.setCancelled(true);
        }
    }
С задержкой пошаманишь если не сработает.
 
Так там велосити еще шлет при ударе о землю не? Тогда это абсалютная норма. Попробуй шедурером через тик отправлять. Я то думал реально какой то баг...
Всмысле "там велосити еще шлет при ударе о землю"? Пробовал через тик подбрасывать игрока, тоже такая проблема, через 2 тика - реже, но тоже случается. А есть вариант без задержек исправить?
 
Всмысле "там велосити еще шлет при ударе о землю"? Пробовал через тик подбрасывать игрока, тоже такая проблема, через 2 тика - реже, но тоже случается. А есть вариант без задержек исправить?
Не думаю. Это скорее клиентсайд и ничего с этим ты не сделаешь.
 
Назад
Верх