Quote: "but they snap together "
That's not hard. When you place a block, simply lock it into an integer value. If each block is 10x10x10, then cast the location values into integers and divide them by 10, then multiply by 10, then replace the object. This will lock values like this:
int ix=x/10;//this will result in a 1
ix*=10;//this will result in a value of 10
x=ix;//now the location is locked into 10 instead of 12.5
Do this for the other 2 variables and you are "locked" into block areas. You could also do this:
int ix=(x+5)/10;//this way if it's 15.0 or greater, it will cast into 20 instead of 10....
The fastest code is the code never written.