Check for the presence of a throwing_entity field in item definition table

This commit is contained in:
upsilon 2017-06-20 16:39:03 +02:00
parent a45399bfea
commit 552b958dba
No known key found for this signature in database
GPG Key ID: A80DAE1F266E1C3C
2 changed files with 10 additions and 0 deletions

View File

@ -98,3 +98,7 @@ throwing.register_arrow("arrow", {
end
})
```
If the item to throw is an arrow registered using `minetest.register_arrow`, the entity used will be the registered entity.
Otherwise, if its definition contains a `throwing_entity` field, this field will be used as the entity name if it is a string, otherwise it will be called as a function(pos, player) that has to make the object to spawn and to return the corresponding ObjectRef.
If the item is neither an arrow nor has any `throwing_entity` field, the corresponding `__builtin:item` will be used.

View File

@ -27,6 +27,12 @@ local function shoot_arrow(itemstack, player)
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