anchor.diff:  			}
   		});
   
  +		if (missingItem != null) {
  +			return "you ran out of ${missingItem}s";
  +		}
  +
   		// Wait for it to make it, then give the item
   		new Timer(new Duration(seconds: recipe.time), () async {
   			// Add the item after we finish "making" one
  -			await InventoryV2.addItemToUser(email, items[recipe.output].getMap(), recipe.output_amt);
  +			await InventoryV2.addItemToUser(
  +				email, items[recipe.output].getMap(), recipe.output_amt);
  +
   			// Award iMG
   			await trySetMetabolics(email, imgMin: recipe.img);
   
  -			//send possible quest event
  +			// Send possible quest event
   			messageBus.publish(new RequirementProgress('makeRecipe_${recipe.output}',email));
   
   			// Count stat for achievements
  
positive.code: 		}
  
  		// Take all of the items
  		Future.forEach(recipe.input.keys, (String itemType) async {
  			int qty = recipe.input[itemType];
  			int got = (await InventoryV2.takeAnyItemsFromUser(email, itemType, qty));
  			if (got != qty) {
  				// If they didn't have a required item, they're not making a smoothie
  
negative.code: 			recipe = rList.first;
  		}
  
  		if (items[recipe.tool].durability != null) {
  			//take away tool durability
  			bool durabilitySuccess = await InventoryV2.decreaseDurability(email, recipe.tool);
  			if (!durabilitySuccess) {
  				return "it's missing";
  			}
  		}
  