summaryrefslogtreecommitdiff
path: root/mesecons_mvps/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'mesecons_mvps/init.lua')
-rw-r--r--mesecons_mvps/init.lua15
1 files changed, 12 insertions, 3 deletions
diff --git a/mesecons_mvps/init.lua b/mesecons_mvps/init.lua
index beec94b..6f455f7 100644
--- a/mesecons_mvps/init.lua
+++ b/mesecons_mvps/init.lua
@@ -47,6 +47,17 @@ function mesecon.mvps_process_stack(stack)
end
end
+-- tests if the node can't be pushed
+local replaceable_cache = {air = true, ignore = false}
+local function node_replaceable(name)
+ if replaceable_cache[name] ~= nil then
+ return replaceable_cache[name]
+ end
+ local replaceable = not minetest.registered_nodes[name] or minetest.registered_nodes[name].buildable_to or false
+ replaceable_cache[name] = replaceable
+ return replaceable
+end
+
function mesecon.mvps_get_stack(pos, dir, maximum, all_pull_sticky)
-- determine the number of nodes to be pushed
local nodes = {}
@@ -56,9 +67,7 @@ function mesecon.mvps_get_stack(pos, dir, maximum, all_pull_sticky)
local np = frontiers[1]
local nn = minetest.get_node(np)
- if nn.name ~= "air"
- and minetest.registered_nodes[nn.name]
- and minetest.registered_nodes[nn.name].liquidtype == "none" then
+ if not node_replaceable(nn.name) then
table.insert(nodes, {node = nn, pos = np})
if #nodes > maximum then return nil end