Compare commits

...

2 Commits

2 changed files with 8 additions and 6 deletions

View File

@ -108,6 +108,7 @@ local function player_shoot_arrow(itemstack, player, power, damage, is_critical)
else else
arrow_itemstring = "mcl_bows:arrow" arrow_itemstring = "mcl_bows:arrow"
end end
infinity_used = true
else else
if not arrow_stack then if not arrow_stack then
return false return false

View File

@ -298,14 +298,15 @@ local function stuck_on_step(self, dtime, entity_def, projectile_def)
if self._in_player then return true end if self._in_player then return true end
-- Pickup arrow if player is nearby (not in Creative Mode) -- Pickup arrow if player is nearby (not in Creative Mode)
if not self._collectable or self._removed then return end if self._removed then return end
local objects = minetest.get_objects_inside_radius(pos, 1) local objects = minetest.get_objects_inside_radius(pos, 1)
for i = 1,#objects do for i = 1,#objects do
local obj = objects[i] local obj = objects[i]
if obj:is_player() then if obj:is_player() then
local player_name = obj:get_player_name() local player_name = obj:get_player_name()
if not minetest.is_creative_enabled(player_name) then local creative = minetest.is_creative_enabled(player_name)
if self._collectable and not creative then
local arrow_item = self._itemstring or self._arrow_item local arrow_item = self._itemstring or self._arrow_item
if arrow_item and minetest.registered_items[arrow_item] and obj:get_inventory():room_for_item("main", arrow_item) then if arrow_item and minetest.registered_items[arrow_item] and obj:get_inventory():room_for_item("main", arrow_item) then
obj:get_inventory():add_item("main", arrow_item) obj:get_inventory():add_item("main", arrow_item)
@ -450,18 +451,18 @@ function mod.collides_with_solids(self, dtime, entity_def, projectile_def)
end end
local function handle_entity_collision(self, entity_def, projectile_def, object) local function handle_entity_collision(self, entity_def, projectile_def, object)
local pos = self.object:get_pos() -- Arrows stuck in players can't collide with entities
local dir = vector.normalize(self.object:get_velocity()) if self._in_player then return end
-- Check if this is allowed -- Check if this is allowed
local allow_punching = projectile_def.allow_punching or true local allow_punching = projectile_def.allow_punching or true
if type(allow_punching) == "function" then if type(allow_punching) == "function" then
allow_punching = allow_punching(self, entity_def, projectile_def, object) allow_punching = allow_punching(self, entity_def, projectile_def, object)
end end
if self._in_player then allow_punching = false end
if not allow_punching then return end if not allow_punching then return end
local pos = self.object:get_pos()
local dir = vector.normalize(self.object:get_velocity())
local object_lua = object:get_luaentity() local object_lua = object:get_luaentity()
-- Normally objects should be removed on collision with entities -- Normally objects should be removed on collision with entities