From feb36acf7a4c0608461eaddf0c671244e29e3d1d Mon Sep 17 00:00:00 2001 From: Zeg9 Date: Sun, 7 Apr 2013 14:11:59 +0200 Subject: Fix crash, add crafting recipe and use to_string() so tools can't be reloaded by putting them in a frame. --- itemframes/init.lua | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/itemframes/init.lua b/itemframes/init.lua index 933ddad..3ecc5a6 100644 --- a/itemframes/init.lua +++ b/itemframes/init.lua @@ -15,9 +15,11 @@ facedir[3] = {x=-1,y=0,z=0} -- local remove_item = function(pos) objs = minetest.env:get_objects_inside_radius(pos, .5) - for _, obj in ipairs(objs) do - if obj:get_luaentity().name == "itemframes:item" then - obj:remove() + if objs then + for _, obj in ipairs(objs) do + if obj and obj:get_luaentity() and obj:get_luaentity().name == "itemframes:item" then + obj:remove() + end end end end @@ -31,7 +33,7 @@ local update_item = function(pos, node) pos.y = pos.y + posad.y*7/16 pos.z = pos.z + posad.z*7/16 local e = minetest.env:add_entity(pos,"itemframes:item") - local name = meta:get_string("item") + local name = ItemStack(meta:get_string("item")):get_name() e:set_properties({textures={name}}) local yaw = math.pi*2 - node.param2 * math.pi/2 e:setyaw(yaw) @@ -69,8 +71,8 @@ minetest.register_node("itemframes:frame",{ local meta = minetest.env:get_meta(pos) if clicker:get_player_name() == meta:get_string("owner") then drop_item(pos,clicker) - meta:set_string("item",itemstack:get_name()) - itemstack:take_item() + local s = itemstack:take_item() + meta:set_string("item",s:to_string()) update_item(pos,node) end return itemstack @@ -98,3 +100,11 @@ minetest.register_abm({ end, }) -- This allows items to reappear in frames when chunks are unloaded +minetest.register_craft({ + output = 'itemframes:frame', + recipe = { + {'default:stick', 'default:stick', 'default:stick'}, + {'default:stick', 'default:paper', 'default:stick'}, + {'default:stick', 'default:stick', 'default:stick'}, + } +}) -- cgit v1.2.3