1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
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();
}
}
std::shared_ptr<LevelStorage> DirectoryLevelStorageSource::selectLevel(ConsoleSaveFile *saveFile, const wstring& levelId, bool createPlayerDir)
{
return std::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;
}
|