Помогите Как примагнитить/притянуть энтити?

l_Slime_l

Активный участник
Пользователь
Баллы
76
Имеется такой код.
Код:
@EventHandler
    public void onHitEvent(EntityDamageByEntityEvent e) {
        Projectile projectile = (Projectile) e.getDamager();
        Player shooter = (Player) projectile.getShooter();
        Entity entity = e.getEntity();
        if(shooter instanceof Player && projectile instanceof Snowball) {
            //Здесь нужно притянуть энтити
        }
    }
Нужно притянуть энтити в которое попал снежок к игроку, который кинул этот снежок(shooter). Как это сделать?
 
Дать этому Entity ускорение в сторону игрока
 
Работоспособность не гарантирую, но примерно так:
PHP:
    @EventHandler
    public void onHitEvent(ProjectileHitEvent e) {
        if(e.getHitEntity()==null) return;
        Projectile proj = e.getEntity();
        if(proj instanceof Snowball && proj.getShooter() instanceof Player) {
            Player player = (Player) proj.getShooter();
            Entity entity = e.getHitEntity();
            Location shooter = player.getLocation();
            Location target = entity.getLocation();
            Vector diff = target.substract(shooter).toVector(); //вектор разницы координат (возможно надо поменять местами)
            diff.multiply(new Vector(1,1.2,1)); //советую прибавить Y, чтобы не тянуть существо по земле, а подбросить
            entity.setVelocity(diff);
        }
    }
 
Последнее редактирование:
Работоспособность не гарантирую, но примерно так:
PHP:
    @EventHandler
    public void onHitEvent(ProjectileHitEvent e) {
        if(e.getHitEntity()==null) return;
        Projectile proj = e.getEntity();
        if(proj instanceof Snowball && proj.getShooter() instanceof Player) {
            Player player = (Player) proj.getShooter();
            Entity entity = e.getHitEntity();
            Location shooter = player.getLocation();
            Location target = entity.getLocation();
            Vector diff = target.substract(shooter).toVector(); //вектор разницы координат (возможно надо поменять местами)
            diff.multiply(1,1.2,1); //советую прибавить Y, чтобы не тянуть существо по земле, а подбросить
            entity.setVelocity(diff);
        }
    }
А что делать если в diff.multiply(1,1.2,1) нельзя вводить 3 числа? Наверное потому что я динозаврик на Spigot 1.8 пишу) Что делать тогда?
 
А как сделать так, чтобы если игрок находится выше энтити, то энтити притягивалось вверх)
В теории - оно уже должно. Чтобы победить силу притяжения мы умножаем вектор по Y, но для больших расстояний может не хватить
 
Назад
Верх