Помогите Как выстрельнуть стрелу? Подробнее в теме

EnderBro3D

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
EnderBro3D
Всем привет, сегодня решил сделать так чтобы при взаимодействии с каким либо предметом (оружеем) вылетала стрела, как у лука, только дальше, сильнее и без натяжки предмета (титевы)
Физику не проходили, можете не объяснять.
 
Запустить стрелу можно так(для примера взял алмазный меч):
Java:
if (event.getItem().getType() == Material.DIAMOND_SWORD)
    player.launchProjectile(Arrow.class);
 
Запустить стрелу можно так(для примера взял алмазный меч):
Java:
if (event.getItem().getType() == Material.DIAMOND_SWORD)
    player.launchProjectile(Arrow.class);
Сделал я как-то так

Код:
    @EventHandler
    public void PlayerInteract(PlayerInteractEvent event) {
        if(event.getMaterial() == Material.GOLD_HOE) {
            Player p = event.getPlayer();
            Arrow proj = p.launchProjectile(Arrow.class, p.getEyeLocation().getDirection());
            proj.setCustomName(ChatColor.DARK_GRAY + "Пуля");
            proj.setCustomNameVisible(true);
        }
    }
Как мне теперь сделать чтобы стрела летела не вниз а всегда прямо?
 
Сделал я как-то так

Код:
    @EventHandler
    public void PlayerInteract(PlayerInteractEvent event) {
        if(event.getMaterial() == Material.GOLD_HOE) {
            Player p = event.getPlayer();
            Arrow proj = p.launchProjectile(Arrow.class, p.getEyeLocation().getDirection());
            proj.setCustomName(ChatColor.DARK_GRAY + "Пуля");
            proj.setCustomNameVisible(true);
        }
    }
Как мне теперь сделать чтобы стрела летела не вниз а всегда прямо?
setVelsoity
 
Но вы же - знаете физику. Просто напишите код, или что вставлять в 1 2 3 - new Vector(1,2,3); чтобы стрела летела постоянно прямо
Как плохой вариант, можно каждый тик обновлять координату стрелы(y) на некоторое значение, получится что стрела двигается по прямой:)
Так же, можешь попробовать такой вариант(вечно прямо она лететь не будет, но намного дальше чем обычно):
Java:
    @EventHandler
    public void OnInteract(PlayerInteractEvent event) {
        if(event.getPlayer().getItemInHand().getType() == Material.ARROW) {
            Arrow p = event.getPlayer().launchProjectile(Arrow.class);
            p.setVelocity(event.getPlayer().getLocation().getDirection().multiply(1000));
        }
    }

Только что провёл эксперимент, при значении параметра метода multiply в 1000(как в примере выше) потерь в высоте при дистанции стрельбы в 200 блоков не наблюдается.Думаю, этого хватит.
 
Назад
Верх