aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/DirectoryLevelStorageSource.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/DirectoryLevelStorageSource.cpp')
-rw-r--r--Minecraft.World/DirectoryLevelStorageSource.cpp139
1 files changed, 139 insertions, 0 deletions
diff --git a/Minecraft.World/DirectoryLevelStorageSource.cpp b/Minecraft.World/DirectoryLevelStorageSource.cpp
new file mode 100644
index 00000000..b4beb8b5
--- /dev/null
+++ b/Minecraft.World/DirectoryLevelStorageSource.cpp
@@ -0,0 +1,139 @@
+#include "stdafx.h"
+#include "File.h"
+#include "LevelData.h"
+#include "LevelSummary.h"
+#include "com.mojang.nbt.h"
+#include "DirectoryLevelStorage.h"
+#include "DirectoryLevelStorageSource.h"
+
+#include "ConsoleSaveFileIO.h"
+#include "ConsoleSaveFileOriginal.h"
+
+class LevelStorage;
+
+DirectoryLevelStorageSource::DirectoryLevelStorageSource(const File dir) : baseDir( dir )
+{
+ //if (!dir.exists()) dir.mkdirs(); // 4J Removed
+ //this->baseDir = dir;
+}
+
+wstring DirectoryLevelStorageSource::getName()
+{
+ return L"Old Format";
+}
+
+vector<LevelSummary *> *DirectoryLevelStorageSource::getLevelList()
+{
+ // 4J Stu - We don't use directory list with the Xbox save locations
+ vector<LevelSummary *> *levels = new vector<LevelSummary *>;
+#if 0
+ for (int i = 0; i < 5; i++)
+ {
+ wstring levelId = wstring(L"World").append( _toString( (i+1) ) );
+
+ LevelData *levelData = getDataTagFor(saveFile, levelId);
+ if (levelData != NULL)
+ {
+ levels->push_back(new LevelSummary(levelId, L"", levelData->getLastPlayed(), levelData->getSizeOnDisk(), levelData.getGameType(), false, levelData->isHardcore()));
+ }
+ }
+#endif
+ return levels;
+}
+
+void DirectoryLevelStorageSource::clearAll()
+{
+}
+
+LevelData *DirectoryLevelStorageSource::getDataTagFor(ConsoleSaveFile *saveFile, const wstring& levelId)
+{
+ //File dataFile(dir, L"level.dat");
+ ConsoleSavePath dataFile = ConsoleSavePath( wstring( L"level.dat" ) );
+ if ( saveFile->doesFileExist( dataFile ) )
+ {
+ ConsoleSaveFileInputStream fis = ConsoleSaveFileInputStream(saveFile, dataFile);
+ CompoundTag *root = NbtIo::readCompressed(&fis);
+ CompoundTag *tag = root->getCompound(L"Data");
+ LevelData *ret = new LevelData(tag);
+ delete root;
+ return ret;
+ }
+
+ return NULL;
+}
+
+void DirectoryLevelStorageSource::renameLevel(const wstring& levelId, const wstring& newLevelName)
+{
+ ConsoleSaveFileOriginal tempSave(levelId);
+
+ //File dataFile = File(dir, L"level.dat");
+ ConsoleSavePath dataFile = ConsoleSavePath( wstring( L"level.dat" ) );
+ if ( tempSave.doesFileExist( dataFile ) )
+ {
+ ConsoleSaveFileInputStream fis = ConsoleSaveFileInputStream(&tempSave, dataFile);
+ CompoundTag *root = NbtIo::readCompressed(&fis);
+ CompoundTag *tag = root->getCompound(L"Data");
+ tag->putString(L"LevelName", newLevelName);
+
+ ConsoleSaveFileOutputStream fos = ConsoleSaveFileOutputStream(&tempSave, dataFile);
+ NbtIo::writeCompressed(root, &fos);
+ }
+}
+
+bool DirectoryLevelStorageSource::isNewLevelIdAcceptable(const wstring& levelId)
+{
+ // 4J Jev, removed try/catch.
+
+ File levelFolder = File(baseDir, levelId);
+ if (levelFolder.exists())
+ {
+ return false;
+ }
+
+ levelFolder.mkdir();
+
+ return true;
+}
+
+void DirectoryLevelStorageSource::deleteLevel(const wstring& levelId)
+{
+ File dir = File(baseDir, levelId);
+ if (!dir.exists()) return;
+
+ deleteRecursive(dir.listFiles());
+ dir._delete();
+}
+
+void DirectoryLevelStorageSource::deleteRecursive(vector<File *> *files)
+{
+ AUTO_VAR(itEnd, files->end());
+ for (AUTO_VAR(it, files->begin()); it != itEnd; it++)
+ {
+ File *file = *it;
+ if (file->isDirectory())
+ {
+ deleteRecursive(file->listFiles());
+ }
+ file->_delete();
+ }
+}
+
+shared_ptr<LevelStorage> DirectoryLevelStorageSource::selectLevel(ConsoleSaveFile *saveFile, const wstring& levelId, bool createPlayerDir)
+{
+ return shared_ptr<LevelStorage> (new DirectoryLevelStorage(saveFile, baseDir, levelId, createPlayerDir));
+}
+
+bool DirectoryLevelStorageSource::isConvertible(ConsoleSaveFile *saveFile, const wstring& levelId)
+{
+ return false;
+}
+
+bool DirectoryLevelStorageSource::requiresConversion(ConsoleSaveFile *saveFile, const wstring& levelId)
+{
+ return false;
+}
+
+bool DirectoryLevelStorageSource::convertLevel(ConsoleSaveFile *saveFile, const wstring& levelId, ProgressListener *progress)
+{
+ return false;
+}