the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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}