void recenterMap() { IntVector3 prevCenter = mapOffset + new IntVector3(mapCenter); IntVector3 difference = prevCenter - player.chunk; Chunk[, ,] newMap = new Chunk[mapSize, mapSize, mapSize]; for (int x = 0; x < mapSize; x++) { for (int y = 0; y < mapSize; y++) { for (int z = 0; z < mapSize; z++) { IntVector3 oldCoordinates = new IntVector3(x, y, z); IntVector3 newCoordinates = oldCoordinates + difference; if (newCoordinates >= new IntVector3(0) && newCoordinates < new IntVector3(mapSize)) { newMap.set(newCoordinates, map.get(oldCoordinates)); } else { Chunk unload = map.get(oldCoordinates); if (unload != null) { unload.Dispose(); } } } } } mapOffset -= difference; map = newMap; fillMapThreaded(); }