1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Стрелы падают с небес (spawnArrow, launchProjectile)

Тема в разделе "Разработка плагинов для новичков", создана пользователем StrayDog31, 16 мар 2021.

  1. Автор темы
    StrayDog31

    StrayDog31 Новичок Пользователь

    Баллы:
    6
    Приветствую! Хочу сделать предмет, который по нажатию ПКМ будет стрелять стрелами (или чем либо еще) с неба. Есть примерные наброски кода:
    PHP:
    @EventHandler

    public void use10(PlayerInteractEvent e) {
       
        
    Player player e.getPlayer();
        
    World world player.getWorld();
        
    Arrow arrow player.launchProjectile(Arrow.class);
        
    ItemStack SkullBook e.getPlayer().getInventory().getItemInMainHand();
        
    ItemStack HoneyArmorC e.getPlayer().getInventory().getChestplate();
        if(
    e.getPlayer().getInventory().getItemInMainHand().getType() != Material.BOOK) return;
        if(
    e.getAction() != Action.RIGHT_CLICK_AIR && e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
        if(!
    SkullBook.getItemMeta().hasDisplayName()) return;
        if(!
    SkullBook.getItemMeta().getDisplayName().equals(ChatColor.GOLD "Огненный дождь")) return;
        if(
    e.getPlayer().getExp() == 0) return;

         
        
    player.playSound(player.getLocation(), Sound.ENTITY_LIGHTNING_BOLT_THUNDER81);
        
    player.spawnParticle(Particle.CLOUDplayer.getLocation().add(0.5D0.5D0.5D), 25 1.2F1.2F1.2F);
        
    world.spawnArrow(player.getTargetBlock(null10).getLocation(), null00);
        
    arrow.teleport(player.getTargetBlock(null10).getLocation());
        
    arrow.setVelocity(direction.multiply(4));
        if(
    e.getPlayer().getInventory().getChestplate().getType() == Material.GOLDEN_CHESTPLATE && HoneyArmorC.getItemMeta().hasDisplayName() && HoneyArmorC.getItemMeta().getDisplayName().equals(ChatColor.YELLOW "Пчелиный нагрудник")) player.giveExp(+1);
       
        }
    По сути, план состоит в том, чтобы создать стрелы на сколько-то блоков по У выше TargetBlock и задать им направление "вниз" (В коде есть два варианта). Но, во-первых, не понимаю, как задать это самое направление, а, во-вторых, хотелось бы узнать, есть ли способ создать стрелы в определенном радиусе, чтобы увеличить площадь поражения (Не знаю, как лучше объяснить, надеюсь, понятно, о чем я). Знающие люди, подскажите, пожалуйста, что делать!
     
  2. Veyn12

    Veyn12 Активный участник Пользователь Заблокирован

    Баллы:
    76
    Имя в Minecraft:
    Veynique
    нашёл на англоязычном баките, переделаешь под себя:
    for(int i = 0 ; i < 3 ; i++) {

    int spread = 0;

    if(i == 0) spread = -45;
    else if (i == 2) spread = 45;

    double pitch = ((player_location.getPitch() + 90) * Math.PI) / 180;
    double yaw = ((player_location.getYaw() + 90 + spread) * Math.PI) / 180;

    double z_axis = Math.sin(pitch);

    x = z_axis * Math.cos(yaw);
    y = z_axis * Math.sin(yaw);
    z = Math.cos(pitch);

    Vector vector = new Vector(x, z, y);

    player.shootArrow().setVelocity(vector.multiply(2));
    }
     
  3. Автор темы
    StrayDog31

    StrayDog31 Новичок Пользователь

    Баллы:
    6
    Благодарю. Но не могли бы вы объяснить, что за переменная i и для чего она нужна?
     
  4. Veyn12

    Veyn12 Активный участник Пользователь Заблокирован

    Баллы:
    76
    Имя в Minecraft:
    Veynique
    Количество стрел
     
  5. Автор темы
    StrayDog31

    StrayDog31 Новичок Пользователь

    Баллы:
    6
    Спасибо. Но, почему-то все равно ни в какую не работает (скорее всего, у меня руки просто кривые). Я попробовал сделать проще, но все равно есть какие-то проблемы. Возможно ли это реализовать как-то так?
    PHP:
     Vector vector = new Vector(0, -10);
            
    //world.spawnArrow(player.getLocation(), vector.multiply(2), 1, 1);
            
    Entity arrow player.launchProjectile(Snowball.class);
            
    arrow.setVelocity(vector.multiply(1f));

     

Поделиться этой страницей