diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 905966009dd..4737c9b89f4 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -423,6 +423,13 @@ emp_act
if(istype(AM,/obj/))
var/obj/O = AM
+ if(stat != DEAD && istype(O,/obj/item) && trash_catching && vore_selected) //Ported from chompstation
+ var/obj/item/I = O
+ if(adminbus_trash || is_type_in_list(I,edible_trash) && I.trash_eatable && !is_type_in_list(I,item_vore_blacklist))
+ visible_message("[I] is thrown directly into [src]'s [lowertext(vore_selected.name)]!")
+ I.throwing = 0
+ I.forceMove(vore_selected)
+ return
if(in_throw_mode && speed <= THROWFORCE_SPEED_DIVISOR) //empty active hand and we're in throw mode
if(canmove && !restrained())
if(isturf(O.loc))
diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
index 695a6dfd199..9cc1c53f2ea 100644
--- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
+++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm
@@ -199,6 +199,7 @@
/datum/trait/neutral/trashcan/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..()
H.verbs |= /mob/living/proc/eat_trash
+ H.verbs |= /mob/living/proc/toggle_trash_catching //Ported from chompstation
/datum/trait/neutral/gem_eater
name = "Expensive Taste"
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index a686d4501ee..1429a172a30 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -257,6 +257,13 @@
/mob/living/hitby(atom/movable/AM as mob|obj,var/speed = THROWFORCE_SPEED_DIVISOR)//Standardization and logging -Sieve
if(istype(AM,/obj/))
var/obj/O = AM
+ if(stat != DEAD && istype(O,/obj/item) && trash_catching && vore_selected) //ported from chompstation
+ var/obj/item/I = O
+ if(adminbus_trash || is_type_in_list(I,edible_trash) && I.trash_eatable && !is_type_in_list(I,item_vore_blacklist))
+ visible_message("[I] is thrown directly into [src]'s [lowertext(vore_selected.name)]!")
+ I.throwing = 0
+ I.forceMove(vore_selected)
+ return
var/dtype = O.damtype
var/throw_damage = O.throwforce*(speed/THROWFORCE_SPEED_DIVISOR)
diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm
index b9593edb636..d8272c486f9 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/code/modules/vore/eating/living_vr.dm
@@ -33,6 +33,7 @@
'sound/effects/mob_effects/xenochimera/regen_3.ogg',
'sound/effects/mob_effects/xenochimera/regen_5.ogg'
)
+ var/trash_catching = FALSE //Toggle for trash throw vore from chompstation
//
// Hook for generic creation of stuff on new creatures
@@ -867,6 +868,13 @@
to_chat(src, "This item is not appropriate for ethical consumption.")
return
+/mob/living/proc/toggle_trash_catching() //Ported from chompstation
+ set name = "Toggle Trash Catching"
+ set category = "Abilities"
+ set desc = "Toggle Trash Eater throw vore abilities."
+ trash_catching = !trash_catching
+ to_chat(src, "Trash catching [trash_catching ? "enabled" : "disabled"].")
+
/mob/living/proc/eat_minerals() //Actual eating abstracted so the user isn't given a prompt due to an argument in this verb.
set name = "Eat Minerals"
set category = "Abilities"