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\net.minecraft.world.inventory.h"
4#include "..\..\..\Minecraft.World\StringHelpers.h"
5#include "..\..\MultiPlayerLocalPlayer.h"
6#include "..\..\Common\Tutorial\Tutorial.h"
7#include "..\..\Common\Tutorial\TutorialMode.h"
8#include "..\..\Common\Tutorial\TutorialEnum.h"
9#include "..\..\Minecraft.h"
10#include "XUI_Ctrl_SlotList.h"
11#include "XUI_Scene_Anvil.h"
12
13
14//--------------------------------------------------------------------------------------
15// Name: CXuiSceneAnvil::OnInit
16// Desc: Message handler for XM_INIT
17//--------------------------------------------------------------------------------------
18HRESULT CXuiSceneAnvil::OnInit( XUIMessageInit* pInitData, BOOL& bHandled )
19{
20 MapChildControls();
21
22 XuiControlSetText(m_anvilText,app.GetString(IDS_REPAIR_AND_NAME));
23
24 m_cross.SetShow(FALSE);
25 m_editName.SetText(L"");
26 m_editName.SetTextLimit(30);
27 m_editName.SetTitleAndText(IDS_TITLE_RENAME,IDS_TITLE_RENAME);
28
29 Minecraft *pMinecraft = Minecraft::GetInstance();
30
31 AnvilScreenInput* initData = (AnvilScreenInput*)pInitData->pvInitData;
32 m_iPad=initData->iPad;
33 m_bSplitscreen=initData->bSplitscreen;
34 m_inventory = initData->inventory;
35
36 // if we are in splitscreen, then we need to figure out if we want to move this scene
37
38 if(m_bSplitscreen)
39 {
40 app.AdjustSplitscreenScene(m_hObj,&m_OriginalPosition,m_iPad);
41 }
42
43 if( pMinecraft->localgameModes[m_iPad] != NULL )
44 {
45 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad];
46 m_previousTutorialState = gameMode->getTutorial()->getCurrentState();
47 gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Anvil_Menu, this);
48 }
49
50 m_repairMenu = new RepairMenu( initData->inventory, initData->level, initData->x, initData->y, initData->z, pMinecraft->localplayers[m_iPad] );
51 m_repairMenu->addSlotListener(this);
52
53 InitDataAssociations(m_iPad, m_repairMenu);
54
55 delete initData;
56
57 CXuiSceneAbstractContainer::Initialize( m_iPad, m_repairMenu, true, RepairMenu::INV_SLOT_START, eSectionAnvilUsing, eSectionAnvilMax );
58
59 //ProfileManager.SetRichPresenceContextValue(m_iPad,CONTEXT_GAME_STATE,CONTEXT_GAME_STATE_FORGING);
60
61 XuiSetTimer(m_hObj,ANVIL_UPDATE_TIMER_ID,ANVIL_UPDATE_TIMER_TIME);
62
63 return S_OK;
64}
65
66HRESULT CXuiSceneAnvil::OnDestroy()
67{
68 Minecraft *pMinecraft = Minecraft::GetInstance();
69
70 if( pMinecraft->localgameModes[m_iPad] != NULL )
71 {
72 TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad];
73 if(gameMode != NULL) gameMode->getTutorial()->changeTutorialState(m_previousTutorialState);
74 }
75
76 // 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.
77 // 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)
78 if(Minecraft::GetInstance()->localplayers[m_iPad] != NULL) Minecraft::GetInstance()->localplayers[m_iPad]->closeContainer();
79 return S_OK;
80}
81
82HRESULT CXuiSceneAnvil::OnNotifyValueChanged (HXUIOBJ hObjSource, XUINotifyValueChanged* pValueChangedData, BOOL& rfHandled)
83{
84 if(hObjSource == m_editName)
85 {
86 wstring newValue = m_editName.GetText();
87 LPCWSTR szText=newValue.c_str();
88 stripWhitespaceForHtml(newValue);
89
90 // strip leading spaces
91 wstring b;
92 int start = (int)newValue.find_first_not_of(L" ");
93 int end = (int)newValue.find_last_not_of(L" ");
94
95 if( start == wstring::npos )
96 {
97 // the string is all space
98 newValue=L"";
99 }
100 else
101 {
102 if( end == wstring::npos ) end = (int)newValue.size()-1;
103 b = newValue.substr(start,(end-start)+1);
104 newValue=b;
105 }
106
107 // 4J-PB - This was stopping the player deleting the last character in the name using the chatpad
108 //if(!newValue.empty() && !(newValue.size() == 1 && newValue.at(0) == L' '))
109 {
110 newValue = escapeXML(newValue);
111 m_itemName = newValue;
112 updateItemName();
113 }
114// else
115// {
116// LPCWSTR szText=m_itemName.c_str();
117// m_editName.SetText(szText);
118// m_editName.SetCaretPosition(m_itemName.length());
119// }
120 }
121
122 return S_OK;
123}
124
125HRESULT CXuiSceneAnvil::handleCustomTimer( XUIMessageTimer *pTimer, BOOL& bHandled )
126{
127 if(pTimer->nId == ANVIL_UPDATE_TIMER_ID)
128 {
129 handleTick();
130 bHandled = TRUE;
131 }
132 return S_OK;
133}
134
135CXuiControl* CXuiSceneAnvil::GetSectionControl( ESceneSection eSection )
136{
137 switch( eSection )
138 {
139 case eSectionAnvilItem1:
140 return (CXuiControl *)m_ingredient1Control;
141 break;
142 case eSectionAnvilItem2:
143 return (CXuiControl *)m_ingredient2Control;
144 break;
145 case eSectionAnvilResult:
146 return (CXuiControl *)m_resultControl;
147 break;
148 case eSectionAnvilName:
149 return (CXuiControl *)&m_editName;
150 break;
151 case eSectionAnvilInventory:
152 return (CXuiControl *)m_inventoryControl;
153 break;
154 case eSectionAnvilUsing:
155 return (CXuiControl *)m_useRowControl;
156 break;
157 default:
158 assert( false );
159 break;
160 }
161 return NULL;
162}
163
164CXuiCtrlSlotList* CXuiSceneAnvil::GetSectionSlotList( ESceneSection eSection )
165{
166 switch( eSection )
167 {
168 case eSectionAnvilItem1:
169 return m_ingredient1Control;
170 break;
171 case eSectionAnvilItem2:
172 return m_ingredient2Control;
173 break;
174 case eSectionAnvilResult:
175 return m_resultControl;
176 break;
177 case eSectionAnvilInventory:
178 return m_inventoryControl;
179 break;
180 case eSectionAnvilUsing:
181 return m_useRowControl;
182 break;
183 default:
184 assert( false );
185 break;
186 }
187 return NULL;
188}
189
190// 4J Stu - Added to support auto-save. Need to re-associate on a navigate back
191void CXuiSceneAnvil::InitDataAssociations(int iPad, AbstractContainerMenu *menu, int startIndex /*= 0*/)
192{
193 // TODO Inventory dimensions need defined as constants
194 m_resultControl->SetData( iPad, menu, 1, 1, RepairMenu::RESULT_SLOT );
195
196 m_ingredient1Control->SetData( iPad, menu, 1, 1, RepairMenu::INPUT_SLOT );
197 m_ingredient2Control->SetData( iPad, menu, 1, 1, RepairMenu::ADDITIONAL_SLOT);
198
199 //m_litProgressControl->SetUserData( initData->furnace.get() );
200
201 //m_burnProgress->SetUserData( initData->furnace.get() );
202
203 CXuiSceneAbstractContainer::InitDataAssociations(iPad, menu, RepairMenu::INV_SLOT_START);
204}
205
206void CXuiSceneAnvil::handleEditNamePressed()
207{
208 // 4J Stu - The edit control already handles A/Start presses, so ignore anything else
209 //m_editName.RequestKeyboard(m_iPad);
210}
211
212void CXuiSceneAnvil::setEditNameValue(const wstring &name)
213{
214 wstring parsedName = parseXMLSpecials(name);
215 m_editName.SetText(parsedName.c_str());
216 m_editName.SetCaretPosition(parsedName.length());
217}
218
219void CXuiSceneAnvil::setEditNameEditable(bool enabled)
220{
221}
222
223void CXuiSceneAnvil::setCostLabel(const wstring &label, bool canAfford)
224{
225 if(canAfford)
226 {
227 m_affordableText.SetText(label.c_str());
228 m_affordableText.SetShow(TRUE);
229 m_expensiveText.SetShow(FALSE);
230 }
231 else
232 {
233 m_expensiveText.SetText(label.c_str());
234 m_affordableText.SetShow(FALSE);
235 m_expensiveText.SetShow(TRUE);
236 }
237}
238
239void CXuiSceneAnvil::showCross(bool show)
240{
241 m_cross.SetShow(show?TRUE:FALSE);
242}