From bb81e3db60f6479ad6e0dd0848f0e53ffd4134e8 Mon Sep 17 00:00:00 2001
From: Milan <tchncs@vivaldi.net>
Date: Sun, 16 Feb 2020 15:26:33 +0100
Subject: [PATCH] merge patch by jackdavidson

---
 arrow.lua | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/arrow.lua b/arrow.lua
index 60ab977..2ae410f 100644
--- a/arrow.lua
+++ b/arrow.lua
@@ -2,9 +2,18 @@ bows.nothing=function(self,target,hp,user,lastpos)
 	return self
 end
 
+bows.is_in_entity=function(self,ob)
+        local collisionbox = ob:get_properties().collisionbox
+        return (collisionbox[1]+ob:get_pos().x <= self.object:get_pos().x and
+        collisionbox[2]+ob:get_pos().y <= self.object:get_pos().y and
+        collisionbox[3]+ob:get_pos().z <= self.object:get_pos().z and
+        collisionbox[4]+ob:get_pos().x >= self.object:get_pos().x and
+        collisionbox[5]+ob:get_pos().y >= self.object:get_pos().y and
+        collisionbox[6]+ob:get_pos().z >= self.object:get_pos().z)
+end
+
 bows.on_hit_object=function(self,target,hp,user,lastpos)
-	target:set_hp(target:get_hp()-hp)
-	target:punch(user,1, "default:sword_wood", nil)
+	target:punch(user, 2,{full_punch_interval=1.0,damage_groups={fleshy=hp}}, "default:sword_wood", nil)
 	if target:get_hp()>0 then
 		local pos=self.object:getpos()
 		local opos=target:getpos()
@@ -121,8 +130,13 @@ minetest.register_entity("bows:arrow",{
 		self.x=pos.x
 		self.y=pos.y
 		self.z=pos.z
-		for i, ob in pairs(minetest.get_objects_inside_radius(pos, 1)) do
-			if ob and ((bows.pvp and ob:is_player() and ob:get_player_name()~=self.user:get_player_name()) or (ob:get_luaentity() and ob:get_luaentity().physical and ob:get_luaentity().bow_arrow==nil and ob:get_luaentity().name~="__builtin:item" )) then
+		for i, ob in pairs(minetest.get_objects_inside_radius(pos, 3)) do
+			if ob and ((bows.pvp and ob:is_player() and
+                    ob:get_player_name()~=self.user:get_player_name()) or
+                    (ob:get_luaentity() and ob:get_luaentity().physical and
+                    ob:get_luaentity().bow_arrow==nil and
+                    ob:get_luaentity().name~="__builtin:item")) and     
+                    bows.is_in_entity(self,ob) then
 				self.object:setvelocity({x=0, y=0, z=0})
 				self.object:setacceleration({x=0, y=0, z=0})
 				self.stuck=true
-- 
GitLab