Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите getBlockY для нескольких блоков

Discussion in 'Разработка плагинов для новичков' started by GODZAR, May 9, 2016.

Thread Status:
Not open for further replies.
  1. Автор темы
    GODZAR

    GODZAR Старожил Пользователь

    Trophy Points:
    103
    Skype:
    goblin3004
    Есть такой код - он спавнит алмазные блоки вокруг игрока:
    Code:
        public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
        {
            Player player = (Player) sender;
            Location location = player.getLocation();
        
            if (command.getName().equalsIgnoreCase("start"))
            {
                for (int x = location.getBlockX() + 10; x >= location.getBlockX() - 10; x--)
                {
                    for (int z = location.getBlockZ() + 10; z >= location.getBlockZ() - 10; z--)
                    {
                        while (location.getWorld().getBlockAt(x, location.getBlockY(), z).getType() != Material.AIR)
                        {
                            location.setY(location.getBlockY() + 1);
                        }
                        location.getWorld().getBlockAt(x, location.getBlockY(), z).setType(Material.DIAMOND_BLOCK);
    
                    }
                }
            }
       }
    Собственно вопрос в теме. Нужно опустить всю поверхность, а не одну сторону.
    [​IMG]
     
    Last edited: May 9, 2016
  2. Хостинг MineCraft
    <
  3. Dereku

    Dereku Старожил

    Trophy Points:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Так тебе нужно сделать стены или заполненный куб?
     
  4. Автор темы
    GODZAR

    GODZAR Старожил Пользователь

    Trophy Points:
    103
    Skype:
    goblin3004
    Мне нужно чтобы блоки спавнились на земле как на картинке в правой части. Получается только вот одна линия и все.
     
  5. Code

    Code Старожил Пользователь

    Trophy Points:
    123
    Имя в Minecraft:
    _Gizmo
    замени на
    Code:
    int y = location.getBlockY();
    while (location.getWorld().getBlockAt(x, y, z).getType() != Material.AIR)
    {
         y++;
    }
    location.getWorld().getBlockAt(x, y, z).setType(Material.DIAMOND_BLOCK);
    
     
  6. fall.us

    fall.us Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    fallus
    Code:
                    Location loc = player.getLocation().clone();
                 
                    for(int x = loc.getBlockX() - 10; x < loc.getBlockX() + 10; x++)
                    {
                        for(int z = loc.getBlockZ() - 10; z < loc.getBlockZ() + 10; z++)
                        {
                            int y = loc.getBlockY();
                            for(; loc.getWorld().getBlockAt(x, y, z).getType() == Material.AIR; y--)
                                ;
                         
                            loc.getWorld().getBlockAt(x, y, z).setType(Material.DIAMOND_BLOCK);
                        }
                    }
     
  7. Автор темы
    GODZAR

    GODZAR Старожил Пользователь

    Trophy Points:
    103
    Skype:
    goblin3004
    Так он заменяет первый слой
     
  8. fall.us

    fall.us Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    fallus
    А додумать чуть-чуть не можете?
    for(; loc.getWorld().getBlockAt(x, y - 1, z).getType()== Material.AIR; y--)[DOUBLEPOST=1462817350,1462816731][/DOUBLEPOST]Заодно проверяйте, выше земля или ниже. Если выше, то запускайте другой(подобный) цикл.
     
  9. Автор темы
    GODZAR

    GODZAR Старожил Пользователь

    Trophy Points:
    103
    Skype:
    goblin3004
    Code:
                        for (; loc.getWorld().getBlockAt(x, y - 1, z).getType() == Material.AIR; y--)
                            ;
                        for (; loc.getWorld().getBlockAt(x, y, z).getType() != Material.AIR; y++)
                            ;
    Так работает[DOUBLEPOST=1462817503,1462817416][/DOUBLEPOST]Еще вопрос как зарандомить спавн блоков? Чтобы не платформой появлялись.
     
  10. fall.us

    fall.us Активный участник Пользователь

    Trophy Points:
    76
    Имя в Minecraft:
    fallus
    Code:
                            // 1/10 шанса, что на заданных координатах появится алмазный блок
                            if(Math.random() <= 0.1d)
                                loc.getWorld().getBlockAt(x, y, z).setType(Material.DIAMOND_BLOCK);
    
     
    Last edited: May 9, 2016
  11. Автор темы
    GODZAR

    GODZAR Старожил Пользователь

    Trophy Points:
    103
    Skype:
    goblin3004
    Спасибо:good:
     
Thread Status:
Not open for further replies.

Share This Page