From ba9b2509a0cf228db8692d5982aa05e80af1015b Mon Sep 17 00:00:00 2001 From: binarycat Date: Sun, 17 Dec 2023 15:06:53 -0500 Subject: [PATCH] don't check for sticky blocks in locations that are already being pushed --- mesecons_mvps/init.lua | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/mesecons_mvps/init.lua b/mesecons_mvps/init.lua index 07c6e04..410fa28 100644 --- a/mesecons_mvps/init.lua +++ b/mesecons_mvps/init.lua @@ -95,16 +95,19 @@ function mesecon.mvps_get_stack(pos, dir, maximum, all_pull_sticky) -- position for _, r in ipairs(mesecon.rules.alldirs) do local adjpos = vector.add(np, r) - local adjnode = minetest.get_node(adjpos) - if minetest.registered_nodes[adjnode.name] - and minetest.registered_nodes[adjnode.name].mvps_sticky then - local sticksto = minetest.registered_nodes[adjnode.name] - .mvps_sticky(adjpos, adjnode) - - -- connects to this position? - for _, link in ipairs(sticksto) do - if vector.equals(link, np) then - frontiers:add(adjpos) + -- optimization: don't check blocks that are already part of the stack + if not pos_set[minetest.hash_node_position(adjpos)] then + local adjnode = minetest.get_node(adjpos) + if minetest.registered_nodes[adjnode.name] + and minetest.registered_nodes[adjnode.name].mvps_sticky then + local sticksto = minetest.registered_nodes[adjnode.name] + .mvps_sticky(adjpos, adjnode) + + -- connects to this position? + for _, link in ipairs(sticksto) do + if vector.equals(link, np) then + frontiers:add(adjpos) + end end end end