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

  • Автор темы Автор темы GODZAR
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

GODZAR

Старожил
Пользователь
Баллы
103
Есть такой код - он спавнит алмазные блоки вокруг игрока:
Код:
    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);

                }
            }
        }
   }
Собственно вопрос в теме. Нужно опустить всю поверхность, а не одну сторону.
f9e4d4aa3de6.png
 
Последнее редактирование:
Так тебе нужно сделать стены или заполненный куб?
 
Мне нужно чтобы блоки спавнились на земле как на картинке в правой части. Получается только вот одна линия и все.
 
Есть такой код - он спавнит алмазные блоки вокруг игрока:
Код:
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);
замени на
Код:
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);
 
Java:
                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);
                    }
                }
 
Java:
                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);
                    }
                }
Так он заменяет первый слой
 
А додумать чуть-чуть не можете?
for(; loc.getWorld().getBlockAt(x, y - 1, z).getType()== Material.AIR; y--)
Заодно проверяйте, выше земля или ниже. Если выше, то запускайте другой(подобный) цикл.
 
Код:
                    for (; loc.getWorld().getBlockAt(x, y - 1, z).getType() == Material.AIR; y--)
                        ;
                    for (; loc.getWorld().getBlockAt(x, y, z).getType() != Material.AIR; y++)
                        ;
Так работает
Еще вопрос как зарандомить спавн блоков? Чтобы не платформой появлялись.
 
Еще вопрос как зарандомить спавн блоков? Чтобы не платформой появлялись.
Java:
                        // 1/10 шанса, что на заданных координатах появится алмазный блок
                        if(Math.random() <= 0.1d)
                            loc.getWorld().getBlockAt(x, y, z).setType(Material.DIAMOND_BLOCK);
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх