From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp | 153 ++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp (limited to 'Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp') diff --git a/Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp b/Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp new file mode 100644 index 00000000..832d6b4c --- /dev/null +++ b/Minecraft.Client/Common/XUI/XUI_Scene_Furnace.cpp @@ -0,0 +1,153 @@ +#include "stdafx.h" + +#include "..\..\..\Minecraft.World\FurnaceMenu.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_Furnace.h" +#include "XUI_Ctrl_BurnProgress.h" +#include "XUI_Ctrl_FireProgress.h" + + +//-------------------------------------------------------------------------------------- +// Name: CXuiSceneFurnace::OnInit +// Desc: Message handler for XM_INIT +//-------------------------------------------------------------------------------------- +HRESULT CXuiSceneFurnace::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) +{ + MapChildControls(); + + XuiControlSetText(m_FurnaceText,app.GetString(IDS_FURNACE)); + XuiControlSetText(m_IngredientText,app.GetString(IDS_INGREDIENT)); + XuiControlSetText(m_FuelText,app.GetString(IDS_FUEL)); + + Minecraft *pMinecraft = Minecraft::GetInstance(); + + FurnaceScreenInput* initData = (FurnaceScreenInput*)pInitData->pvInitData; + m_iPad=initData->iPad; + m_bSplitscreen=initData->bSplitscreen; + + // 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); + } + +#ifdef _XBOX + if( pMinecraft->localgameModes[m_iPad] != NULL ) + { + TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad]; + m_previousTutorialState = gameMode->getTutorial()->getCurrentState(); + gameMode->getTutorial()->changeTutorialState(e_Tutorial_State_Furnace_Menu, this); + } +#endif + + FurnaceMenu* menu = new FurnaceMenu( initData->inventory, initData->furnace ); + + + InitDataAssociations(m_iPad, menu); + + m_litProgressControl->SetUserData( initData->furnace.get() ); + + m_burnProgress->SetUserData( initData->furnace.get() ); + + CXuiSceneAbstractContainer::Initialize( m_iPad, menu, true, FurnaceMenu::INV_SLOT_START, eSectionFurnaceUsing, eSectionFurnaceMax ); + + app.SetRichPresenceContext(m_iPad,CONTEXT_GAME_STATE_FORGING); + + delete initData; + + return S_OK; +} + +HRESULT CXuiSceneFurnace::OnDestroy() +{ + Minecraft *pMinecraft = Minecraft::GetInstance(); + +#ifdef _XBOX + if( pMinecraft->localgameModes[m_iPad] != NULL ) + { + TutorialMode *gameMode = (TutorialMode *)pMinecraft->localgameModes[m_iPad]; + if(gameMode != NULL) gameMode->getTutorial()->changeTutorialState(m_previousTutorialState); + } +#endif + + // 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; +} + +CXuiControl* CXuiSceneFurnace::GetSectionControl( ESceneSection eSection ) +{ + switch( eSection ) + { + case eSectionFurnaceResult: + return (CXuiControl *)m_resultControl; + break; + case eSectionFurnaceFuel: + return (CXuiControl *)m_fuelControl; + break; + case eSectionFurnaceIngredient: + return (CXuiControl *)m_ingredientControl; + break; + case eSectionFurnaceInventory: + return (CXuiControl *)m_inventoryControl; + break; + case eSectionFurnaceUsing: + return (CXuiControl *)m_useRowControl; + break; + default: + assert( false ); + break; + } + return NULL; +} + +CXuiCtrlSlotList* CXuiSceneFurnace::GetSectionSlotList( ESceneSection eSection ) +{ + switch( eSection ) + { + case eSectionFurnaceResult: + return m_resultControl; + break; + case eSectionFurnaceFuel: + return m_fuelControl; + break; + case eSectionFurnaceIngredient: + return m_ingredientControl; + break; + case eSectionFurnaceInventory: + return m_inventoryControl; + break; + case eSectionFurnaceUsing: + return m_useRowControl; + break; + default: + assert( false ); + break; + } + return NULL; +} + +// 4J Stu - Added to support auto-save. Need to re-associate on a navigate back +void CXuiSceneFurnace::InitDataAssociations(int iPad, AbstractContainerMenu *menu, int startIndex /*= 0*/) +{ + // TODO Inventory dimensions need defined as constants + m_ingredientControl->SetData( iPad, menu, 1, 1, FurnaceMenu::INGREDIENT_SLOT ); + + m_fuelControl->SetData( iPad, menu, 1, 1, FurnaceMenu::FUEL_SLOT ); + + m_resultControl->SetData( iPad, menu, 1, 1, FurnaceMenu::RESULT_SLOT ); + + //m_litProgressControl->SetUserData( initData->furnace.get() ); + + //m_burnProgress->SetUserData( initData->furnace.get() ); + + CXuiSceneAbstractContainer::InitDataAssociations(iPad, menu, FurnaceMenu::INV_SLOT_START); +} + -- cgit v1.2.3