animalia/craftitems.lua
2020-11-11 23:16:50 -08:00

60 lines
No EOL
2.2 KiB
Lua

----------------
-- Craftitems --
----------------
---- Ver 0.1 ---
minetest.register_craftitem("better_fauna:net", {
description = "Animal Net",
inventory_image = "better_fauna_net.png",
on_secondary_use = function(itemstack, placer, pointed_thing)
if pointed_thing.type == "object" then
if pointed_thing.ref:is_player() then
return
end
local ent = pointed_thing.ref:get_luaentity()
if not ent.name:match("^better_fauna:")
or not ent.catch_with_net then
return
end
local ent_name = mob_core.get_name_proper(ent.name)
local meta = itemstack:get_meta()
if not meta:get_string("mob")
or meta:get_string("mob") == "" then
meta:set_string("mob", ent.name)
meta:set_string("staticdata", ent:get_staticdata())
local desc = "Animal Net \n" .. minetest.colorize("#a9a9a9", ent_name)
meta:set_string("description", desc)
placer:set_wielded_item(itemstack)
ent.object:remove()
return itemstack
else
minetest.chat_send_player(placer:get_player_name(), "This Net already contains a "..ent_name)
return
end
end
end,
on_place = function(itemstack, placer, pointed_thing)
local pos = pointed_thing.above
if pos then
local under = minetest.get_node(pointed_thing.under)
local node = minetest.registered_nodes[under.name]
if node and node.on_rightclick then
return node.on_rightclick(pointed_thing.under, under, placer, itemstack)
end
if pos
and not minetest.is_protected(pos, placer:get_player_name()) then
local mob = itemstack:get_meta():get_string("mob")
local staticdata = itemstack:get_meta():get_string("staticdata")
if mob ~= "" then
pos.y = pos.y + math.abs(minetest.registered_entities[mob].collisionbox[2])
minetest.add_entity(pos, mob, staticdata)
itemstack:get_meta():set_string("mob", nil)
itemstack:get_meta():set_string("staticdata", nil)
itemstack:get_meta():set_string("description", "Animal Net")
end
end
end
return itemstack
end
})