the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 139 lines 3.7 kB view raw
1#include "stdafx.h" 2#include "File.h" 3#include "LevelData.h" 4#include "LevelSummary.h" 5#include "com.mojang.nbt.h" 6#include "DirectoryLevelStorage.h" 7#include "DirectoryLevelStorageSource.h" 8 9#include "ConsoleSaveFileIO.h" 10#include "ConsoleSaveFileOriginal.h" 11 12class LevelStorage; 13 14DirectoryLevelStorageSource::DirectoryLevelStorageSource(const File dir) : baseDir( dir ) 15{ 16 //if (!dir.exists()) dir.mkdirs(); // 4J Removed 17 //this->baseDir = dir; 18} 19 20wstring DirectoryLevelStorageSource::getName() 21{ 22 return L"Old Format"; 23} 24 25vector<LevelSummary *> *DirectoryLevelStorageSource::getLevelList() 26{ 27 // 4J Stu - We don't use directory list with the Xbox save locations 28 vector<LevelSummary *> *levels = new vector<LevelSummary *>; 29#if 0 30 for (int i = 0; i < 5; i++) 31 { 32 wstring levelId = wstring(L"World").append( _toString( (i+1) ) ); 33 34 LevelData *levelData = getDataTagFor(saveFile, levelId); 35 if (levelData != NULL) 36 { 37 levels->push_back(new LevelSummary(levelId, L"", levelData->getLastPlayed(), levelData->getSizeOnDisk(), levelData.getGameType(), false, levelData->isHardcore())); 38 } 39 } 40#endif 41 return levels; 42} 43 44void DirectoryLevelStorageSource::clearAll() 45{ 46} 47 48LevelData *DirectoryLevelStorageSource::getDataTagFor(ConsoleSaveFile *saveFile, const wstring& levelId) 49{ 50 //File dataFile(dir, L"level.dat"); 51 ConsoleSavePath dataFile = ConsoleSavePath( wstring( L"level.dat" ) ); 52 if ( saveFile->doesFileExist( dataFile ) ) 53 { 54 ConsoleSaveFileInputStream fis = ConsoleSaveFileInputStream(saveFile, dataFile); 55 CompoundTag *root = NbtIo::readCompressed(&fis); 56 CompoundTag *tag = root->getCompound(L"Data"); 57 LevelData *ret = new LevelData(tag); 58 delete root; 59 return ret; 60 } 61 62 return NULL; 63} 64 65void DirectoryLevelStorageSource::renameLevel(const wstring& levelId, const wstring& newLevelName) 66{ 67 ConsoleSaveFileOriginal tempSave(levelId); 68 69 //File dataFile = File(dir, L"level.dat"); 70 ConsoleSavePath dataFile = ConsoleSavePath( wstring( L"level.dat" ) ); 71 if ( tempSave.doesFileExist( dataFile ) ) 72 { 73 ConsoleSaveFileInputStream fis = ConsoleSaveFileInputStream(&tempSave, dataFile); 74 CompoundTag *root = NbtIo::readCompressed(&fis); 75 CompoundTag *tag = root->getCompound(L"Data"); 76 tag->putString(L"LevelName", newLevelName); 77 78 ConsoleSaveFileOutputStream fos = ConsoleSaveFileOutputStream(&tempSave, dataFile); 79 NbtIo::writeCompressed(root, &fos); 80 } 81} 82 83bool DirectoryLevelStorageSource::isNewLevelIdAcceptable(const wstring& levelId) 84{ 85 // 4J Jev, removed try/catch. 86 87 File levelFolder = File(baseDir, levelId); 88 if (levelFolder.exists()) 89 { 90 return false; 91 } 92 93 levelFolder.mkdir(); 94 95 return true; 96} 97 98void DirectoryLevelStorageSource::deleteLevel(const wstring& levelId) 99{ 100 File dir = File(baseDir, levelId); 101 if (!dir.exists()) return; 102 103 deleteRecursive(dir.listFiles()); 104 dir._delete(); 105} 106 107void DirectoryLevelStorageSource::deleteRecursive(vector<File *> *files) 108{ 109 AUTO_VAR(itEnd, files->end()); 110 for (AUTO_VAR(it, files->begin()); it != itEnd; it++) 111 { 112 File *file = *it; 113 if (file->isDirectory()) 114 { 115 deleteRecursive(file->listFiles()); 116 } 117 file->_delete(); 118 } 119} 120 121shared_ptr<LevelStorage> DirectoryLevelStorageSource::selectLevel(ConsoleSaveFile *saveFile, const wstring& levelId, bool createPlayerDir) 122{ 123 return shared_ptr<LevelStorage> (new DirectoryLevelStorage(saveFile, baseDir, levelId, createPlayerDir)); 124} 125 126bool DirectoryLevelStorageSource::isConvertible(ConsoleSaveFile *saveFile, const wstring& levelId) 127{ 128 return false; 129} 130 131bool DirectoryLevelStorageSource::requiresConversion(ConsoleSaveFile *saveFile, const wstring& levelId) 132{ 133 return false; 134} 135 136bool DirectoryLevelStorageSource::convertLevel(ConsoleSaveFile *saveFile, const wstring& levelId, ProgressListener *progress) 137{ 138 return false; 139}