Your approach is very interesting, I had started something like this some time ago as well, but with some differences:
- when blocks changed they were checked against their surrounding and faces/vertices were generated or removed on the fly, so that only the "shell" of the terrain is in the objects. The chunks were similar to yours, i guess
- collision checks were done by checking the player position against the existing blocks at that position, using some trigonometry, but independent from rendering/vertices etc.
- i already had a basic lighting engine which would use lightsources to update the UV colors of the faces, but it was very slow & buggy
- it parsed the original block-texture-image from minecraft, and all blocks could be used (even transparent ones would work, without being able to "look through" the terrain)
- I added some basic diamond square generator thingy looking similar to yours (haven't really looked at all of your code yet)
- I had ported it to OpenGL and a basic version on the PSP
- oh and it was using arrays & linear search, looking back that is quite horrible
- another thing I just remembered is that the actual gameplay and the "vertex updating" were seperate, so you could start playing immediatly, but the blocks were still being generated around you...
So yeah, sorry for hijacking your thread, just wanted to share some info about how things could be achieved differently...
Unfortunately my code is VERY chaotic and weird, so I don't think it'd be of any use in it's current state... Maybe I'll find some time to pick it up again in the future, it was really interesting to mess with the vertices and rendering on this basic level.