diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm
index f5a6e9fac49..35659803c46 100644
--- a/code/game/mecha/mech_fabricator.dm
+++ b/code/game/mecha/mech_fabricator.dm
@@ -37,7 +37,7 @@
/obj/machinery/mecha_part_fabricator/New()
..()
files = new /datum/research(src) //Setup the research data holder.
- materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM))
+ materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE))
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mechfab(null)
B.apply_default_parts(src)
@@ -430,22 +430,13 @@
return 1
if(istype(W, /obj/item/stack/sheet))
- if(panel_open)
- to_chat(user, "You can't load [src] while it's opened!")
- return 1
- if(being_built)
- to_chat(user, "\The [src] is currently processing! Please wait until completion.")
+
+ if(!is_insertion_ready(user))
return 1
var/material_amount = materials.get_item_material_amount(W)
- if(!material_amount)
- to_chat(user, "This object does not contain sufficient amounts of materials to be accepted by [src].")
- return 1
- if(!materials.has_space(material_amount))
- to_chat(user, "\The [src] is full. Please remove some materials from [src] in order to insert more.")
- return 1
- if(!user.temporarilyRemoveItemFromInventory(W))
- to_chat(user, "\The [W] is stuck to you and cannot be placed into [src].")
+
+ if(!try_insert(user, W, material_amount))
return 1
var/inserted = materials.insert_item(W)
@@ -457,7 +448,31 @@
var/mat_overlay = "fab-load-[material2name(W.materials[1])]"
add_overlay(mat_overlay)
sleep(10)
- cut_overlay(mat_overlay) //No matter what the overlay shall still be deleted
+ if(!QDELETED(src))
+ cut_overlay(mat_overlay) //No matter what the overlay shall still be deleted
+
+ updateUsrDialog()
+
+ else if(istype(W, /obj/item/weapon/ore/bluespace_crystal))
+
+ if(!is_insertion_ready(user))
+ return 1
+
+ var/material_amount = materials.get_item_material_amount(W)
+
+ if(!try_insert(user, W, material_amount))
+ return 1
+
+ var/inserted = materials.insert_item(W)
+ if(inserted)
+ to_chat(user, "You add [W] to the [src].")
+ if(W && W.materials.len)
+ qdel(W)
+ var/mat_overlay = "fab-load-bluespace"
+ add_overlay(mat_overlay)
+ sleep(10)
+ if(!QDELETED(src))
+ cut_overlay(mat_overlay)
updateUsrDialog()
@@ -466,3 +481,27 @@
/obj/machinery/mecha_part_fabricator/proc/material2name(ID)
return copytext(ID,2)
+
+/obj/machinery/mecha_part_fabricator/proc/is_insertion_ready(mob/user)
+ if(panel_open)
+ to_chat(user, "You can't load [src] while it's opened!")
+ return FALSE
+ if(being_built)
+ to_chat(user, "\The [src] is currently processing! Please wait until completion.")
+ return FALSE
+
+ return TRUE
+
+
+/obj/machinery/mecha_part_fabricator/proc/try_insert(mob/user, obj/item/I, material_amount)
+ if(!material_amount)
+ to_chat(user, "This object does not contain sufficient amounts of materials to be accepted by [src].")
+ return FALSE
+ if(!materials.has_space(material_amount))
+ to_chat(user, "\The [src] is full. Please remove some materials from [src] in order to insert more.")
+ return FALSE
+ if(!user.temporarilyRemoveItemFromInventory(I))
+ to_chat(user, "\The [I] is stuck to you and cannot be placed into [src].")
+ return FALSE
+
+ return TRUE
\ No newline at end of file
diff --git a/icons/obj/robotics.dmi b/icons/obj/robotics.dmi
index c53e7823cab..d59a4c8f8d2 100644
Binary files a/icons/obj/robotics.dmi and b/icons/obj/robotics.dmi differ