While designing I had thought of a really simplistic way of modelling a basic form of structural integrity for blocks.
Each block type would have structural strength defined by three floats:
Compression = maximum weight of the block on top of me.
Tension = maximum weight of the block suspended from me.
Shear = maximum weight of each block attached to each of the sides of me.
Upon placing a block (event triggering only, no tick based repeated processing) it would check all the blocks it is adjacent to (i.e. connected to).
It would then take its own weight and start 'distributing' it.
First, it would check the block below, subtract that block type's compression value from its own mass.
If it still has mass left, it will check the block above, and subtract that block type's tension value.
If it still has mass left, it will check the blocks adjacent, and subtract each block type's shear value.
If it still has mass left (i.e. > 0.0) then the structure fails and the newly placed block breaks and falls.
And in the case that there was a block beneath it, that block also breaks and its adjacent blocks do a recheck of the structural integrity. (Leading to a possible cascade).
Anyway, entirely off topic.