Wahrscheinlich benutzt er pro Chunk eine Liste, weil der größte Teil des Raums leer ist, und er dadurch Speicher spart.
Richtig, zudem ist ein Block mehr als nur Koordinaten. Der hat eine BoundingBox, über die Anklicken und Kollision gemacht wird, sowie ein Material, welches wiederum weitere Informationen über Stabilität, Kosten, Baubarkeit und andere spielrelevante Eigenschaften (z.B. ob beim Abreißen des Blocks ein collectable Item entsteht, oder nicht) hat. Die BoundingBoxen brauche ich auch nicht nur beim Klicken, sondern permanent, von daher lege ich die natürlich auch in den Speicher und erzeuge die nicht immer neu. Die Materialinformationen werden ebenfalls häufiger gebraucht, als nur bei der Interaktion durch den Spieler, z.B. wenn Projektile das Schiff beschädigen, oder für die Kollisionsabfrage beim Platzieren von Gebäuden (da wird ein Dummygebäude über die Map bewegt).
Aus dem Grund habe ich eine List<Block> (bzw. eine Ableitung davon mit ein paar Extrafunktionen) pro Chunk und die Block-Klasse enthält alles, was ich regelmäßig brauche.
Lediglich das Bauen der Vertex-/Indexlisten zum Rendern wird einmalig pro Änderung im Chunk und dann über die gesamte Blockliste (gruppiert nach Material, um den Texturparameter im Shader nicht unnötig oft neu setzen zu müssen) gemacht und nicht pro Block.