Something went wrong. Try again.
the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
Something went wrong. Try again.
3.1 kB · 128 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129#include "stdafx.h"#include "File.h"#include "RegionFileCache.h"#include "ConsoleSaveFileIO.h"
RegionFileCache RegionFileCache::s_defaultCache;
bool RegionFileCache::useSplitSaves(ESavePlatform platform){ switch(platform) { case SAVE_FILE_PLATFORM_XBONE: case SAVE_FILE_PLATFORM_PS4: return true; default: return false; };}
RegionFile *RegionFileCache::_getRegionFile(ConsoleSaveFile *saveFile, const wstring &prefix, int chunkX, int chunkZ) // 4J - TODO was synchronized{ // 4J Jev - changed back to use of the File class. //char file[MAX_PATH_SIZE]; //sprintf(file,"%s\\region\\r.%d.%d.mcr",basePath,chunkX >> 5,chunkZ >> 5);
//File regionDir(basePath, L"region");
//File file(regionDir, wstring(L"r.") + _toString(chunkX>>5) + L"." + _toString(chunkZ>>5) + L".mcr" ); MemSect(31); File file; if(useSplitSaves(saveFile->getSavePlatform())) { file = File( prefix + wstring(L"r.") + _toString(chunkX>>4) + L"." + _toString(chunkZ>>4) + L".mcr" ); } else { file = File( prefix + wstring(L"r.") + _toString(chunkX>>5) + L"." + _toString(chunkZ>>5) + L".mcr" ); } MemSect(0);
RegionFile *ref = NULL; AUTO_VAR(it, cache.find(file)); if( it != cache.end() ) ref = it->second;
// 4J Jev, put back in. if (ref != NULL) { return ref; }
// 4J Stu - Remove for new save files /* if (!regionDir.exists()) { regionDir.mkdirs(); } */ if (cache.size() >= MAX_CACHE_SIZE) { _clear(); }
RegionFile *reg = new RegionFile(saveFile, &file); cache[file] = reg; // 4J - this was originally a softReferenc return reg;
}
void RegionFileCache::_clear() // 4J - TODO was synchronized{ AUTO_VAR(itEnd, cache.end()); for( AUTO_VAR(it, cache.begin()); it != itEnd; it++ ) { // 4J - removed try/catch// try { RegionFile *regionFile = it->second; if (regionFile != NULL) { regionFile->close(); } delete regionFile;// } catch (IOException e) {// e.printStackTrace();// } } cache.clear();}
int RegionFileCache::_getSizeDelta(ConsoleSaveFile *saveFile, const wstring &prefix, int chunkX, int chunkZ){ RegionFile *r = _getRegionFile(saveFile, prefix, chunkX, chunkZ); return r->getSizeDelta();}
DataInputStream *RegionFileCache::_getChunkDataInputStream(ConsoleSaveFile *saveFile, const wstring &prefix, int chunkX, int chunkZ){ RegionFile* r = _getRegionFile(saveFile, prefix, chunkX, chunkZ); if(useSplitSaves(saveFile->getSavePlatform())) { return r->getChunkDataInputStream(chunkX & 15, chunkZ & 15); } else {
return r->getChunkDataInputStream(chunkX & 31, chunkZ & 31); }}
DataOutputStream *RegionFileCache::_getChunkDataOutputStream(ConsoleSaveFile *saveFile, const wstring &prefix, int chunkX, int chunkZ){ RegionFile* r = _getRegionFile(saveFile, prefix, chunkX, chunkZ); if(useSplitSaves(saveFile->getSavePlatform())) { return r->getChunkDataOutputStream(chunkX & 15, chunkZ & 15); } else {
return r->getChunkDataOutputStream(chunkX & 31, chunkZ & 31); }}
RegionFileCache::~RegionFileCache(){ _clear();}