the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 272 lines 6.8 kB view raw
1#include "stdafx.h" 2#include "IUIScene_AnvilMenu.h" 3#include "..\..\..\Minecraft.World\net.minecraft.world.inventory.h" 4#include "..\..\..\Minecraft.World\InputOutputStream.h" 5#include "..\..\..\Minecraft.World\net.minecraft.network.packet.h" 6#include "..\..\Minecraft.h" 7#include "..\..\MultiPlayerLocalPlayer.h" 8#include "..\..\ClientConnection.h" 9 10IUIScene_AnvilMenu::IUIScene_AnvilMenu() 11{ 12 m_inventory = nullptr; 13 m_repairMenu = NULL; 14 m_itemName = L""; 15} 16 17IUIScene_AbstractContainerMenu::ESceneSection IUIScene_AnvilMenu::GetSectionAndSlotInDirection( ESceneSection eSection, ETapState eTapDirection, int *piTargetX, int *piTargetY ) 18{ 19 ESceneSection newSection = eSection; 20 int xOffset = 0; 21 22 // Find the new section if there is one 23 switch( eSection ) 24 { 25 case eSectionAnvilItem1: 26 if(eTapDirection == eTapStateUp) 27 { 28 newSection = eSectionAnvilName; 29 } 30 else if(eTapDirection == eTapStateDown) 31 { 32 newSection = eSectionAnvilInventory; 33 xOffset = ANVIL_SCENE_ITEM1_SLOT_DOWN_OFFSET; 34 } 35 else if(eTapDirection == eTapStateLeft) 36 { 37 newSection = eSectionAnvilResult; 38 } 39 else if(eTapDirection == eTapStateRight) 40 { 41 newSection = eSectionAnvilItem2; 42 } 43 break; 44 case eSectionAnvilItem2: 45 if(eTapDirection == eTapStateUp) 46 { 47 newSection = eSectionAnvilName; 48 } 49 else if(eTapDirection == eTapStateDown) 50 { 51 newSection = eSectionAnvilInventory; 52 xOffset = ANVIL_SCENE_ITEM2_SLOT_DOWN_OFFSET; 53 } 54 else if(eTapDirection == eTapStateLeft) 55 { 56 newSection = eSectionAnvilItem1; 57 } 58 else if(eTapDirection == eTapStateRight) 59 { 60 newSection = eSectionAnvilResult; 61 } 62 break; 63 case eSectionAnvilResult: 64 if(eTapDirection == eTapStateUp) 65 { 66 newSection = eSectionAnvilName; 67 } 68 else if(eTapDirection == eTapStateDown) 69 { 70 newSection = eSectionAnvilInventory; 71 xOffset = ANVIL_SCENE_RESULT_SLOT_DOWN_OFFSET; 72 } 73 else if(eTapDirection == eTapStateLeft) 74 { 75 newSection = eSectionAnvilItem2; 76 } 77 else if(eTapDirection == eTapStateRight) 78 { 79 newSection = eSectionAnvilItem1; 80 } 81 break; 82 case eSectionAnvilName: 83 if(eTapDirection == eTapStateUp) 84 { 85 newSection = eSectionAnvilUsing; 86 xOffset = ANVIL_SCENE_ITEM2_SLOT_UP_OFFSET; 87 } 88 else if(eTapDirection == eTapStateDown) 89 { 90 newSection = eSectionAnvilItem2; 91 } 92 break; 93 case eSectionAnvilInventory: 94 if(eTapDirection == eTapStateDown) 95 { 96 newSection = eSectionAnvilUsing; 97 } 98 else if(eTapDirection == eTapStateUp) 99 { 100 if( *piTargetX <= ANVIL_SCENE_ITEM1_SLOT_UP_OFFSET) 101 { 102 newSection = eSectionAnvilItem1; 103 } 104 else if( *piTargetX <= ANVIL_SCENE_ITEM2_SLOT_UP_OFFSET) 105 { 106 newSection = eSectionAnvilItem2; 107 } 108 else if( *piTargetX >= ANVIL_SCENE_RESULT_SLOT_UP_OFFSET) 109 { 110 newSection = eSectionAnvilResult; 111 } 112 } 113 break; 114 case eSectionAnvilUsing: 115 if(eTapDirection == eTapStateUp) 116 { 117 newSection = eSectionAnvilInventory; 118 } 119 else if(eTapDirection == eTapStateDown) 120 { 121 if( *piTargetX <= ANVIL_SCENE_ITEM1_SLOT_UP_OFFSET) 122 { 123 newSection = eSectionAnvilItem1; 124 } 125 else if( *piTargetX <= ANVIL_SCENE_ITEM2_SLOT_UP_OFFSET) 126 { 127 newSection = eSectionAnvilName; 128 } 129 else if( *piTargetX >= ANVIL_SCENE_RESULT_SLOT_UP_OFFSET) 130 { 131 newSection = eSectionAnvilName; 132 } 133 } 134 break; 135 default: 136 assert( false ); 137 break; 138 } 139 140 updateSlotPosition(eSection, newSection, eTapDirection, piTargetX, piTargetY, xOffset); 141 142 return newSection; 143} 144 145int IUIScene_AnvilMenu::getSectionStartOffset(ESceneSection eSection) 146{ 147 int offset = 0; 148 switch( eSection ) 149 { 150 case eSectionAnvilItem1: 151 offset = MerchantMenu::PAYMENT1_SLOT; 152 break; 153 case eSectionAnvilItem2: 154 offset = MerchantMenu::PAYMENT2_SLOT; 155 break; 156 case eSectionAnvilResult: 157 offset = MerchantMenu::RESULT_SLOT; 158 break; 159 case eSectionAnvilInventory: 160 offset = MerchantMenu::INV_SLOT_START; 161 break; 162 case eSectionAnvilUsing: 163 offset = MerchantMenu::USE_ROW_SLOT_START; 164 break; 165 default: 166 assert( false ); 167 break; 168 } 169 return offset; 170} 171 172void IUIScene_AnvilMenu::handleOtherClicked(int iPad, ESceneSection eSection, int buttonNum, bool quickKey) 173{ 174 switch(eSection) 175 { 176 case eSectionAnvilName: 177 handleEditNamePressed(); 178 break; 179 }; 180} 181 182bool IUIScene_AnvilMenu::IsSectionSlotList( ESceneSection eSection ) 183{ 184 switch( eSection ) 185 { 186 case eSectionAnvilUsing: 187 case eSectionAnvilInventory: 188 case eSectionAnvilItem1: 189 case eSectionAnvilItem2: 190 case eSectionAnvilResult: 191 return true; 192 } 193 return false; 194} 195 196void IUIScene_AnvilMenu::handleTick() 197{ 198 Minecraft *pMinecraft = Minecraft::GetInstance(); 199 bool canAfford = true; 200 wstring m_costString = L""; 201 202 if(m_repairMenu->cost > 0) 203 { 204 if(m_repairMenu->cost >= 40 && !pMinecraft->localplayers[getPad()]->abilities.instabuild) 205 { 206 m_costString = app.GetString(IDS_REPAIR_EXPENSIVE); 207 canAfford = false; 208 } 209 else if(!m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->hasItem()) 210 { 211 // Do nothing 212 } 213 else 214 { 215 LPCWSTR costString = app.GetString(IDS_REPAIR_COST); 216 wchar_t temp[256]; 217 swprintf(temp, 256, costString, m_repairMenu->cost); 218 m_costString = temp; 219 if(!m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->mayPickup(dynamic_pointer_cast<Player>(m_inventory->player->shared_from_this()))) 220 { 221 canAfford = false; 222 } 223 } 224 } 225 setCostLabel(m_costString, canAfford); 226 227 bool crossVisible = (m_repairMenu->getSlot(AnvilMenu::INPUT_SLOT)->hasItem() || m_repairMenu->getSlot(AnvilMenu::ADDITIONAL_SLOT)->hasItem()) && !m_repairMenu->getSlot(AnvilMenu::RESULT_SLOT)->hasItem(); 228 showCross(crossVisible); 229} 230 231void IUIScene_AnvilMenu::updateItemName() 232{ 233 Slot *slot = m_repairMenu->getSlot(AnvilMenu::INPUT_SLOT); 234 if (slot != NULL && slot->hasItem()) 235 { 236 if (!slot->getItem()->hasCustomHoverName() && m_itemName.compare(slot->getItem()->getHoverName())==0) 237 { 238 m_itemName = L""; 239 } 240 } 241 242 m_repairMenu->setItemName(m_itemName); 243 244 // Convert to byteArray 245 ByteArrayOutputStream baos; 246 DataOutputStream dos(&baos); 247 dos.writeUTF(m_itemName); 248 Minecraft::GetInstance()->localplayers[getPad()]->connection->send(shared_ptr<CustomPayloadPacket>(new CustomPayloadPacket(CustomPayloadPacket::SET_ITEM_NAME_PACKET, baos.toByteArray()))); 249} 250 251void IUIScene_AnvilMenu::refreshContainer(AbstractContainerMenu *container, vector<shared_ptr<ItemInstance> > *items) 252{ 253 slotChanged(container, AnvilMenu::INPUT_SLOT, container->getSlot(0)->getItem()); 254} 255 256void IUIScene_AnvilMenu::slotChanged(AbstractContainerMenu *container, int slotIndex, shared_ptr<ItemInstance> item) 257{ 258 if (slotIndex == AnvilMenu::INPUT_SLOT) 259 { 260 m_itemName = item == NULL ? L"" : item->getHoverName(); 261 setEditNameValue(m_itemName); 262 setEditNameEditable(item != NULL); 263 if (item != NULL) 264 { 265 updateItemName(); 266 } 267 } 268} 269 270void IUIScene_AnvilMenu::setContainerData(AbstractContainerMenu *container, int id, int value) 271{ 272}