From 76d39046f23288bc01f81434d97757b4b31eccd6 Mon Sep 17 00:00:00 2001 From: number Zero Date: Thu, 29 Nov 2018 15:29:57 +0300 Subject: [PATCH] Fix multiblock digging --- filter.lua | 2 +- multiblock.lua | 22 +++++++++++----------- splitter.lua | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/filter.lua b/filter.lua index eee81fb..090a726 100644 --- a/filter.lua +++ b/filter.lua @@ -132,7 +132,7 @@ minetest.register_node("digiline_routing:filter_b", { fixed = {}, }, drop = "", - after_destruct = digiline_routing.multiblock.dig2b, + on_dig = digiline_routing.multiblock.dig2b, on_rotate = digiline_routing.multiblock.rotate2b, digiline = { effector = { diff --git a/multiblock.lua b/multiblock.lua index 0f79e85..7c19d64 100644 --- a/multiblock.lua +++ b/multiblock.lua @@ -77,23 +77,23 @@ digiline_routing.multiblock.rotate2b = function(pos, node, user, mode, new_param return false end -local removing_head = false - digiline_routing.multiblock.dig2 = function(pos, node) - if removing_head then - error("Infinite recursion detected") - end - removing_head = true local dir = minetest.facedir_to_dir(node.param2) local tail = vector.add(pos, dir) - minetest.dig_node(tail) - removing_head = false + minetest.remove_node(tail) + digiline:update_autoconnect(tail) end -digiline_routing.multiblock.dig2b = function(pos, node) +digiline_routing.multiblock.dig2b = function(pos, node, digger) local dir = minetest.facedir_to_dir(node.param2) local head = vector.subtract(pos, dir) - if not removing_head then - minetest.dig_node(head) + local node2 = minetest.get_node_or_nil(head) + if not node2 then -- master unloaded, let’s not break the structure + return + end + if node2.param2 == node.param2 then + minetest.node_dig(head, node2, digger) + else -- broken multinode structure, just remove it + minetest.remove_node(pos) end end diff --git a/splitter.lua b/splitter.lua index 219bcdf..f40f4e3 100644 --- a/splitter.lua +++ b/splitter.lua @@ -101,7 +101,7 @@ minetest.register_node("digiline_routing:splitter_b", { fixed = {}, }, drop = "", - after_destruct = digiline_routing.multiblock.dig2b, + on_dig = digiline_routing.multiblock.dig2b, on_rotate = digiline_routing.multiblock.rotate2b, digiline = { effector = {