Implement custom Material enum with correct types and names

Only extract files if version mismatch or no previous version
Clean up file extraction code and place into method