anchor.diff:  	main_loop:
   		for(var/A in R.reqs)
   			amt = R.reqs[A]
  -			surroundings = get_environment(user, R.blacklist)
  +			surroundings = get_environment(a, R.blacklist)
   			surroundings -= Deletion
   			if(ispath(A, /datum/reagent))
   				var/datum/reagent/RG = new A
  
positive.code: 		if(contents[requirement_path] < R.chem_catalysts[requirement_path])
  			return FALSE
  
  	return R.check_requirements(user, requirements_list)
  
  /datum/component/personal_crafting/proc/get_environment(mob/user, list/blacklist = null)
  	. = list()
  	for(var/obj/item/I in user.held_items)
  		. += I
  	if(!isturf(user.loc))
  		return
  	var/list/L = block(get_step(user, SOUTHWEST), get_step(user, NORTHEAST))
  	for(var/A in L)
  		var/turf/T = A
  		if(T.Adjacent(user))
  			for(var/B in T)
  				var/atom/movable/AM = B
  				if(AM.flags_1 & HOLOGRAM_1)
  					continue
  				. += AM
  	for(var/slot in list(ITEM_SLOT_RPOCKET, ITEM_SLOT_LPOCKET))
  		. += user.get_item_by_slot(slot)
  	if(blacklist)
  		for(var/obj/B in .)
  			if(blacklist.Find(B.type))
  				. -= B
  
  /datum/component/personal_crafting/proc/get_surroundings(mob/user)
  	. = list()
  	.["tool_behaviour"] = list()
  	.["other"] = list()
  	.["instances"] = list()
  	for(var/obj/item/I in get_environment(user))
  		if(I.flags_1 & HOLOGRAM_1)
  			continue
  		if(.["instances"][I.type])
  
negative.code: 			return FALSE
  	return TRUE
  
  /datum/component/personal_crafting/proc/construct_item(atom/a, datum/crafting_recipe/R)
  	var/list/contents = get_surroundings(a)
  	var/send_feedback = 1
  	if(check_contents(a, R, contents))
  		if(check_tools(a, R, contents))
  			//If we're a mob we'll try a do_after; non mobs will instead instantly construct the item
  			if(ismob(a) && !do_after(a, R.time, target = a))
  				return "."
  			contents = get_surroundings(a)
  			if(!check_contents(a, R, contents))
  				return ", missing component."
  			if(!check_tools(a, R, contents))
  				return ", missing tool."
  			var/list/parts = del_reqs(R, a)
  			var/atom/movable/I = new R.result (get_turf(a.loc))
  			I.CheckParts(parts, R)
  			if(send_feedback)
  				SSblackbox.record_feedback("tally", "object_crafted", 1, I.type)
  			return I //Send the item back to whatever called this proc so it can handle whatever it wants to do with the new item
  		return ", missing tool."
  	return ", missing component."
  
  /*Del reqs works like this:
  
  