diff --git a/src/inventorymanager.cpp b/src/inventorymanager.cpp index 46f744f8b..b6740f1ba 100644 --- a/src/inventorymanager.cpp +++ b/src/inventorymanager.cpp @@ -202,6 +202,14 @@ void IMoveAction::apply(InventoryManager *mgr, ServerActiveObject *player, IGame // Handle node metadata move if(from_inv.type == InventoryLocation::NODEMETA && + to_inv.type == InventoryLocation::NODEMETA && + from_inv.p != to_inv.p) + { + errorstream<<"Directly moving items between two nodes is " + <<"disallowed."<changeItem(from_i, ItemStack()); + + // Handle node metadata take + if(from_inv.type == InventoryLocation::NODEMETA) + { + lua_State *L = player->getEnv()->getLua(); + int count0 = count; + if(count0 == 0) + count0 = list_from->getItem(from_i).count; + infostream<getDescription()<<" dropping "<takeItem(from_i, count); + { + // Take item from source list + 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;