diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index ca424191b0..6dfa4e9c15 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -417,3 +417,6 @@
/mob/living/silicon/has_vision()
return 0 //NOT REAL EYES
+
+/mob/living/silicon/can_feed()
+ return FALSE
\ No newline at end of file
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 7e255be821..23335e0ab8 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -685,3 +685,6 @@ var/global/image/backplane
return
item.screen_loc = screen_place
+
+/mob/proc/can_feed()
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/_reagent_containers.dm b/code/modules/reagents/reagent_containers/_reagent_containers.dm
index 551eb6b65a..5ad6c305fe 100644
--- a/code/modules/reagents/reagent_containers/_reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers/_reagent_containers.dm
@@ -80,53 +80,41 @@
return
/obj/item/weapon/reagent_containers/proc/standard_feed_mob(var/mob/user, var/mob/target) // This goes into attack
- if(!istype(target) || issilicon(target))
- return 0
+ if(!istype(target) || !target.can_feed())
+ return FALSE
if(!reagents || !reagents.total_volume)
to_chat(user, "\The [src] is empty.")
- return 1
+ return TRUE
- if(target == user)
- if(istype(user, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = user
- if(!H.check_has_mouth())
- to_chat(user, "Where do you intend to put \the [src]? You don't have a mouth!")
- return
- var/obj/item/blocked = H.check_mouth_coverage()
- if(blocked)
- to_chat(user, "\The [blocked] is in the way!")
- return
+ if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(!H.check_has_mouth())
+ to_chat(user, "Where do you intend to put \the [src]? [user == target ? "You don't" : "\The [H] doesn't"] have a mouth!")
+ return FALSE
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ to_chat(user, "\The [blocked] is in the way!")
+ return FALSE
- user.setClickCooldown(user.get_attack_speed(src)) //puts a limit on how fast people can eat/drink things
+ user.setClickCooldown(user.get_attack_speed(src)) //puts a limit on how fast people can eat/drink things
+ if(user == target)
self_feed_message(user)
reagents.trans_to_mob(user, issmall(user) ? CEILING(amount_per_transfer_from_this/2, 1) : amount_per_transfer_from_this, CHEM_INGEST)
feed_sound(user)
- return 1
+ return TRUE
+
else
- if(istype(target, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = target
- if(!H.check_has_mouth())
- to_chat(user, "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!")
- return
- var/obj/item/blocked = H.check_mouth_coverage()
- if(blocked)
- to_chat(user, "\The [blocked] is in the way!")
- return
-
other_feed_message_start(user, target)
-
- user.setClickCooldown(user.get_attack_speed(src))
if(!do_mob(user, target))
- return
-
+ return FALSE
other_feed_message_finish(user, target)
var/contained = reagentlist()
add_attack_logs(user,target,"Fed from [src.name] containing [contained]")
reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_INGEST)
feed_sound(user)
- return 1
+ return TRUE
/obj/item/weapon/reagent_containers/proc/standard_pour_into(var/mob/user, var/atom/target) // This goes into afterattack and yes, it's atom-level
if(!target.is_open_container() || !target.reagents)