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.
25 kB · 799 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799#include "stdafx.h"#include "..\Common\Consoles_App.h"#include "..\User.h"#include "..\..\Minecraft.Client\Minecraft.h"#include "..\..\Minecraft.Client\MinecraftServer.h"#include "..\..\Minecraft.Client\PlayerList.h"#include "..\..\Minecraft.Client\ServerPlayer.h"#include "..\..\Minecraft.World\Level.h"#include "..\..\Minecraft.World\LevelSettings.h"#include "..\..\Minecraft.World\BiomeSource.h"#include "..\..\Minecraft.World\LevelType.h"#include "ServiceConfig\Events-XBLA.8-149E11AEEvents.h"#include "..\..\Minecraft.World\DurangoStats.h"#include "..\..\Minecraft.Client\Durango\XML\xmlFilesCallback.h"
CConsoleMinecraftApp app;
CConsoleMinecraftApp::CConsoleMinecraftApp() : CMinecraftApp(){ memset(&m_ThumbnailBuffer,0,sizeof(ImageFileBuffer)); m_bShutdown=false;
m_bRead_TMS_DLCINFO_XML=false; m_bTMSPP_GlobalFileListRead=false; m_bTMSPP_UserFileListRead=false;
for (int i=0; i<MAX_LOCAL_PLAYERS; i++) { m_iLastPresenceContext[i] = -1; m_xuidLastPresencePlayer[i] = INVALID_XUID; }}
void CConsoleMinecraftApp::HandleDLCLicenseChange(){ // run through the DLC packs and update if required int iOfferC=app.GetDLCOffersCount(); for(int i = 0; i < iOfferC; i++) { MARKETPLACE_CONTENTOFFER_INFO xOffer = StorageManager.GetOffer(i);
XCONTENT_DATA *pContentData=StorageManager.GetInstalledDLC(xOffer.wszProductID);
if((pContentData!=NULL) &&(pContentData->bTrialLicense==false)) { DLCPack *pack = app.m_dlcManager.getPackFromProductID(xOffer.wszProductID); if(pack) { // Clear the DLC installed flag so the scenes will pick up the new dlc (could be a full pack install) app.ClearDLCInstalled(); app.DebugPrintf(">>> HandleDLCLicenseChange - Updating license for DLC [%ls]\n",xOffer.wszOfferName); pack->updateLicenseMask(1); } else { app.DebugPrintf(">>> HandleDLCLicenseChange - Couldn't find licensed DLC [%ls] in app.m_dlcManager\n",xOffer.wszOfferName); } } }
ui.HandleDLCLicenseChange();}
void CConsoleMinecraftApp::SetRichPresenceContext(int iPad, int contextId){ if(iPad < XUSER_MAX_COUNT && Minecraft::GetInstance()->localplayers[iPad]) { PlayerUID uid; ProfileManager.GetXUID(iPad, &uid, true);
if (uid != INVALID_XUID) { // 4J-JEV: Player has changed, update cached player and ensure this next presence is sent. if (uid != m_xuidLastPresencePlayer[iPad]) { m_xuidLastPresencePlayer[iPad] = uid; m_iLastPresenceContext[iPad] = -1; }
if (m_iLastPresenceContext[iPad] != contextId) { app.DebugPrintf(">>> EventWriteRichPresenceState(%ls,_,%d)\n", uid.toString().c_str(), contextId); EventWriteRichPresenceState(uid.toString().c_str(), DurangoStats::getPlayerSession(), contextId);
m_iLastPresenceContext[iPad] = contextId; } } }}
void CConsoleMinecraftApp::StoreLaunchData(){}void CConsoleMinecraftApp::ExitGame(){ //Windows::ApplicationModel::Core::CoreApplication::Exit(); m_bShutdown=true;}void CConsoleMinecraftApp::FatalLoadError(){ // 4J-PB - //for(int i=0;i<10;i++) {#ifndef _CONTENT_PACKAGE OutputDebugStringA("FatalLoadError\n");#endif //Sleep(5000); }}
void CConsoleMinecraftApp::CaptureSaveThumbnail(){ RenderManager.CaptureThumbnail(&m_ThumbnailBuffer);}void CConsoleMinecraftApp::GetSaveThumbnail(PBYTE *pbData,DWORD *pdwSize){ // on a save caused by a create world, the thumbnail capture won't have happened if(m_ThumbnailBuffer.Allocated()) { if( pbData ) { *pbData= new BYTE [m_ThumbnailBuffer.GetBufferSize()]; *pdwSize=m_ThumbnailBuffer.GetBufferSize(); memcpy(*pbData,m_ThumbnailBuffer.GetBufferPointer(),*pdwSize); } m_ThumbnailBuffer.Release(); } else { if( pbData ) { // use the default image StorageManager.GetDefaultSaveThumbnail(pbData,pdwSize); } }}void CConsoleMinecraftApp::ReleaseSaveThumbnail(){
}
void CConsoleMinecraftApp::GetScreenshot(int iPad,PBYTE *pbData,DWORD *pdwSize){
}
int CConsoleMinecraftApp::GetLocalTMSFileIndex(WCHAR *wchTMSFile,bool bFilenameIncludesExtension,eFileExtensionType eEXT){ return -1;}
int CConsoleMinecraftApp::LoadLocalTMSFile(WCHAR *wchTMSFile){ return -1;}
int CConsoleMinecraftApp::LoadLocalTMSFile(WCHAR *wchTMSFile, eFileExtensionType eExt){ return -1;}
void CConsoleMinecraftApp::FreeLocalTMSFiles(eTMSFileType eType){
}
int CConsoleMinecraftApp::LoadLocalDLCImages(){ unordered_map<wstring,DLC_INFO * > *pDLCInfoA=app.GetDLCInfo(); // 4J-PB - Any local graphic files for the Minecraft Store? for( AUTO_VAR(it, pDLCInfoA->begin()); it != pDLCInfoA->end(); it++ ) { DLC_INFO * pDLCInfo=(*it).second;
LoadLocalDLCImage(pDLCInfo->wchBanner,&pDLCInfo->pbImageData,&pDLCInfo->dwImageBytes); } return 0;}
void CConsoleMinecraftApp::FreeLocalDLCImages(){ // 4J-PB - Any local graphic files for the Minecraft Store? unordered_map<wstring,DLC_INFO * > *pDLCInfoA=app.GetDLCInfo();
for( AUTO_VAR(it, pDLCInfoA->begin()); it != pDLCInfoA->end(); it++ ) { DLC_INFO * pDLCInfo=(*it).second;
if(pDLCInfo->dwImageBytes!=0) { free(pDLCInfo->pbImageData); pDLCInfo->dwImageBytes=0; pDLCInfo->pbImageData=NULL; } }}
int CConsoleMinecraftApp::LoadLocalDLCImage(WCHAR *wchName,PBYTE *ppbImageData,DWORD *pdwBytes){ // load the local file WCHAR wchFilename[64];
// 4J-PB - Read the file containing the product codes. This will be different for the SCEE/SCEA/SCEJ builds swprintf(wchFilename,L"DLCImages/%s",wchName); HANDLE hFile = CreateFile(wchFilename, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if( hFile == INVALID_HANDLE_VALUE ) { app.DebugPrintf("Failed to open %ls\n", wchFilename); return FALSE; }
DWORD dwHigh=0; *pdwBytes = GetFileSize(hFile,&dwHigh);
if(*pdwBytes!=0) { DWORD dwBytesRead; PBYTE pbImageData=(PBYTE)malloc(*pdwBytes);
if(ReadFile(hFile,pbImageData,*pdwBytes,&dwBytesRead,NULL)==FALSE) { // failed free(pbImageData); *pdwBytes=0; } else { *ppbImageData=pbImageData; } }
CloseHandle(hFile);
return 0;}
void CConsoleMinecraftApp::TemporaryCreateGameStart(){ ////////////////////////////////////////////////////////////////////////////////////////////// From CScene_Main::OnInit
app.setLevelGenerationOptions(NULL);
// From CScene_Main::RunPlayGame Minecraft *pMinecraft=Minecraft::GetInstance(); app.ReleaseSaveThumbnail(); ProfileManager.SetLockedProfile(0); pMinecraft->user->name = L"Durango"; app.ApplyGameSettingsChanged(0);
////////////////////////////////////////////////////////////////////////////////////////////// From CScene_MultiGameJoinLoad::OnInit MinecraftServer::resetFlags();
// From CScene_MultiGameJoinLoad::OnNotifyPressEx app.SetTutorialMode( false ); app.SetCorruptSaveDeleted(false);
////////////////////////////////////////////////////////////////////////////////////////////// From CScene_MultiGameCreate::CreateGame
app.ClearTerrainFeaturePosition(); wstring wWorldName = L"TestWorld";
StorageManager.ResetSaveData(); StorageManager.SetSaveTitle(wWorldName.c_str());
bool isFlat = false; __int64 seedValue = BiomeSource::findSeed(isFlat?LevelType::lvl_flat:LevelType::lvl_normal); // 4J - was (new Random())->nextLong() - now trying to actually find a seed to suit our requirements
NetworkGameInitData *param = new NetworkGameInitData(); param->seed = seedValue; param->saveData = NULL;
app.SetGameHostOption(eGameHostOption_Difficulty,0); app.SetGameHostOption(eGameHostOption_FriendsOfFriends,0); app.SetGameHostOption(eGameHostOption_Gamertags,1); app.SetGameHostOption(eGameHostOption_BedrockFog,1);
app.SetGameHostOption(eGameHostOption_GameType,GameType::SURVIVAL->getId() ); app.SetGameHostOption(eGameHostOption_LevelType, 0 ); app.SetGameHostOption(eGameHostOption_Structures, 1 ); app.SetGameHostOption(eGameHostOption_BonusChest, 0 );
app.SetGameHostOption(eGameHostOption_PvP, 1); app.SetGameHostOption(eGameHostOption_TrustPlayers, 1 ); app.SetGameHostOption(eGameHostOption_FireSpreads, 1 ); app.SetGameHostOption(eGameHostOption_TNT, 1 ); app.SetGameHostOption(eGameHostOption_HostCanFly, 1); app.SetGameHostOption(eGameHostOption_HostCanChangeHunger, 1); app.SetGameHostOption(eGameHostOption_HostCanBeInvisible, 1 );
param->settings = app.GetGameHostOption( eGameHostOption_All );
g_NetworkManager.FakeLocalPlayerJoined();
LoadingInputParams *loadingParams = new LoadingInputParams(); loadingParams->func = &CGameNetworkManager::RunNetworkGameThreadProc; loadingParams->lpParam = (LPVOID)param;
// Reset the autosave time app.SetAutosaveTimerTime();
C4JThread* thread = new C4JThread(loadingParams->func, loadingParams->lpParam, "RunNetworkGame"); thread->Run();}
typedef struct { eDLCContentType e_DLC_Type; //WCHAR *wchDisplayName; WCHAR *wchProductId; WCHAR *wchBannerName; WCHAR *wchFirstSkin; int iConfig; unsigned int uiSortIndex;}DLC_DETAILS;
#define MAX_DLC_DETAILS 18/*DLC_DETAILS DLCDetailsA[MAX_DLC_DETAILS] ={ // skin packs
// Skin Pack Festive { e_DLC_SkinPack,L"Festive Skin Pack",L"6dffc4d6-a2d2-4c8c-9284-c607f77e431a",L"SPF.png",L"dlcskin00000600.png",0,1}, // Skin Pack 1 { e_DLC_SkinPack,L"Skin Pack 1",L"8ecf0f25-a119-4987-a32b-ee0a5925ad8d",L"SP1.png",L"dlcskin00000000.png",0,2}, // Skin Pack 2 { e_DLC_SkinPack,L"Skin Pack 2",L"cc59b688-7cfb-4fa0-a76e-84aa55b92cae",L"SP2.png",L"dlcskin00000900.png",0,3}, // Skin Pack 6 //{ e_DLC_SkinPack,L"0037a29f-876e-4709-8bb8-a388738e6f51","SP6.png","dlcskin00000900.png",0,3}, // Skin Pack Battle And Beasts { e_DLC_SkinPack,L"Battle And Beasts",L"eeeb6489-02a3-4c6e-a8c9-2ace2aa1094d",L"SPC.png",L"dlcskin00000800.png",0,4}, // Skin Pack Battle And Beasts 2 { e_DLC_SkinPack,L"Battle And Beasts 2",L"b858200a-59a8-4e1f-a049-f3e73db2d786",L"SPZ.png",L"dlcskin00001000.png",0,5}, // Skin Pack Marvel Avengers { e_DLC_SkinPack,L"Marvel Avengers",L"d59757dd-7757-4c5e-8499-dbe4743baa10",L"SPM.png",L"dlcskin00001700.png",0,6}, // Skin Pack Marvel Spider-Man { e_DLC_SkinPack,L"Marvel Spider-Man",L"cdca1bff-13d1-435a-8aee-e7a35002473f",L"SPI.png",L"dlcskin00001800.png",0,7}, // Skin Pack Birthday 1 { e_DLC_SkinPack,L"Birthday Skin Pack",L"951e8062-3d4e-470c-8177-5eca91bc08b3",L"SPB.png",L"dlcskin00000700.png",0,8}, // Skin Pack Birthday 2 { e_DLC_SkinPack,L"2nd Birthday Skin Pack",L"c7157788-468d-4ca8-9ecf-5d77a09850fc",L"SPB2.png",L"dlcskin00002200.png",0,9},
// Texture Packs
// Plastic Texture Pack { e_DLC_TexturePacks,L"Plastic Texture Pack",L"52ecdcf1-d362-47a1-973b-1eeca0db0ea8",L"TP01.png",L"",2049,1}, // Natural Texture Pack { e_DLC_TexturePacks,L"Natural Texture Pack",L"1c56db0c-ff49-4bb1-b372-2122b0e813c1",L"TP02.png",L"",2053,2}, // Halloween Texture Pack { e_DLC_TexturePacks,L"Halloween Texture Pack",L"8cb331d1-8fa1-4367-a41a-d4830a80ce67",L"TP03.png",L"",2052,3}, // Fantasy Texture Pack { e_DLC_TexturePacks,L"Fantasy Texture Pack",L"375a1df4-5550-415b-b278-20f65b31a7a3",L"TP04.png",L"",2051,4}, // City Texture Pack { e_DLC_TexturePacks,L"City Texture Pack",L"ea5c7b40-e04d-4469-9382-8806467ca2c4",L"TP05.png",L"",2054,5}, // Candy Texture Pack { e_DLC_TexturePacks,L"Candy Texture Pack",L"94c75e45-0757-4886-916c-ab026ae27ca9",L"TP06.png",L"",2050,6}, // Comic Texture Pack //{ e_DLC_TexturePacks,L"Comic Texture Pack",L"3e14cf0f-26eb-40df-897d-7af905456e58",L"TP07.png",L"",2055,7},
// Mash-up Packs
// Mass Effect { e_DLC_MashupPacks,L"Mass Effect",L"ead4f3bb-b388-42da-8fa9-f1f91570b5c7",L"MPMA.png",L"dlcskin00001100.png",1024,1}, // Skyrim { e_DLC_MashupPacks,L"Skyrim",L"81cc4261-7b63-4e48-af1c-60b9ae099644",L"MPSR.png",L"dlcskin00001400.png",1025,2}, // Halo { e_DLC_MashupPacks,L"Halo",L"1e06dafc-ea27-475e-945c-fcee0c455f87",L"MPHA.png",L"dlcskin00001600.png",1026,3},};*/
void CConsoleMinecraftApp::InitialiseDLCDetails(){ for(int i=0;i<18;i++) { //RegisterDLCData(DLCDetailsA[i].e_DLC_Type, DLCDetailsA[i].wchBannerName, DLCDetailsA[i].wchDisplayName, DLCDetailsA[i].wchProductId, DLCDetailsA[i].wchFirstSkin, DLCDetailsA[i].iConfig, DLCDetailsA[i].uiSortIndex); }}
bool CConsoleMinecraftApp::UpdateProductId(XCONTENT_DATA &Data){ // Do we have a product id for this? DLC_INFO *pDLCInfo=app.GetDLCInfoForProductName(Data.wszDisplayName);
if(pDLCInfo!=NULL) { app.DebugPrintf("Updating product id for %ls\n",Data.wszDisplayName); swprintf_s(Data.wszProductID, 64,L"%ls",pDLCInfo->wsProductId.c_str()); return true; } else { app.DebugPrintf("Couldn't find %ls\n",Data.wszDisplayName); }
return false; }
void CConsoleMinecraftApp::Shutdown(){ m_bShutdown=true;}
bool CConsoleMinecraftApp::getShutdownFlag(){ return m_bShutdown;}
// TMSbool CConsoleMinecraftApp::TMSPP_ReadBannedList(int iPad,eTMSAction NextAction){ app.DebugPrintf("CConsoleMinecraftApp::TMSPP_ReadBannedList\n"); eTitleStorageState eResult; bool bSendBanFileRetrievedMsg=false;
if(GetBanListRead(iPad)==false) { // Attempt to read the ban list // do we have one in our user filelist? //if(StorageManager.TMSPP_InFileList(C4JStorage::eGlobalStorage_TitleUser,iPad,L"BannedList")) { SetBanListRead(iPad,true); ClearBanList(iPad);
eResult=StorageManager.TMSPP_ReadFile(iPad,C4JStorage::eGlobalStorage_TitleUser,C4JStorage::TMS_FILETYPE_BINARY,L"BannedList",&CConsoleMinecraftApp::Callback_TMSPPReadBannedList,this,NextAction); if(eResult!=eTitleStorage_pending) { // something went wrong app.SetTMSAction(iPad,(eTMSAction)NextAction); bSendBanFileRetrievedMsg=true; } } } else { bSendBanFileRetrievedMsg=true; }
if(bSendBanFileRetrievedMsg) { ui.HandleTMSBanFileRetrieved(iPad); }
app.SetTMSAction(iPad,(eTMSAction)NextAction);
return true;}
int CConsoleMinecraftApp::Callback_TMSPPReadBannedList(void *pParam,int iPad, int iUserData, LPVOID lpvData,WCHAR *wchFilename){ app.DebugPrintf("CConsoleMinecraftApp::Callback_TMSPPReadBannedList\n"); C4JStorage::PTMSPP_FILEDATA pFileData=(C4JStorage::PTMSPP_FILEDATA)lpvData; CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam;
if(pFileData) { // put the entries into the vector int iEntries=pFileData->dwSize/sizeof(BANNEDLISTDATA); PBANNEDLISTDATA pData=(PBANNEDLISTDATA)pFileData->pbData;
for(int i=0;i<iEntries;i++) { pClass->AddLevelToBannedLevelList(iPad,&pData[i], false); } // mark the level as not checked against banned levels - it'll be checked once the level starts app.SetBanListCheck(iPad,false);
// Xbox One will clear things within the DownloadBlob #ifndef _XBOX_ONE delete [] pFileData->pbData; delete [] pFileData;#endif
ui.HandleTMSBanFileRetrieved(iPad); } else { // read problem - set state to idel again StorageManager.TMSPP_ClearTitleStorageState(iPad); }
// change the state to the next action pClass->SetTMSAction(iPad,(eTMSAction)iUserData);
return 0;}
void CConsoleMinecraftApp::TMSPP_ReadDLCFile(int iPad,eTMSAction NextAction){ app.DebugPrintf("CConsoleMinecraftApp::TMSPP_ReadDLCFile\n"); bool bRetrievedDLCFile=false; // try reading the DLC.xml file (from TMS global) - only allowed to do this once an hour at the most, but we'll just read once each time the game launches eTitleStorageState eResult; if(m_bRead_TMS_DLCINFO_XML==false) {// 4J-PB - we're reading this info from a local file now
eResult=StorageManager.TMSPP_ReadFile(iPad,C4JStorage::eGlobalStorage_Title,C4JStorage::TMS_FILETYPE_BINARY,L"DLCXbox1.cmp",&CConsoleMinecraftApp::Callback_TMSPPReadDLCFile,this,NextAction); if(eResult!=eTitleStorage_pending) { // something went wrong app.SetTMSAction(iPad,(eTMSAction)NextAction); bRetrievedDLCFile=true; m_bRead_TMS_DLCINFO_XML=true; } } else { bRetrievedDLCFile=true; }
if(bRetrievedDLCFile) { ui.HandleTMSDLCFileRetrieved(iPad);
app.SetTMSAction(iPad,(eTMSAction)NextAction); }}
void CConsoleMinecraftApp::TMSPP_RetrieveFileList(int iPad,C4JStorage::eGlobalStorage eStorageFacility,eTMSAction NextAction){ app.DebugPrintf("CConsoleMinecraftApp::TMSPP_RetrieveFileList\n");
if(eStorageFacility==C4JStorage::eGlobalStorage_Title) { if(m_bTMSPP_GlobalFileListRead==false) { m_bTMSPP_GlobalFileListRead=true; StorageManager.TMSPP_ReadFileList(iPad,eStorageFacility,&CConsoleMinecraftApp::Callback_TMSPPRetrieveFileList,this,NextAction); } else { SetTMSAction(iPad,NextAction); } } else { if(m_bTMSPP_UserFileListRead==false) { m_bTMSPP_UserFileListRead=true; StorageManager.TMSPP_ReadFileList(iPad,eStorageFacility,&CConsoleMinecraftApp::Callback_TMSPPRetrieveFileList,this,NextAction); } else { SetTMSAction(iPad,NextAction); } }}
int CConsoleMinecraftApp::Callback_TMSPPRetrieveFileList(void *pParam,int iPad, int iUserData, LPVOID lpvData, WCHAR *wchFilename){ CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam; app.DebugPrintf("CConsoleMinecraftApp::Callback_TMSPPRetrieveFileList\n"); if(lpvData!=NULL) { vector<C4JStorage::PTMSPP_FILE_DETAILS> *pvTmsFileDetails=(vector<C4JStorage::PTMSPP_FILE_DETAILS> *)lpvData;
if(pvTmsFileDetails->size()>0) { #ifdef _DEBUG // dump out the file list app.DebugPrintf("TMSPP filecount - %d\nFiles - \n",pvTmsFileDetails->size()); int iCount=0; AUTO_VAR(itEnd, pvTmsFileDetails->end()); for( AUTO_VAR(it, pvTmsFileDetails->begin()); it != itEnd; it++ ) { C4JStorage::PTMSPP_FILE_DETAILS fd = *it; app.DebugPrintf("%2d. %ls (size - %d)\n",iCount++,fd->wchFilename,fd->ulFileSize); }
#endif } } // change the state to the next action pClass->SetTMSAction(iPad,(eTMSAction)iUserData); return 0;}
//#define WRITE_DLCINFO 1int CConsoleMinecraftApp::Callback_TMSPPReadDLCFile(void *pParam,int iPad, int iUserData, LPVOID lpvData ,WCHAR *pwchFilename){ app.DebugPrintf("CConsoleMinecraftApp::Callback_TMSPPReadDLCFile\n"); C4JStorage::PTMSPP_FILEDATA pFileData= (C4JStorage::PTMSPP_FILEDATA)lpvData; CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam;
#ifdef WRITE_DLCINFO if(0)#else if(pFileData && pFileData->dwSize>0)#endif { // the DLC.xml file is now compressed
unsigned int uiDecompSize=*(unsigned int *)pFileData->pbData; unsigned int uiCompSize=((unsigned int *)pFileData->pbData)[1];
BYTE *pDecompressedData = new BYTE [uiDecompSize];
Compression::ECompressionTypes eOriginalCompressionType=Compression::getCompression()->GetDecompressionType(); Compression::getCompression()->SetDecompressionType(Compression::eCompressionType_LZXRLE); Compression::getCompression()->Decompress(pDecompressedData,&uiDecompSize,&((unsigned int *)pFileData->pbData)[2],uiCompSize); Compression::getCompression()->SetDecompressionType(eOriginalCompressionType);
ATG::XMLParser xmlParser; xmlDLCInfoCallback xmlCallback;
xmlParser.RegisterSAXCallbackInterface( &xmlCallback ); xmlParser.ParseXMLBuffer((CHAR *)pDecompressedData,uiDecompSize);
pClass->m_bRead_TMS_DLCINFO_XML=true;
delete pDecompressedData;
// apply the dlc info to the locally installed DLC StorageManager.UpdateDLCProductIDs();
ui.HandleTMSDLCFileRetrieved(iPad); } else {
// if there was a read error, reset to idle StorageManager.TMSPP_ClearTitleStorageState(iPad);
#ifdef WRITE_DLCINFO HANDLE file; DWORD dwHigh=0; DWORD dwFileSize;
// hack for now to upload the file // open the local file file = CreateFile(L"DLCXbox1.cmp", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if( file == INVALID_HANDLE_VALUE ) { DWORD error = GetLastError(); app.DebugPrintf("Failed to open DLCXbox1.cmp with error code %d (%x)\n", error, error); __debugbreak(); return 0; }
dwHigh=0; dwFileSize = GetFileSize(file,&dwHigh);
if(dwFileSize!=0) { DWORD bytesRead;
PBYTE pbData= new BYTE [dwFileSize];
ReadFile(file,pbData,dwFileSize,&bytesRead,NULL);
if(bytesRead==dwFileSize) { //StorageManager.TMSPP_WriteFile(iPad,C4JStorage::eGlobalStorage_TitleUser,C4JStorage::TMS_FILETYPE_BINARY,L"DLCXbox1.cmp",(PBYTE) pbData, dwFileSize,NULL,NULL, 0); StorageManager.TMSPP_WriteFile(iPad,C4JStorage::eGlobalStorage_TitleUser,C4JStorage::TMS_FILETYPE_BINARY,L"TP06.cmp",(PBYTE) pbData, dwFileSize,NULL,NULL, 0); } Sleep(5000); }
CloseHandle(file);
/* // now the icon file = CreateFile(L"TP06.png", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if( file == INVALID_HANDLE_VALUE ) { DWORD error = GetLastError(); app.DebugPrintf("Failed to open DLCXbox1.cmp with error code %d (%x)\n", error, error); return 0; }
dwHigh=0; dwFileSize = GetFileSize(file,&dwHigh);
if(dwFileSize!=0) { DWORD bytesRead;
PBYTE pbData= new BYTE [dwFileSize];
ReadFile(file,pbData,dwFileSize,&bytesRead,NULL);
if(bytesRead==dwFileSize) { StorageManager.TMSPP_WriteFile(iPad,C4JStorage::eGlobalStorage_TitleUser,C4JStorage::TMS_FILETYPE_BINARY,L"TP06.png",(PBYTE) pbData, dwFileSize,NULL,NULL, 0); } Sleep(5000); }
CloseHandle(file);*/#endif }
// change the state to the next action pClass->SetTMSAction(iPad,(eTMSAction)iUserData);
return 0;}
void CConsoleMinecraftApp::Callback_SaveGameIncomplete(void *pParam, C4JStorage::ESaveIncompleteType saveIncompleteType){ CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam;
if ( saveIncompleteType == C4JStorage::ESaveIncomplete_OutOfQuota || saveIncompleteType == C4JStorage::ESaveIncomplete_OutOfLocalStorage ) { StorageManager.SetSaveDisabled(true); pClass->EnterSaveNotificationSection();
int message; if (saveIncompleteType == C4JStorage::ESaveIncomplete_OutOfQuota) message = IDS_SAVE_INCOMPLETE_EXPLANATION_QUOTA; else message = IDS_SAVE_INCOMPLETE_EXPLANATION_LOCAL_STORAGE;
UINT uiIDA[3] = { IDS_SAVE_INCOMPLETE_RETRY_SAVING, IDS_SAVE_INCOMPLETE_DISABLE_SAVING, IDS_SAVE_INCOMPLETE_DELETE_SAVES };
if ( ui.RequestMessageBox( IDS_SAVE_INCOMPLETE_TITLE, message, uiIDA,3,0,Callback_SaveGameIncompleteMessageBoxReturned,pClass, app.GetStringTable()) == C4JStorage::EMessage_Busy) { // If this failed to display, continue as if we cancelled. This isn't ideal, but the user should already have had some system notification of being out of memory, // and if we instantly retry then they may not be able to navigate whatever other error is blocking this from appearing Callback_SaveGameIncompleteMessageBoxReturned(pParam, 0, C4JStorage::EMessage_Cancelled); } } else { // 4J-JEV: Unknown error, just cancel the operation. Callback_SaveGameIncompleteMessageBoxReturned(pParam, 0, C4JStorage::EMessage_Cancelled); }}
int CConsoleMinecraftApp::Callback_SaveGameIncompleteMessageBoxReturned(void *pParam,int iPad,C4JStorage::EMessageResult result){ CConsoleMinecraftApp* pClass = (CConsoleMinecraftApp*)pParam;
switch(result) { case C4JStorage::EMessage_ResultAccept: pClass->LeaveSaveNotificationSection(); StorageManager.SetSaveDisabled(false); StorageManager.ContinueIncompleteOperation(); break; case C4JStorage::EMessage_ResultDecline: case C4JStorage::EMessage_Cancelled: pClass->LeaveSaveNotificationSection(); // Set the global flag, so that we don't disable saving again once the message box is complete app.SetGameHostOption(eGameHostOption_DisableSaving, 1); StorageManager.CancelIncompleteOperation(); break; case C4JStorage::EMessage_ResultThirdOption: ui.NavigateToScene(iPad, eUIScene_InGameSaveManagementMenu, NULL, eUILayer_Error, eUIGroup_Fullscreen); break; } return 0;}
void CConsoleMinecraftApp::ReadLocalDLCList(void){ char szFile[255]; DWORD dwLength; // read the local dlc list File fDLCList(L"CU/DLCXbox1.cmp") ; if(fDLCList.exists()) { dwLength = fDLCList.length(); byteArray data(dwLength);
FileInputStream fis(fDLCList); fis.read(data,0,dwLength); fis.close();
unsigned int uiDecompSize=*(unsigned int *)data.data; unsigned int uiCompSize=((unsigned int *)data.data)[1];
BYTE *pDecompressedData = new BYTE [uiDecompSize];
Compression::ECompressionTypes eOriginalCompressionType=Compression::getCompression()->GetDecompressionType(); Compression::getCompression()->SetDecompressionType(Compression::eCompressionType_LZXRLE); Compression::getCompression()->Decompress(pDecompressedData,&uiDecompSize,&((unsigned int *)data.data)[2],uiCompSize); Compression::getCompression()->SetDecompressionType(eOriginalCompressionType);
ATG::XMLParser xmlParser; xmlDLCInfoCallback xmlCallback;
xmlParser.RegisterSAXCallbackInterface( &xmlCallback ); xmlParser.ParseXMLBuffer((CHAR *)pDecompressedData,uiDecompSize);
delete pDecompressedData; }}