]> git.lizzy.rs Git - xdecor.git/commitdiff
Item Frame : convert update item ABM to nodetimer
authorJean-Patrick Guerrero <jeanpatrick.guerrero@gmail.com>
Tue, 8 Mar 2016 14:33:09 +0000 (15:33 +0100)
committerJean-Patrick Guerrero <jeanpatrick.guerrero@gmail.com>
Tue, 8 Mar 2016 14:33:09 +0000 (15:33 +0100)
itemframe.lua

index e491fa1451ca90a997a00147fee7964dc06aa994..4f73d22761d98d91ba888e285026025a0bc2875a 100644 (file)
@@ -34,6 +34,9 @@ local function update_item(pos, node)
        local entity = minetest.add_entity(pos, "xdecor:f_item")
        local yaw = math.pi*2 - node.param2 * math.pi/2
        entity:setyaw(yaw)
+
+       local timer = minetest.get_node_timer(pos)
+       timer:start(15.0)
 end
 
 local function drop_item(pos, node)
@@ -44,6 +47,9 @@ local function drop_item(pos, node)
        minetest.add_item(pos, item)
        meta:set_string("item", "")
        remove_item(pos, node)
+
+       local timer = minetest.get_node_timer(pos)
+       timer:stop()
 end
 
 minetest.register_entity("xdecor:f_item", {
@@ -94,6 +100,16 @@ xdecor.register("frame", {
                meta:set_string("owner", name)
                meta:set_string("infotext", "Item Frame (owned by "..name..")")
        end,
+       on_timer = function(pos)
+               local node = minetest.get_node(pos)
+               local meta = minetest.get_meta(pos)
+               local num = #minetest.get_objects_inside_radius(pos, 0.5)
+
+               if num == 0 and meta:get_string("item") ~= "" then
+                       update_item(pos, node)
+               end
+               return true
+       end,
        on_rightclick = function(pos, node, clicker, itemstack)
                local meta = minetest.get_meta(pos)
                local player = clicker:get_player_name()
@@ -101,7 +117,7 @@ xdecor.register("frame", {
                if player ~= owner or not itemstack then return end
 
                drop_item(pos, node)
-               local itemstring = itemstack:take_item():to_string()
+               local itemstring = itemstack:take_item():get_name()
                meta:set_string("item", itemstring)
                update_item(pos, node)
 
@@ -125,12 +141,3 @@ xdecor.register("frame", {
        after_destruct = remove_item
 })
 
-minetest.register_abm({
-       nodenames = {"xdecor:frame"},
-       interval = 15, chance = 1,
-       action = function(pos, node)
-               local num = #minetest.get_objects_inside_radius(pos, 0.5)
-               if num > 0 then return end
-               update_item(pos, node)
-       end
-})