Генерация блока до первого препятствия

Здравствуйте, я хотел бы спросить как задать условие для генерации блока до первого препятствия(блока)

Код:
        public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving entity, ItemStack is) 
        {
            for (int i = 0; i < 128; i++) 
            {
                yn = y+i;
                if(yn <= 128)
                {
                if(i == 0)
                
                    n = 1;
                else 
                    n = 0;
                if(n == 0)
                    world.setBlock(x, y+i+1, z, Block.blockantipole.blockID, 0, 3);
                else 
                    world.setBlock(x, y+i+1, z, Block.blockantipolen.blockID, 0, 3);
            }
            }
        }

image.png

1)Код генерации блоков без условия
2)Как должно быть
P.S. Генерация блоков происходит после установки "главного блока"
Еще если не трудно, подскажите как после разрушения "главного блока" блоки, которые были сгенерированы, удалить?
Заранее благодарен за оказанную помощь!
 
Код:
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving entity, ItemStack is) 
{
    for(int i = 0;i < 256; i++)
    {
        if(y+i < 256 && y+i == Block.air)
        {
            world.setBlock(x, y+i, z, Block.blockantipole.blockID, 0, 3);
        }
        else {break;}
    }
}
[merge_posts_bbcode]Добавлено: 24.01.2015 01:29:28[/merge_posts_bbcode]

Для того что-бы убирались, сделай в методе убирания блока из мира, проверку на верхний блок - если это нужный тебе блок - убирай. (И так будет по цепочке)
Или, если это не сработает, проверку циклом, на все блоки сверху.
 
svk написал(а):
Код:
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLiving entity, ItemStack is) 
{
    for(int i = 0;i < 256; i++)
    {
        if(y+i < 256 && y+i == Block.air)
        {
            world.setBlock(x, y+i, z, Block.blockantipole.blockID, 0, 3);
        }
    }
}
[merge_posts_bbcode]Добавлено: 24.01.2015 01:29:28[/merge_posts_bbcode]

Для того что-бы убирались, сделай в методе убирания блока из мира, проверку на верхний блок - если это нужный тебе блок - убирай. (И так будет по цепочке)
Или, если это не сработает, проверку циклом, на все блоки сверху.
Спасибо, но код не работает:) выдает ошибку в Block.air
(пробовал заменить "air" на "grass", все равно выдает ошибку)
Тема до сих пор актуальна!
 
Может быть:
Код:
if(y+i < 256 && world.isAirBlock(x, y+i, z))

А ошибка там потому-что ты сравниваешь тип данных int и тип данных Block.
 
LeonidM/Dasperal написал(а):
Может быть:
Код:
if(y+i < 256 && world.isAirBlock(x, y+i, z))

А ошибка там потому-что ты сравниваешь тип данных int и тип данных Block.
Извиняюсь, я на 1.7.10 пишу ^_^
 
Тогда почему у тебя в первом посте присутствует:
?
[merge_posts_bbcode]Добавлено: 24.01.2015 15:03:14[/merge_posts_bbcode]

Ну как-то так, я точно не знаю как будет лучше тебе:
Код:
public void onBlockAdded(World world, int x, int y, int z) {
    for (int i = y; i < world.provider.getHeight(); i++) {
        if (i == y)
            world.setBlock(x, i, z, Block.blockantipole, 0, 3);
        else if (world.isAirBlock(x, i, z))
            world.setBlock(x, i, z, Block.blockantipolen, 0, 3);
        else break;
    }
}

public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
    super.breakBlock(world, x, y, z, block, meta);
    for (int i = y; i < world.provider.getHeight(); i++) {
        if (i == y)
            world.setBlockToAir(x, i, z);
        else if (world.getBlock(x, i, z) == Block.blockantipolen)
            world.setBlockToAir(x, i, z);
        else break;
    }
}

[merge_posts_bbcode]Добавлено: 24.01.2015 15:10:15[/merge_posts_bbcode]

В случаи этот блок был удалён криво или типа того, то те блоки "Block.blockantipolen", в ихней апдейт нужно сделать проверку "есть-ли под ним нужный блок" - "if (world.getBlock(x, y - 1, z) != Block.blockantipolen || world.getBlock(x, y - 1, z) != Block.blockantipole) world.setBlockToAir(x, y, z);". Ну как-то так.
 
timaxa007 написал(а):
Тогда почему у тебя в первом посте присутствует:
?
[merge_posts_bbcode]Добавлено: 24.01.2015 15:03:14[/merge_posts_bbcode]

Ну как-то так, я точно не знаю как будет лучше тебе:
Код:
public void onBlockAdded(World world, int x, int y, int z) {
    for (int i = y; i < world.provider.getHeight(); i++) {
        if (i == y)
            world.setBlock(x, i, z, Block.blockantipole, 0, 3);
        else if (world.isAirBlock(x, i, z))
            world.setBlock(x, i, z, Block.blockantipolen, 0, 3);
        else break;
    }
}

public void breakBlock(World world, int x, int y, int z, Block block, int meta) {
    super.breakBlock(world, x, y, z, block, meta);
    for (int i = y; i < world.provider.getHeight(); i++) {
        if (i == y)
            world.setBlockToAir(x, i, z);
        else if (world.getBlock(x, i, z) == Block.blockantipolen)
            world.setBlockToAir(x, i, z);
        else break;
    }
}

[merge_posts_bbcode]Добавлено: 24.01.2015 15:10:15[/merge_posts_bbcode]

В случаи этот блок был удалён криво или типа того, то те блоки "Block.blockantipolen", в ихней апдейт нужно сделать проверку "есть-ли под ним нужный блок" - "if (world.getBlock(x, y - 1, z) != Block.blockantipolen || world.getBlock(x, y - 1, z) != Block.blockantipole) world.setBlockToAir(x, y, z);". Ну как-то так.
Потому-что я знал что писать нужно под 1.6.4, и использовал его кусочек кода.
[merge_posts_bbcode]Добавлено: 24.01.2015 14:53:30[/merge_posts_bbcode]

А как i может быть не равен y, если мы указываем в цикле, что i = y?

[merge_posts_bbcode]Добавлено: 24.01.2015 14:55:03[/merge_posts_bbcode]

Ещё я забыл сделать прекращение цикла, если блок не равен воздуху, а вот у timaxa007 всё норм.
 
Когда цикл начинается, то первый цикл "i = y", последующие циклы прибавленные значения i, которые мы прописываем в условия цикла "i++".
 
timaxa007 написал(а):
Когда цикл начинается, то первый цикл "i = y", последующие циклы прибавленные значения i, которые мы прописываем в условия цикла "i++".
Можно было сразу сделать i = y+1 : )
Или при использовании этого цикла отменяется сама установка блока? :\
 
svk, вроде нет, не отменяется.
 
Назад
Сверху