the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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}