Удаления блоков при разрушении другого

Версия Minecraft
1.7.10
Screenshot_5.pngЗдравствуйте! Помогите с решением одной проблемы. Я сделал так что когда ставишь блок у меня вверх появляется невидимые блоки, а вот не знаю как сделать что бы при разрушении нижнего или любого другого из них ломалась вся конструкция.
Код:
package sub_mod.obj_block;

import net.minecraft.block.Block;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;

public class BlockObj extends Block implements ITileEntityProvider {

    public BlockObj() {
        super(Material.circuits);
        setCreativeTab(CreativeTabs.tabBlock);
        setHardness(0.25F);
        setStepSound(soundTypeMetal);
        setBlockTextureName("iron_block");
        setBlockName(ModBlockObj.MODID + ".block_obj");

        
    }

    @Override
    public TileEntity createNewTileEntity(World world, int metadata) {
        return new TileEntityObj();
        
    }

    public int getRenderType() {
        return -1;
        
    }

    public boolean isOpaqueCube() {
        return false;
    }

    public boolean renderAsNormalBlock() {
        return false;
    }
 //СПАВН БЛОКОВ ВВЕРХ
    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack is) {
        world.setBlock(x, y + 1, z, ModBlockObj.Bar);
        world.setBlock(x, y + 2, z, ModBlockObj.Bar);
        world.setBlock(x, y + 3, z, ModBlockObj.Bar);
        world.setBlock(x, y + 4, z, ModBlockObj.Bar);
        world.setBlock(x, y + 5, z, ModBlockObj.Bar);
        world.setBlock(x, y + 6, z, ModBlockObj.Bar);
    }
    
    


    
    
    
    
    
}

Код:
package sub_mod.obj_block;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.Instance;
import cpw.mods.fml.common.SidedProxy;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;

@Mod (modid = ModBlockObj.MODID, name = ModBlockObj.MODNAME, version = ModBlockObj.VERSION)

public class ModBlockObj {

    
    public static final CreativeTabs tabMTSTrain = new CreativeTabs("tabMTSTrain") {
        public Item getTabIconItem() {
            return Item.getItemFromBlock(Blocks.stonebrick);
            
            
            
            
            
        }
        
        
    
        
    };
    
    
    
    
    
    public static final String MODID = "sub_mod_obj_block";
    public static final String MODNAME = "SM_OB";
    public static final String VERSION = "0.1a";

    @Instance(ModBlockObj.MODID) public static ModBlockObj instance;
    @SidedProxy(modId = ModBlockObj.MODID, clientSide = "sub_mod.obj_block.ProxyClient", serverSide = "sub_mod.obj_block.ProxyCommon")
    public static ProxyCommon proxy;

    public static Block block_obj;

    @Mod.EventHandler
    public void preInit(FMLPreInitializationEvent event) {

        block_obj = new BlockObj();
        GameRegistry.registerBlock(block_obj, "block_obj");

        GameRegistry.registerTileEntity(TileEntityObj.class, "TileEntityObj");

        proxy.preInit();

    }
    
    
    
    public static Block Bar;

    @Mod.EventHandler
    public void init(FMLInitializationEvent event) {
             Bar = new BlockL(Material.wood, "Fus").setCreativeTab(tabBlock);
            proxy.init();
        
    }
 
}
 
Решение
Использовать метод breakBlock в блоке (с нужными аргументами) и типа проверять какой именно блок ты ломаешь и относительно него ломаешь и другие блоки.
---
Java:
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int metadata) {
//
}

timaxa007

Модератор
5,831
409
672
Использовать метод breakBlock в блоке (с нужными аргументами) и типа проверять какой именно блок ты ломаешь и относительно него ломаешь и другие блоки.
---
Java:
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int metadata) {
//
}
 

timaxa007

Модератор
5,831
409
672
Ну к примеру я бы setBlock по другому сделал-бы:
Java:
    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack is) {
        for (int i = 1; i < 7;++i)
        world.setBlock(x, y + i, z, ModBlockObj.Bar, 1, 3);
    }
Тогда-бы в
Java:
@Override
public void breakBlock(World world, int x, int y, int z, Block block, int metadata) {
for (int i = 7; i > 0; --i) {
Block b = world.getBlock(x, y, z);
int m = world.getBlockMetadata(x, y, z);
if (b == this && m == 0) {
        for (int i = 0; i < 7;++i)
        world.setToAir(x, y + i, z);
break;
}
}
}
Ну примерно как-то так.
 
Сверху