Ensure no item stack is being held before crafting (#4779)
authorLuis Cáceres <lacaceres97@gmail.com>
Wed, 6 Dec 2017 16:32:05 +0000 (16:32 +0000)
committerSmallJoker <SmallJoker@users.noreply.github.com>
Wed, 6 Dec 2017 16:32:05 +0000 (17:32 +0100)
src/gui/guiFormSpecMenu.cpp

index 0691bc5982442ae1d005be36ac172c19eb1d5deb..c83e6aa4965050f5572333ae56af9c2a9bed38e8 100644 (file)
@@ -3668,18 +3668,24 @@ bool GUIFormSpecMenu::OnEvent(const SEvent& event)
                        a->from_i = m_selected_item->i;
                        m_invmgr->inventoryAction(a);
                } else if (craft_amount > 0) {
-                       m_selected_content_guess = ItemStack(); // Clear
-
-                       // Send IAction::Craft
-
                        assert(s.isValid());
-                       assert(inv_s);
-
-                       infostream << "Handing IAction::Craft to manager" << std::endl;
-                       ICraftAction *a = new ICraftAction();
-                       a->count = craft_amount;
-                       a->craft_inv = s.inventoryloc;
-                       m_invmgr->inventoryAction(a);
+                       
+                       // if there are no items selected or the selected item
+                       // belongs to craftresult list, proceed with crafting
+                       if (m_selected_item == NULL ||
+                                       !m_selected_item->isValid() || m_selected_item->listname == "craftresult") {
+                               
+                               m_selected_content_guess = ItemStack(); // Clear
+                               
+                               assert(inv_s);
+
+                               // Send IACTION_CRAFT
+                               infostream << "Handing IACTION_CRAFT to manager" << std::endl;
+                               ICraftAction *a = new ICraftAction();
+                               a->count = craft_amount;
+                               a->craft_inv = s.inventoryloc;
+                               m_invmgr->inventoryAction(a);
+                       }
                }
 
                // If m_selected_amount has been decreased to zero, deselect