diff --git a/README.md b/README.md index 5797e28..0ddff7a 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ Definition: definition table, containing: If present, allow_shot is ignored. Default is false. * cooldown: bow cooldown. Default is setting throwing.bow_cooldown + * function spawn_arrow_entity(position, arrow, player): defaults to throwing.spawn_arrow_entity ]] -- Example: diff --git a/init.lua b/init.lua index 7aba352..2870840 100644 --- a/init.lua +++ b/init.lua @@ -18,6 +18,20 @@ function throwing.is_arrow(itemstack) return false end +function throwing.spawn_arrow_entity(pos, arrow, player) + if throwing.is_arrow(arrow) then + return minetest.add_entity(pos, arrow.."_entity") + elseif minetest.registered_items[arrow].throwing_entity then + if type(minetest.registered_items[arrow].throwing_entity) == "string" then + return minetest.add_entity(pos, minetest.registered_items[arrow].throwing_entity) + else -- Type is a function + return minetest.registered_items[arrow].throwing_entity(pos, player) + end + else + obj = minetest.add_entity(pos, "__builtin:item", arrow) + end +end + local function shoot_arrow(itemstack, player, throw_itself) local inventory = player:get_inventory() local arrow @@ -29,18 +43,7 @@ local function shoot_arrow(itemstack, player, throw_itself) local playerpos = player:getpos() local pos = {x=playerpos.x,y=playerpos.y+1.5,z=playerpos.z} - local obj - if throwing.is_arrow(arrow) then - obj = minetest.add_entity(pos, arrow.."_entity") - elseif minetest.registered_items[arrow].throwing_entity then - if type(minetest.registered_items[arrow].throwing_entity) == "string" then - obj = minetest.add_entity(pos, minetest.registered_items[arrow].throwing_entity) - else -- Type is a function - obj = minetest.registered_items[arrow].throwing_entity(pos, player) - end - else - obj = minetest.add_entity(pos, "__builtin:item", arrow) - end + local obj = (minetest.registered_items[itemstack:get_name()].spawn_arrow_entity or throwing.spawn_arrow_entity)(pos, arrow, player) local luaentity = obj:get_luaentity() luaentity.player = player:get_player_name()