В любом случае, чтобы игнорировать определенную координатную ось в PlayerMoveEvent, используя getFrom и getTo

#java #minecraft

Вопрос:

Итак, я создаю плагин для защиты от взлома скорости на Java, используя PlayerMoveEvent, чтобы рассчитать расстояние, на которое игрок перемещается по сравнению с ограничением скорости, есть ли способ игнорировать ось y, чтобы игрок не получил удар при падении? Я провел кучу исследований по событию с краном, и там не так много информации, любая помощь приветствуется!

     public void getLimit(PlayerMoveEvent e) {
        Player player = e.getPlayer();
        if(e.getFrom().distance(e.getTo()) > 0.8) {
            player.kickPlayer("Too fast");
        }
    }
}
 

Ответ №1:

Вот два способа, которыми вы можете это сделать. Первый способ-сделать математику самостоятельно, а не использовать distance :

     public void getLimit(PlayerMoveEvent e) {
        Player player = e.getPlayer();
        Location from = e.getFrom();
        Location to = e.getTo();
        double dx = to.getX() - from.getX();
        double dz = to.getZ() - from.getZ();
        if(dx * dx   dz * dz > 0.64) {
            player.kickPlayer("Too fast");
        }
    }
 

Второй способ-создать вектор с нулевым расстоянием по оси y, а затем измерить его:

     public void getLimit(PlayerMoveEvent e) {
        Player player = e.getPlayer();
        Location from = e.getFrom();
        Location to = e.getTo().clone();
        to.setY(from.getY());
        if(from.distance(to) > 0.8) {
            player.kickPlayer("Too fast");
        }
    }