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.
6.8 kB · 272 lines
C++
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272#include "stdafx.h"#include "IUIScene_AnvilMenu.h"#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h"#include "..\..\..\Minecraft.World\InputOutputStream.h"#include "..\..\..\Minecraft.World\net.minecraft.network.packet.h"#include "..\..\Minecraft.h"#include "..\..\MultiPlayerLocalPlayer.h"#include "..\..\ClientConnection.h"
IUIScene_AnvilMenu::IUIScene_AnvilMenu(){ m_inventory = nullptr; m_repairMenu = NULL; m_itemName = L"";}
IUIScene_AbstractContainerMenu::ESceneSection IUIScene_AnvilMenu::GetSectionAndSlotInDirection( ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY ){ ESceneSection newSection = eSection; int xOffset = 0;
// Find the new section if there is one switch( eSection ) { case eSectionAnvilItem1: if(eTapDirection == eTapStateUp) { newSection = eSectionAnvilName; } else if(eTapDirection == eTapStateDown) { newSection = eSectionAnvilInventory; xOffset = ANVIL_SCENE_ITEM1_SLOT_DOWN_OFFSET; } else if(eTapDirection == eTapStateLeft) { newSection = eSectionAnvilResult; } else if(eTapDirection == eTapStateRight) { newSection = eSectionAnvilItem2; } break; case eSectionAnvilItem2: if(eTapDirection == eTapStateUp) { newSection = eSectionAnvilName; } else if(eTapDirection == eTapStateDown) { newSection = eSectionAnvilInventory; xOffset = ANVIL_SCENE_ITEM2_SLOT_DOWN_OFFSET; } else if(eTapDirection == eTapStateLeft) { newSection = eSectionAnvilItem1; } else if(eTapDirection == eTapStateRight) { newSection = eSectionAnvilResult; } break; case eSectionAnvilResult: if(eTapDirection == eTapStateUp) { newSection = eSectionAnvilName; } else if(eTapDirection == eTapStateDown) { newSection = eSectionAnvilInventory; xOffset = ANVIL_SCENE_RESULT_SLOT_DOWN_OFFSET; } else if(eTapDirection == eTapStateLeft) { newSection = eSectionAnvilItem2; } else if(eTapDirection == eTapStateRight) { newSection = eSectionAnvilItem1; } break; case eSectionAnvilName: if(eTapDirection == eTapStateUp) { newSection = eSectionAnvilUsing; xOffset = ANVIL_SCENE_ITEM2_SLOT_UP_OFFSET; } else if(eTapDirection == eTapStateDown) { newSection = eSectionAnvilItem2; } break; case eSectionAnvilInventory: if(eTapDirection == eTapStateDown) { newSection = eSectionAnvilUsing; } else if(eTapDirection == eTapStateUp) { if( *piTargetX <= ANVIL_SCENE_ITEM1_SLOT_UP_OFFSET) { newSection = eSectionAnvilItem1; } else if( *piTargetX <= ANVIL_SCENE_ITEM2_SLOT_UP_OFFSET) { newSection = eSectionAnvilItem2; } else if( *piTargetX >= ANVIL_SCENE_RESULT_SLOT_UP_OFFSET) { newSection = eSectionAnvilResult; } } break; case eSectionAnvilUsing: if(eTapDirection == eTapStateUp) { newSection = eSectionAnvilInventory; } else if(eTapDirection == eTapStateDown) { if( *piTargetX <= ANVIL_SCENE_ITEM1_SLOT_UP_OFFSET) { newSection = eSectionAnvilItem1; } else if( *piTargetX <= ANVIL_SCENE_ITEM2_SLOT_UP_OFFSET) { newSection = eSectionAnvilName; } else if( *piTargetX >= ANVIL_SCENE_RESULT_SLOT_UP_OFFSET) { newSection = eSectionAnvilName; } } break; default: assert( false ); break; }
updateSlotPosition(eSection, newSection, eTapDirection, piTargetX, piTargetY, xOffset);
return newSection;}
int IUIScene_AnvilMenu::getSectionStartOffset(ESceneSection eSection){ int offset = 0; switch( eSection ) { case eSectionAnvilItem1: offset = MerchantMenu::PAYMENT1_SLOT; break; case eSectionAnvilItem2: offset = MerchantMenu::PAYMENT2_SLOT; break; case eSectionAnvilResult: offset = MerchantMenu::RESULT_SLOT; break; case eSectionAnvilInventory: offset = MerchantMenu::INV_SLOT_START; break; case eSectionAnvilUsing: offset = MerchantMenu::USE_ROW_SLOT_START; break; default: assert( false ); break; } return offset;}
void IUIScene_AnvilMenu::handleOtherClicked(int iPad, ESceneSection eSection, int buttonNum, bool quickKey){ switch(eSection) { case eSectionAnvilName: handleEditNamePressed(); break; };}
bool IUIScene_AnvilMenu::IsSectionSlotList( ESceneSection eSection ){ switch( eSection ) { case eSectionAnvilUsing: case eSectionAnvilInventory: case eSectionAnvilItem1: case eSectionAnvilItem2: case eSectionAnvilResult: return true; } return false;}
void IUIScene_AnvilMenu::handleTick(){ Minecraft *pMinecraft = Minecraft::GetInstance(); bool canAfford = true; wstring m_costString = L"";
if(m_repairMenu->cost > 0) { if(m_repairMenu->cost >= 40 && !pMinecraft->localplayers[getPad()]->abilities.instabuild) { m_costString = app.GetString(IDS_REPAIR_EXPENSIVE); canAfford = false; } else if(!m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->hasItem()) { // Do nothing } else { LPCWSTR costString = app.GetString(IDS_REPAIR_COST); wchar_t temp[256]; swprintf(temp, 256, costString, m_repairMenu->cost); m_costString = temp; if(!m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->mayPickup(dynamic_pointer_cast<Player>(m_inventory->player->shared_from_this()))) { canAfford = false; } } } setCostLabel(m_costString, canAfford);
bool crossVisible = (m_repairMenu->getSlot(AnvilMenu::INPUT_SLOT)->hasItem() || m_repairMenu->getSlot(AnvilMenu::ADDITIONAL_SLOT)->hasItem()) && !m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->hasItem(); showCross(crossVisible);}
void IUIScene_AnvilMenu::updateItemName(){ Slot *slot = m_repairMenu->getSlot(AnvilMenu::INPUT_SLOT); if (slot != NULL && slot->hasItem()) { if (!slot->getItem()->hasCustomHoverName() && m_itemName.compare(slot->getItem()->getHoverName())==0) { m_itemName = L""; } }
m_repairMenu->setItemName(m_itemName);
// Convert to byteArray ByteArrayOutputStream baos; DataOutputStream dos(&baos); dos.writeUTF(m_itemName); Minecraft::GetInstance()->localplayers[getPad()]->connection->send(shared_ptr<CustomPayloadPacket>(new CustomPayloadPacket(CustomPayloadPacket::SET_ITEM_NAME_PACKET, baos.toByteArray())));}
void IUIScene_AnvilMenu::refreshContainer(AbstractContainerMenu *container, vector<shared_ptr<ItemInstance> > *items){ slotChanged(container, AnvilMenu::INPUT_SLOT, container->getSlot(0)->getItem());}
void IUIScene_AnvilMenu::slotChanged(AbstractContainerMenu *container, int slotIndex, shared_ptr<ItemInstance> item){ if (slotIndex == AnvilMenu::INPUT_SLOT) { m_itemName = item == NULL ? L"" : item->getHoverName(); setEditNameValue(m_itemName); setEditNameEditable(item != NULL); if (item != NULL) { updateItemName(); } }}
void IUIScene_AnvilMenu::setContainerData(AbstractContainerMenu *container, int id, int value){}