the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2
3#include "..\..\..\Minecraft.World\FurnaceMenu.h"
4#include "..\..\MultiplayerLocalPlayer.h"
5#include "..\..\Common\Tutorial\Tutorial.h"
6#include "..\..\Common\Tutorial\TutorialMode.h"
7#include "..\..\Common\Tutorial\TutorialEnum.h"
8#include "..\..\Minecraft.h"
9#include "XUI_Ctrl_SlotList.h"
10#include "XUI_Scene_Furnace.h"
11#include "XUI_Ctrl_BurnProgress.h"
12#include "XUI_Ctrl_FireProgress.h"
13
14
15//--------------------------------------------------------------------------------------
16// Name: CXuiSceneFurnace::OnInit
17// Desc: Message handler for XM_INIT
18//--------------------------------------------------------------------------------------
19HRESULT CXuiSceneFurnace::OnInit( XUIMessageInit* pInitData, BOOL& bHandled )
20{
21 MapChildControls();
22
23 XuiControlSetText(m_FurnaceText,app.GetString(IDS_FURNACE));
24 XuiControlSetText(m_IngredientText,app.GetString(IDS_INGREDIENT));
25 XuiControlSetText(m_FuelText,app.GetString(IDS_FUEL));
26
27 Minecraft *pMinecraft = Minecraft::GetInstance();
28
29 FurnaceScreenInput* initData = (FurnaceScreenInput*)pInitData->pvInitData;
30 m_iPad=initData->iPad;
31 m_bSplitscreen=initData->bSplitscreen;
32
33 // if we are in splitscreen, then we need to figure out if we want to move this scene
34
35 if(m_bSplitscreen)
36 {
37 app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad);
38 }
39
40#ifdef _XBOX
41 if( pMinecraft->localgameModes[m_iPad] != NULL )
42 {
43 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad];
44 m_previousTutorialState = gameMode->getTutorial()->getCurrentState();
45 gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Furnace_Menu, this);
46 }
47#endif
48
49 FurnaceMenu* menu = new FurnaceMenu( initData->inventory, initData->furnace );
50
51
52 InitDataAssociations(m_iPad, menu);
53
54 m_litProgressControl->SetUserData( initData->furnace.get() );
55
56 m_burnProgress->SetUserData( initData->furnace.get() );
57
58 CXuiSceneAbstractContainer::Initialize( m_iPad, menu, true, FurnaceMenu::INV_SLOT_START, eSectionFurnaceUsing, eSectionFurnaceMax );
59
60 app.SetRichPresenceContext(m_iPad,CONTEXT_GAME_STATE_FORGING);
61
62 delete initData;
63
64 return S_OK;
65}
66
67HRESULT CXuiSceneFurnace::OnDestroy()
68{
69 Minecraft *pMinecraft = Minecraft::GetInstance();
70
71#ifdef _XBOX
72 if( pMinecraft->localgameModes[m_iPad] != NULL )
73 {
74 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad];
75 if(gameMode != NULL) gameMode->getTutorial()->changeTutorialState(m_previousTutorialState);
76 }
77#endif
78
79 // 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.
80 // 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)
81 if(Minecraft::GetInstance()->localplayers[m_iPad] != NULL) Minecraft::GetInstance()->localplayers[m_iPad]->closeContainer();
82 return S_OK;
83}
84
85CXuiControl* CXuiSceneFurnace::GetSectionControl( ESceneSection eSection )
86{
87 switch( eSection )
88 {
89 case eSectionFurnaceResult:
90 return (CXuiControl *)m_resultControl;
91 break;
92 case eSectionFurnaceFuel:
93 return (CXuiControl *)m_fuelControl;
94 break;
95 case eSectionFurnaceIngredient:
96 return (CXuiControl *)m_ingredientControl;
97 break;
98 case eSectionFurnaceInventory:
99 return (CXuiControl *)m_inventoryControl;
100 break;
101 case eSectionFurnaceUsing:
102 return (CXuiControl *)m_useRowControl;
103 break;
104 default:
105 assert( false );
106 break;
107 }
108 return NULL;
109}
110
111CXuiCtrlSlotList* CXuiSceneFurnace::GetSectionSlotList( ESceneSection eSection )
112{
113 switch( eSection )
114 {
115 case eSectionFurnaceResult:
116 return m_resultControl;
117 break;
118 case eSectionFurnaceFuel:
119 return m_fuelControl;
120 break;
121 case eSectionFurnaceIngredient:
122 return m_ingredientControl;
123 break;
124 case eSectionFurnaceInventory:
125 return m_inventoryControl;
126 break;
127 case eSectionFurnaceUsing:
128 return m_useRowControl;
129 break;
130 default:
131 assert( false );
132 break;
133 }
134 return NULL;
135}
136
137// 4J Stu - Added to support auto-save. Need to re-associate on a navigate back
138void CXuiSceneFurnace::InitDataAssociations(int iPad, AbstractContainerMenu *menu, int startIndex /*= 0*/)
139{
140 // TODO Inventory dimensions need defined as constants
141 m_ingredientControl->SetData( iPad, menu, 1, 1, FurnaceMenu::INGREDIENT_SLOT );
142
143 m_fuelControl->SetData( iPad, menu, 1, 1, FurnaceMenu::FUEL_SLOT );
144
145 m_resultControl->SetData( iPad, menu, 1, 1, FurnaceMenu::RESULT_SLOT );
146
147 //m_litProgressControl->SetUserData( initData->furnace.get() );
148
149 //m_burnProgress->SetUserData( initData->furnace.get() );
150
151 CXuiSceneAbstractContainer::InitDataAssociations(iPad, menu, FurnaceMenu::INV_SLOT_START);
152}
153