Тройной выстрел из лука, multi shot bow

scrimers

Premium
Сообщения
37
1.12.2
Хотел сделать тройной выстрел из лука, посмотрел на форуме, пишут
Java:
 @EventHandler
    public void onProjectileLaunch(ProjectileLaunchEvent event) {
        Projectile projectile = event.getEntity();
        ProjectileSource source = projectile.getShooter();
        if (!(source instanceof Player)) {
            return;
        }
        Player player = (Player) source;
        if (!player.getItemInHand().getType().equals(Material.BOW)) {
            return;
        }
        if (!this.isMultiArrowEnabled) {
            return;
        }
        for (int i = 0; i < 5; i++) {
            player.launchProjectile(Arrow.class);
        }
    }

я попробовал чуть переделать, что то не работает, успешно выполняет все 3 сообщения
Java:
    @EventHandler
        public void Launch(ProjectileLaunchEvent event) {
        Projectile projectile = event.getEntity();
        ProjectileSource source = projectile.getShooter();
        if (!(source instanceof Player)) {
            return;
        }
        Player p = (Player) source;
        if (p.getInventory().getItemInMainHand() == null) return;
        if (!p.getInventory().getItemInMainHand().hasItemMeta()) return;
        p.sendMessage("1");
        if (p.getInventory().getItemInMainHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_AQUA +"Multi Bow"));      
        p.sendMessage("2");
        if (!this.isMultiArrowEnabled) {
            p.sendMessage("3");
            return;
        }
        for (int i = 0; i < 5; i++) {
            p.launchProjectile(Arrow.class);
        }
    }
}
 
Последнее редактирование:
Java:
if (source instanceof Player) {
    Player p = (Player) source;
    if (p.getInventory().getItemInMainHand() == null) return;
    if (!p.getInventory().getItemInMainHand().hasItemMeta()) return;
    if (p.getItemInHand().getType().equals(Material.BOW)) {
        if (p.getInventory().getItemInMainHand().getItemMeta().getDisplayName().equals(ChatColor.DARK_AQUA +"Multi Bow")) {
            if (!this.isMultiArrowEnabled) {
                return;
            }
            for (int i = 0; i < 3; i++) {
                player.launchProjectile(Arrow.class);
            }
        }
    }
}
Писал от руки, но, думаю, будет работать
 
можно добавить проверку на то, что это именно стрела:
Java:
  if (e.getEntity() instanceof Arrow){
Авто объединение сообщений:

Java:
    @EventHandler
    public void onProjectileLaunch(ProjectileLaunchEvent e) {      
        ProjectileSource source = projectile.getShooter();
        if (source instanceof Player) {
            if (e.getEntity().getType() == EntityType.ARROW) {
                Arrow arrow = (Arrow) e.getEntity();
                Player p = (Player) arrow.getShooter();
                Arrow projectile = player.launchProjectile(Arrow.class);
                for (int i = 0; i < 3; i++) p.launchProjectile(Arrow.class);
            }
        }
    }
А если сделать вот так?
 
Последнее редактирование:
Java:
    @EventHandler
    public void onBowShoot(EntityShootBowEvent e) {
        Entity entity = e.getEntity();
        if (!(entity instanceof  Player)) {
            return;
        }
        Player player = (Player) entity;
        Vector velocity = e.getProjectile().getVelocity();
        e.setCancelled(true);
        for (int i = 0; i < 3; i++) {
            player.launchProjectile(Arrow.class).setVelocity(velocity);
        }
    }
 
scrimers, можно и припихнуть две стрелы, на вкус и цвет товарища нет.
Но мне кажется так красивее, ибо более гибко (в плане, что можно стрельнуть не только стрелами).
 
Последнее редактирование:
Авто объединение сообщений:

Может костыльно, но можно сместить изначальный вектор немного влево, и потом уже циклом прибавлять к нему немного.
 
Назад
Сверху Снизу