First we need a class that represents the block
public class CustomBlock extends Block {
public CustomBlock () {
super(Material.ROCK);
setHardness(1.0f);
setHarvestLevel("pickaxe", 0);
setResistance(1.0f);
setCreativeTab(CreativeTabs.DECORATIONS);
this.setSoundType(SoundType.STONE);
}
}
Even here there are several modifications available: material (which governs some properties such as being able to be pushed by pistons and whether it can be broken by hand), hardness (how long it takes to break), harvest level (appropriate tool and tool material: in this case wooden pickaxe), resistance (vs. explosions), the tab it shows up in the creative menu, and what step sound it has.
This is where any fancy functionality blocks will have will need to go, but for now we're making a block that just looks nice, so we're done.