anchor.diff:  	insert_materials(I)
   	return material_amount
   
  -/datum/material_container/proc/insert_materials(obj/item/I) //for internal usage only
  -	var/datum/material/M
  -	for(var/MAT in materials)
  -		M = materials[MAT]
  -		M.amount += I.materials[MAT]
  -		total_amount += I.materials[MAT]
  +/datum/material_container/proc/insert_materials(obj/item/I, multiplier = 1) //for internal usage only
  +	var/datum/material/M
  +	for(var/MAT in materials)
  +		M = materials[MAT]
  +		M.amount += I.materials[MAT] * multiplier
  +		total_amount += I.materials[MAT] * multiplier
   
   //For consuming material
   //mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200)
  
positive.code: /datum/material_container/proc/retrieve(sheet_amt, datum/material/M)
  	if(sheet_amt > 0 && M.amount >= (sheet_amt * MINERAL_MATERIAL_AMOUNT))
  		var/count = 0
  		var/obj/item/stack/sheet/S
  
  		while(sheet_amt > MAX_STACK_SIZE)
  			S = new M.sheet_type(get_turf(owner))
  			S.amount = MAX_STACK_SIZE
  			count += MAX_STACK_SIZE
  			M.amount -= MAX_STACK_SIZE * MINERAL_MATERIAL_AMOUNT
  			total_amount -= MAX_STACK_SIZE * MINERAL_MATERIAL_AMOUNT
  			sheet_amt -= MAX_STACK_SIZE
  
  		if(round(M.amount / MINERAL_MATERIAL_AMOUNT))
  			S = new M.sheet_type(get_turf(owner))
  			S.amount = sheet_amt
  			count += sheet_amt
  			M.amount -= sheet_amt * MINERAL_MATERIAL_AMOUNT
  			total_amount -= sheet_amt * MINERAL_MATERIAL_AMOUNT
  		return count
  	return 0
  
  
negative.code: 	if(!amt)
  		return 0
  
  	insert_materials(S,amt)
  	S.use(amt)
  	return amt
  
  