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.
7.0 kB · 242 lines
C++
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242#include "stdafx.h"
#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h"#include "..\..\..\Minecraft.World\StringHelpers.h"#include "..\..\MultiPlayerLocalPlayer.h"#include "..\..\Common\Tutorial\Tutorial.h"#include "..\..\Common\Tutorial\TutorialMode.h"#include "..\..\Common\Tutorial\TutorialEnum.h"#include "..\..\Minecraft.h"#include "XUI_Ctrl_SlotList.h"#include "XUI_Scene_Anvil.h"
//--------------------------------------------------------------------------------------// Name: CXuiSceneAnvil::OnInit// Desc: Message handler for XM_INIT//--------------------------------------------------------------------------------------HRESULT CXuiSceneAnvil::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ){ MapChildControls(); XuiControlSetText(m_anvilText,app.GetString(IDS_REPAIR_AND_NAME)); m_cross.SetShow(FALSE); m_editName.SetText(L""); m_editName.SetTextLimit(30); m_editName.SetTitleAndText(IDS_TITLE_RENAME,IDS_TITLE_RENAME);
Minecraft *pMinecraft = Minecraft::GetInstance();
AnvilScreenInput* initData = (AnvilScreenInput*)pInitData->pvInitData; m_iPad=initData->iPad; m_bSplitscreen=initData->bSplitscreen; m_inventory = initData->inventory;
// if we are in splitscreen, then we need to figure out if we want to move this scene
if(m_bSplitscreen) { app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad); }
if( pMinecraft->localgameModes[m_iPad] != NULL ) { TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad]; m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Anvil_Menu, this); }
m_repairMenu = new RepairMenu( initData->inventory, initData->level, initData->x, initData->y, initData->z, pMinecraft->localplayers[m_iPad] ); m_repairMenu->addSlotListener(this);
InitDataAssociations(m_iPad, m_repairMenu);
delete initData;
CXuiSceneAbstractContainer::Initialize( m_iPad, m_repairMenu, true, RepairMenu::INV_SLOT_START, eSectionAnvilUsing, eSectionAnvilMax ); //ProfileManager.SetRichPresenceContextValue(m_iPad,CONTEXT_GAME_STATE,CONTEXT_GAME_STATE_FORGING); XuiSetTimer(m_hObj,ANVIL_UPDATE_TIMER_ID,ANVIL_UPDATE_TIMER_TIME);
return S_OK;}
HRESULT CXuiSceneAnvil::OnDestroy(){ Minecraft *pMinecraft = Minecraft::GetInstance();
if( pMinecraft->localgameModes[m_iPad] != NULL ) { TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad]; if(gameMode != NULL) gameMode->getTutorial()->changeTutorialState(m_previousTutorialState); }
// 4J Stu - Fix for #11302 - TCR 001: Network Connectivity: Host crashed after being killed by the client while accessing a chest during burst packet loss. // We need to make sure that we call closeContainer() anytime this menu is closed, even if it is forced to close by some other reason (like the player dying) if(Minecraft::GetInstance()->localplayers[m_iPad] != NULL) Minecraft::GetInstance()->localplayers[m_iPad]->closeContainer(); return S_OK;}
HRESULT CXuiSceneAnvil::OnNotifyValueChanged (HXUIOBJ hObjSource, XUINotifyValueChanged* pValueChangedData, BOOL& rfHandled){ if(hObjSource == m_editName) { wstring newValue = m_editName.GetText(); LPCWSTR szText=newValue.c_str(); stripWhitespaceForHtml(newValue);
// strip leading spaces wstring b; int start = (int)newValue.find_first_not_of(L" "); int end = (int)newValue.find_last_not_of(L" ");
if( start == wstring::npos ) { // the string is all space newValue=L""; } else { if( end == wstring::npos ) end = (int)newValue.size()-1; b = newValue.substr(start,(end-start)+1); newValue=b; }
// 4J-PB - This was stopping the player deleting the last character in the name using the chatpad //if(!newValue.empty() && !(newValue.size() == 1 && newValue.at(0) == L' ')) { newValue = escapeXML(newValue); m_itemName = newValue; updateItemName(); }// else// {// LPCWSTR szText=m_itemName.c_str();// m_editName.SetText(szText);// m_editName.SetCaretPosition(m_itemName.length());// } }
return S_OK;}
HRESULT CXuiSceneAnvil::handleCustomTimer( XUIMessageTimer *pTimer, BOOL& bHandled ){ if(pTimer->nId == ANVIL_UPDATE_TIMER_ID) { handleTick(); bHandled = TRUE; } return S_OK;}
CXuiControl* CXuiSceneAnvil::GetSectionControl( ESceneSection eSection ){ switch( eSection ) { case eSectionAnvilItem1: return (CXuiControl *)m_ingredient1Control; break; case eSectionAnvilItem2: return (CXuiControl *)m_ingredient2Control; break; case eSectionAnvilResult: return (CXuiControl *)m_resultControl; break; case eSectionAnvilName: return (CXuiControl *)&m_editName; break; case eSectionAnvilInventory: return (CXuiControl *)m_inventoryControl; break; case eSectionAnvilUsing: return (CXuiControl *)m_useRowControl; break; default: assert( false ); break; } return NULL;}
CXuiCtrlSlotList* CXuiSceneAnvil::GetSectionSlotList( ESceneSection eSection ){ switch( eSection ) { case eSectionAnvilItem1: return m_ingredient1Control; break; case eSectionAnvilItem2: return m_ingredient2Control; break; case eSectionAnvilResult: return m_resultControl; break; case eSectionAnvilInventory: return m_inventoryControl; break; case eSectionAnvilUsing: return m_useRowControl; break; default: assert( false ); break; } return NULL;}
// 4J Stu - Added to support auto-save. Need to re-associate on a navigate backvoid CXuiSceneAnvil::InitDataAssociations(int iPad, AbstractContainerMenu *menu, int startIndex /*= 0*/){ // TODO Inventory dimensions need defined as constants m_resultControl->SetData( iPad, menu, 1, 1, RepairMenu::RESULT_SLOT ); m_ingredient1Control->SetData( iPad, menu, 1, 1, RepairMenu::INPUT_SLOT ); m_ingredient2Control->SetData( iPad, menu, 1, 1, RepairMenu::ADDITIONAL_SLOT);
//m_litProgressControl->SetUserData( initData->furnace.get() ); //m_burnProgress->SetUserData( initData->furnace.get() );
CXuiSceneAbstractContainer::InitDataAssociations(iPad, menu, RepairMenu::INV_SLOT_START);}
void CXuiSceneAnvil::handleEditNamePressed(){ // 4J Stu - The edit control already handles A/Start presses, so ignore anything else //m_editName.RequestKeyboard(m_iPad);}
void CXuiSceneAnvil::setEditNameValue(const wstring &name){ wstring parsedName = parseXMLSpecials(name); m_editName.SetText(parsedName.c_str()); m_editName.SetCaretPosition(parsedName.length());}
void CXuiSceneAnvil::setEditNameEditable(bool enabled){}
void CXuiSceneAnvil::setCostLabel(const wstring &label, bool canAfford){ if(canAfford) { m_affordableText.SetText(label.c_str()); m_affordableText.SetShow(TRUE); m_expensiveText.SetShow(FALSE); } else { m_expensiveText.SetText(label.c_str()); m_affordableText.SetShow(FALSE); m_expensiveText.SetShow(TRUE); }}
void CXuiSceneAnvil::showCross(bool show){ m_cross.SetShow(show?TRUE:FALSE);}