Fix node breaker, use new minetest.swap_node
authorNovatux <nathanael.courant@laposte.net>
Sat, 21 Dec 2013 09:24:55 +0000 (10:24 +0100)
committerNovatux <nathanael.courant@laposte.net>
Sat, 21 Dec 2013 09:24:55 +0000 (10:24 +0100)
deployer.lua
node_breaker.lua

index f5f817129ffd93349584e6cbe68fcf688cb62a49..e67250c7d5c2046bd72807211bda5b2032b1c7a2 100644 (file)
@@ -66,33 +66,29 @@ minetest.register_craft({
        }
 })
 
-local function hacky_swap_node(pos,name)
-    local node=minetest.get_node(pos)
-    local meta=minetest.get_meta(pos)
-    local meta0=meta:to_table()
+local function swap_node(pos, name)
+    local node = minetest.get_node(pos)
     if node.name == name then
         return
     end
-    node.name=name
-    minetest.add_node(pos, node)
-    local meta=minetest.get_meta(pos)
-    meta:from_table(meta0)
+    node.name = name
+    minetest.swap_node(pos, node)
 end
 
 local function delay(x)
        return (function() return x end)
 end
 
-local deployer_on = function(pos, node)
+local function deployer_on(pos, node)
        if node.name ~= "pipeworks:deployer_off" then
                return
        end
        
        --locate the above and under positions
        local dir = minetest.facedir_to_dir(node.param2)
-       local pos_under, pos_above = {x=pos.x - dir.x, y=pos.y - dir.y, z=pos.z - dir.z}, {x=pos.x - 2*dir.x, y=pos.y - 2*dir.y, z=pos.z - 2*dir.z}
+       local pos_under, pos_above = {x = pos.x - dir.x, y = pos.y - dir.y, z = pos.z - dir.z}, {x = pos.x - 2*dir.x, y = pos.y - 2*dir.y, z = pos.z - 2*dir.z}
 
-       hacky_swap_node(pos,"pipeworks:deployer_on")
+       swap_node(pos, "pipeworks:deployer_on")
        nodeupdate(pos)
        
        local meta = minetest.get_meta(pos)
@@ -163,7 +159,7 @@ end
 
 local deployer_off = function(pos, node)
        if node.name == "pipeworks:deployer_on" then
-               hacky_swap_node(pos,"pipeworks:deployer_off")
+               swap_node(pos, "pipeworks:deployer_off")
                nodeupdate(pos)
        end
 end
index 077c4131f7468f77356430af36884107fc46eac8..17e0475ff09967628af523f6b90316c04ccfb6f3 100644 (file)
@@ -14,17 +14,13 @@ minetest.register_craft({
        }
 })
 
-local function hacky_swap_node(pos,name)
-    local node=minetest.get_node(pos)
-    local meta=minetest.get_meta(pos)
-    local meta0=meta:to_table()
+local function swap_node(pos, name)
+    local node = minetest.get_node(pos)
     if node.name == name then
         return
     end
-    node.name=name
-    minetest.add_node(pos, node)
-    local meta=minetest.get_meta(pos)
-    meta:from_table(meta0)
+    node.name = name
+    minetest.swap_node(pos, node)
 end
 
 --define the functions from https://github.com/minetest/minetest/pull/834 while waiting for the devs to notice it
@@ -91,7 +87,6 @@ local function break_node (pos, facedir)
 
        local vel = minetest.facedir_to_dir(facedir);
        local front = {x=pos.x - vel.x, y=pos.y - vel.y, z=pos.z - vel.z}
-       local back = {x=pos.x + vel.x, y=pos.y + vel.y, z=pos.z + vel.z}
        
        local node = minetest.get_node(front)
        if node.name == "air" or node.name == "ignore" then
@@ -168,6 +163,11 @@ local function break_node (pos, facedir)
                item1:setacceleration({x=0, y=0, z=0})
        end
 
+       local oldmetadata = nil
+       if def.after_dig_node then
+               oldmetadata = minetest.get_meta(front):to_table()
+       end
+       
        minetest.remove_node(front)
 
        --handle post-digging callback
@@ -189,15 +189,15 @@ end
 
 local node_breaker_on = function(pos, node)
        if node.name == "pipeworks:nodebreaker_off" then
-               hacky_swap_node(pos,"pipeworks:nodebreaker_on")
-               break_node(pos,node.param2)
+               swap_node(pos, "pipeworks:nodebreaker_on")
+               break_node(pos, node.param2)
                nodeupdate(pos)
        end
 end
 
 local node_breaker_off = function(pos, node)
        if node.name == "pipeworks:nodebreaker_on" then
-               hacky_swap_node(pos,"pipeworks:nodebreaker_off")
+               swap_node(pos, "pipeworks:nodebreaker_off")
                nodeupdate(pos)
        end
 end