Помогите Проверка, что игрок не двигается в событии PlayerMoveEvent

Lisenochek

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Lisenochek
Всем привет. В выше сказанном ивенте я пытался проверить, стоит ли игрок, но тщетно. Пробовал идеей @Mr_RoboMan, но так же тщетно. Пытался также попробовать проверить его скорость, но опять же провал. Есть ли у вас варианты решения этой проблемы?
 
Эм... т.е., ты ловишь PlayerMoveEvent, и ты хочешь узнать двинулся ли он, или повернул голову?
Если так, то получаешь x1,x2,y1,y2,z1,z2 (координаты ОТ и координаты ДО), и если (x1 != x2 || y1 != y2 || z1 != z2) то значит игрок реально подвинулся.
 
Эм... т.е., ты ловишь PlayerMoveEvent, и ты хочешь узнать двинулся ли он, или повернул голову?
Если так, то получаешь x1,x2,y1,y2,z1,z2 (координаты ОТ и координаты ДО), и если (x1 != x2 || y1 != y2 || z1 != z2) то значит игрок реально подвинулся.

Что-то сделал, но проверка не работает.

JavaScript:
    @EventHandler
    public static void fireEffect(PlayerMoveEvent e) {

        Player p = e.getPlayer();

        BukkitRunnable run = new BukkitRunnable() {

            @Override
            public void run() {
               
                double x1 = p.getLocation().getX();
                double x2 = p.getLocation().getX();
               
                double y1 = p.getLocation().getY();
                double y2 = p.getLocation().getY();
               
                double z1 = p.getLocation().getZ();
                double z2 = p.getLocation().getZ();

                if(x1 != x2 || y1 != y2 || z1 != z2) {

                    if (l.fireEffect.contains(p)) {

                        BukkitRunnable startEffect = new BukkitRunnable() {

                            @Override
                            public void run() {

                                ParticleEffect.LAVA.display(0, 0, 0, 5, 5, p.getLocation(), 10);
                            }
                        };
                        startEffect.runTaskTimer(plugin, 1, 500);
                    }
                }
            }
        };
        run.runTaskTimer(plugin, 2, 2);
    }
 
Java:
if(event.getFrom().distance(event.getTo())>0)
{
// Игрок сдвинулся
}

Писал без IDE, мог где-то допустить ошибку
 
Вот мой thread-safe MovingPlayersCatcher.
Регистрируешь его как листенер.
Когда тебе удобно (по таймеру, например) получаешь список игроков через .getMovedPlayersAsync().
Список внутри сбрасывается и наполняется новыми игроками, которые подвигались.
 
Для эффектов самое оно
Java:
    public boolean isXYZmoving(Location from, Location to) {
        return from.getBlockX() != to.getBlockX() || from.getBlockY() != to.getBlockY() || from.getBlockZ() != to.getBlockZ();
    }
 
Вот мой thread-safe MovingPlayersCatcher.
Регистрируешь его как листенер.
Когда тебе удобно (по таймеру, например) получаешь список игроков через .getMovedPlayersAsync().
Список внутри сбрасывается и наполняется новыми игроками, которые подвигались.
Вай какой костыль... P.s и телепорт != мове.
Для эффектов самое оно
Java:
    public boolean isXYZmoving(Location from, Location to) {
        return from.getBlockX() != to.getBlockX() || from.getBlockY() != to.getBlockY() || from.getBlockZ() != to.getBlockZ();
    }
:good:
 
Назад
Верх