From 5a2d57b48523b95aad2294f88da3e03cf35b9942 Mon Sep 17 00:00:00 2001 From: Novatux Date: Sat, 21 Dec 2013 10:24:55 +0100 Subject: Fix node breaker, use new minetest.swap_node --- deployer.lua | 20 ++++++++------------ node_breaker.lua | 24 ++++++++++++------------ 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/deployer.lua b/deployer.lua index f5f8171..e67250c 100644 --- a/deployer.lua +++ b/deployer.lua @@ -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 diff --git a/node_breaker.lua b/node_breaker.lua index 077c413..17e0475 100644 --- a/node_breaker.lua +++ b/node_breaker.lua @@ -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 -- cgit v1.2.3