anchor.diff:  			var/datum/crafting_recipe/TR = locate(params["recipe"]) in GLOB.crafting_recipes
   			busy = TRUE
   			ui_interact(usr)
  -			var/fail_msg = construct_item(usr, TR)
  -			if(!fail_msg)
  +			var/atom/movable/result = construct_item(usr, TR)
  +			if(!istext(result)) //We made an item and didn't get a fail message
  +				if(ismob(usr)) //In case the user is actually possessing a non mob like a machine
  +					var/mob/m = usr
  +					m.put_in_hands(result)
  +				else
  +					result.forceMove(usr.loc)
   				to_chat(usr, "<span class='notice'>[TR.name] constructed.</span>")
   			else
  -				to_chat(usr, "<span class='warning'>Construction failed[fail_msg]</span>")
  +				to_chat(usr, "<span class='warning'>Construction failed[result]</span>")
   			busy = FALSE
   		if("toggle_recipes")
   			display_craftable_only = !display_craftable_only
  
positive.code: 			return FALSE
  	return TRUE
  
  /datum/component/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R)
  	var/list/contents = get_surroundings(user)
  	var/send_feedback = 1
  	if(check_contents(user, R, contents))
  		if(check_tools(user, R, contents))
  			if(do_after(user, R.time, target = user))
  				contents = get_surroundings(user)
  				if(!check_contents(user, R, contents))
  					return ", missing component."
  				if(!check_tools(user, R, contents))
  					return ", missing tool."
  				var/list/parts = del_reqs(R, user)
  				var/atom/movable/I = new R.result (get_turf(user.loc))
  				I.CheckParts(parts, R)
  				if(isitem(I))
  					user.put_in_hands(I)
  				if(send_feedback)
  					SSblackbox.record_feedback("tally", "object_crafted", 1, I.type)
  				return 0
  			return "."
  		return ", missing tool."
  	return ", missing component."
  
  
  /*Del reqs works like this:
  
  
negative.code: 		if(contents[requirement_path] < R.chem_catalysts[requirement_path])
  			return FALSE
  
  	return R.check_requirements(a, requirements_list)
  
  /datum/component/personal_crafting/proc/get_environment(atom/a, list/blacklist = null, radius_range = 1)
  	. = list()
  
  	if(!isturf(a.loc))
  		return
  
  	for(var/atom/movable/AM in range(radius_range, a))
  		if(AM.flags_1 & HOLOGRAM_1)
  			continue
  		. += AM
  
  /datum/component/personal_crafting/proc/get_surroundings(atom/a)
  	. = list()
  	.["tool_behaviour"] = list()
  	.["other"] = list()
  	.["instances"] = list()
  	for(var/obj/item/I in get_environment(a))
  		if(I.flags_1 & HOLOGRAM_1)
  			continue
  		if(.["instances"][I.type])
  