diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index c6206294e7b..1a9586b7449 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -440,6 +440,18 @@
user << "You wet [O] in [src]."
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
+ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
+ var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = O
+ if(M.wrapped)
+ user << "You need to unwrap [src] first!"
+ return
+ else
+ user << "You place [src] under a stream of water..."
+ user.drop_item()
+ M.loc = get_turf(src)
+ M.Expand()
+ return
+
var/obj/item/I = O
if(!I || !istype(I))
return
@@ -456,7 +468,6 @@
user.visible_message("[user] washes [I] using [src].", \
"You wash [I] using [src].")
-
/obj/structure/sink/kitchen
name = "kitchen sink"
icon_state = "sink_alt"
diff --git a/code/modules/food&drinks/food/snacks_meat.dm b/code/modules/food&drinks/food/snacks_meat.dm
index 621bc15d0b6..5000e581448 100644
--- a/code/modules/food&drinks/food/snacks_meat.dm
+++ b/code/modules/food&drinks/food/snacks_meat.dm
@@ -133,25 +133,6 @@
list_reagents = list("nutriment" = 2)
filling_color = "#CD853F"
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user,proximity)
- if(!proximity) return
- if(istype(O,/obj/structure/sink))
- if (wrapped)
- user << "You need to unwrap [src] first!"
- return
- else
- user << "You place [src] under a stream of water..."
- user.drop_item()
- loc = get_turf(O)
- return Expand()
- if(istype(O, /obj/machinery/computer/camera_advanced/xenobio))
- var/obj/machinery/computer/camera_advanced/xenobio/X = O
- X.monkeys++
- user << "You feed [src] to the [X]. It now has [X.monkeys] monkey cubes stored."
- qdel(src)
- return
- ..()
-
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user)
if(wrapped)
Unwrap(user)
diff --git a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm
index ebf6296f446..47a8d236b6f 100644
--- a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm
+++ b/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm
@@ -58,29 +58,40 @@
var/grabbed = G.affecting
if(ismonkey(grabbed))
var/mob/living/carbon/monkey/target = grabbed
- if(target.stat == 0)
- user << "The monkey is struggling far too much to put it in the recycler."
- return
- if(target.buckled || target.buckled_mobs.len)
- user << "The monkey is attached to something."
- return
- if(!user.drop_item())
- return
- qdel(target)
- user << "You stuff the monkey into the machine."
- playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1)
- var/offset = prob(50) ? -2 : 2
- animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking
- use_power(500)
- grinded++
- sleep(50)
- pixel_x = initial(pixel_x) //return to its spot after shaking
- user << "The machine now has [grinded] monkey\s worth of material stored."
-
+ stuff_monkey_in(target, user)
+ user.drop_item()
+ return
else
user << "The machine only accepts monkeys!"
return
+/obj/machinery/monkey_recycler/MouseDrop_T(mob/living/target, mob/living/user)
+ if(!istype(target))
+ return
+ if(ismonkey(target))
+ stuff_monkey_in(target, user)
+
+/obj/machinery/monkey_recycler/proc/stuff_monkey_in(mob/living/carbon/monkey/target, mob/living/user)
+ if(!istype(target))
+ return
+ if(target.stat == 0)
+ user << "The monkey is struggling far too much to put it in the recycler."
+ return
+ if(target.buckled || target.buckled_mobs.len)
+ user << "The monkey is attached to something."
+ return
+ qdel(target)
+ user << "You stuff the monkey into the machine."
+ playsound(src.loc, 'sound/machines/juicer.ogg', 50, 1)
+ var/offset = prob(50) ? -2 : 2
+ animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 200) //start shaking
+ use_power(500)
+ grinded++
+ sleep(50)
+ pixel_x = initial(pixel_x) //return to its spot after shaking
+ user << "The machine now has [grinded] monkey\s worth of material stored."
+
+
/obj/machinery/monkey_recycler/attack_hand(mob/user)
if (src.stat != 0) //NOPOWER etc
return
diff --git a/code/modules/recycling/disposal-unit.dm b/code/modules/recycling/disposal-unit.dm
index fb75418c3c2..d71557e4518 100644
--- a/code/modules/recycling/disposal-unit.dm
+++ b/code/modules/recycling/disposal-unit.dm
@@ -306,7 +306,7 @@
update()
return
- if(!user.drop_item())
+ if(!user.drop_item() || I.flags & ABSTRACT) // Dunno why this wasn't here before?
return
I.loc = src
diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm
index dbc201fab83..4d85e3c9d5c 100644
--- a/code/modules/research/xenobiology/xenobio_camera.dm
+++ b/code/modules/research/xenobiology/xenobio_camera.dm
@@ -62,6 +62,15 @@
return
return ..()
+/obj/machinery/computer/camera_advanced/xenobio/attackby(obj/item/O, mob/user, params)
+ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
+ monkeys++
+ user << "You feed [O] to the [src]. It now has [monkeys] monkey cubes stored."
+ user.drop_item()
+ qdel(O)
+ return
+
+
/datum/action/innate/camera_off/xenobio/Activate()
if(!target || !ishuman(target))
return