summaryrefslogtreecommitdiff
path: root/src/inventorymanager.cpp
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2012-01-13 12:35:55 +0100
committerKahrl <kahrl@gmx.net>2012-01-13 12:35:55 +0100
commitc920df748b01f6ecbd98adaf07f6d92c64a7213c (patch)
treed4a7cd5a784c566d90f35148f8cf0d4f4a9089bf /src/inventorymanager.cpp
parenta58d7255698f9a5e3e13f9cb0b8500988d12dd10 (diff)
downloadminetest-c920df748b01f6ecbd98adaf07f6d92c64a7213c.tar.gz
minetest-c920df748b01f6ecbd98adaf07f6d92c64a7213c.tar.bz2
minetest-c920df748b01f6ecbd98adaf07f6d92c64a7213c.zip
Inventory menu changes: Tooltips; dragging; drop from menu. Lag is a bit annoying (even in single player).
Diffstat (limited to 'src/inventorymanager.cpp')
-rw-r--r--src/inventorymanager.cpp30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp
index 0149fd9ab..eeb293cb1 100644
--- a/src/inventorymanager.cpp
+++ b/src/inventorymanager.cpp
@@ -302,18 +302,28 @@ void IDropAction::apply(InventoryManager *mgr, ServerActiveObject *player)
return;
}
- /*
- Drop the item
- */
- ItemStack item = list_from->getItem(from_i);
- if(scriptapi_item_on_drop(player->getEnv()->getLua(), item, player,
+ // Take item from source list
+ ItemStack item1;
+ if(count == 0)
+ item1 = list_from->changeItem(from_i, ItemStack());
+ else
+ item1 = list_from->takeItem(from_i, count);
+
+ // Drop the item and apply the returned ItemStack
+ ItemStack item2 = item1;
+ if(scriptapi_item_on_drop(player->getEnv()->getLua(), item2, player,
player->getBasePosition() + v3f(0,1,0)))
{
- // Apply returned ItemStack
- if(g_settings->getBool("creative_mode") == false
- || from_inv.type != InventoryLocation::PLAYER)
- list_from->changeItem(from_i, item);
- mgr->setInventoryModified(from_inv);
+ if(g_settings->getBool("creative_mode") == true
+ && from_inv.type == InventoryLocation::PLAYER)
+ item2 = item1; // creative mode
+
+ list_from->addItem(from_i, item2);
+
+ // Unless we have put the same amount back as we took in the first place,
+ // set inventory modified flag
+ if(item2.count != item1.count)
+ mgr->setInventoryModified(from_inv);
}
infostream<<"IDropAction::apply(): dropped "