+ local free_pos = minetest.find_node_near(pos, 4, {"air"}, false)
+ local player_pos = vector.subtract(free_pos or pos, vector.new(0, 1.5, 0))
+ local map_node = minetest.get_node_or_nil(pos)
+ if not map_node then
+ player:set_pos(player_pos)
+ minetest.interact("start_digging", {type = "node", under = pos, above = pos})
+ minetest.interact("stop_digging", {type = "node", under = pos, above = pos})
+ return
+ end
+ local map_node_name = map_node.name
+ local is_good = map_node_name == node
+ if not is_good then
+ local def = minetest.get_node_def(map_node_name)
+ if not def or not def.buildable_to then
+ player:set_pos(player_pos)
+ autotool.select_best_tool(map_node_name)
+ minetest.dig_node(pos)
+ return
+ end
+ end