/obj/machinery/mineral/bluespace_miner name = "bluespace mining machine" desc = "A machine that uses the magic of Bluespace to slowly generate materials and add them to a linked ore silo." icon = 'sandcode/icons/obj/machines/mining_machines.dmi' icon_state = "bsminer" density = TRUE circuit = /obj/item/circuitboard/machine/bluespace_miner layer = BELOW_OBJ_LAYER var/list/ore_rates = list(/datum/material/iron = 0.3, /datum/material/glass = 0.3, /datum/material/plasma = 0.1, /datum/material/silver = 0.1, /datum/material/gold = 0.05, /datum/material/titanium = 0.05, /datum/material/uranium = 0.05, /datum/material/diamond = 0.02) var/datum/component/remote_materials/materials /obj/machinery/mineral/bluespace_miner/Initialize(mapload) . = ..() materials = AddComponent(/datum/component/remote_materials, "bsm", mapload) /obj/machinery/mineral/bluespace_miner/Destroy() materials = null return ..() /obj/machinery/mineral/bluespace_miner/multitool_act(mob/living/user, obj/item/multitool/M) if(istype(M)) if(!M.buffer || !istype(M.buffer, /obj/machinery/ore_silo)) to_chat(user, "You need to multitool the ore silo first.") return FALSE /obj/machinery/mineral/bluespace_miner/examine(mob/user) . = ..() if(!materials?.silo) . += "No ore silo connected. Use a multi-tool to link an ore silo to this machine." else if(materials?.on_hold()) . += "Ore silo access is on hold, please contact the quartermaster." /obj/machinery/mineral/bluespace_miner/process() update_icon_state() if(!materials?.silo || materials?.on_hold()) return var/datum/component/material_container/mat_container = materials.mat_container if(!mat_container || panel_open || !powered()) return var/datum/material/ore = pick(ore_rates) mat_container.bsm_insert((ore_rates[ore] * 1000), ore) /datum/component/material_container/proc/bsm_insert(amt, var/datum/material/mat) if(!istype(mat)) mat = SSmaterials.GetMaterialRef(mat) if(amt > 0 && has_space(amt)) var/total_amount_saved = total_amount if(mat) materials[mat] += amt total_amount += amt else for(var/i in materials) materials[i] += amt total_amount += amt return (total_amount - total_amount_saved) return FALSE /obj/machinery/mineral/bluespace_miner/update_icon_state() if(!powered()) if(!panel_open) icon_state = "bsminer-unpowered" else icon_state = "bsminer-unpowered-maintenance" else if(!panel_open) icon_state = "bsminer" else icon_state = "bsminer-maintenance" /obj/machinery/mineral/bluespace_miner/crowbar_act(mob/living/user, obj/item/I) . = ..() if(default_deconstruction_crowbar(I, FALSE)) return TRUE /obj/machinery/mineral/bluespace_miner/screwdriver_act(mob/living/user, obj/item/screwdriver/I) . = TRUE if(..()) return if(!state_open) if(powered()) if(default_deconstruction_screwdriver(user, "bsminer-maintenance", "bsminer", I)) return TRUE else if(!powered()) if(default_deconstruction_screwdriver(user, "bsminer-unpowered-maintenance", "bsminer-unpowered", I)) return TRUE return FALSE