diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 7216ee0177f..48875c4435a 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -279,6 +279,32 @@
icon = 'icons/obj/nuclearbomb.dmi'
icon_state = "nuclearbomb0"
anchored = TRUE
+ /// If TRUE, prevents the player from inserting the disk again while it is currently exploding.
+ var/exploding = FALSE
+
+/obj/structure/reagent_dispensers/beerkeg/nuke/attackby(obj/item/O, mob/user, params)
+ . = ..()
+ if(exploding)
+ return
+ if(!istype(O, /obj/item/disk/nuclear))
+ return
+ user.visible_message(
+ "[user] inserts [O] into [src] and it begins making a loud beeping noise! Uh-oh!",
+ "You prime [src] with [O] and it begins making a loud beeping noise! Better run!")
+ playsound(src, 'sound/machines/alarm.ogg', 100, FALSE, 0)
+ exploding = TRUE
+ addtimer(CALLBACK(src, PROC_REF(explode)), 13 SECONDS)
+
+/obj/structure/reagent_dispensers/beerkeg/nuke/proc/explode()
+ var/datum/reagents/R = new(100)
+ R.my_atom = src
+ R.add_reagent("beer", 100)
+ var/datum/effect_system/smoke_spread/chem/smoke = new
+ smoke.set_up(R, src, TRUE)
+ playsound(src.loc, 'sound/effects/smoke.ogg', 50, TRUE, -3)
+ smoke.start(3)
+ qdel(R)
+ qdel(src)
/obj/structure/reagent_dispensers/beerkeg/nuke/update_overlays()
. = ..()