- if (signs_lib.allowed_poles[pnode.name]
- or (pdef and pdef.drawtype == "fencelike")
- or string.find(pnode.name, "default:fence_")
- or string.find(pnode.name, "_post")
- or string.find(pnode.name, "fencepost")
- or string.find(pnode.name, "streets:streetlamp_basic_top")
- or (pnode.name == "streets:bigpole" and pnode.param2 < 4)
- or (pnode.name == "streets:bigpole" and pnode.param2 > 19 and pnode.param2 < 24)
- )
- and
- (pos.x ~= ppos.x or pos.z ~= ppos.z) then
+ if not pdef then return end
+
+ if type(pdef.check_for_pole) == "function" then
+ local node = minetest.get_node(pos)
+ local def = minetest.registered_items[node.name]
+ return pdef.check_for_pole(pos, node, def, ppos, pnode, pdef)
+ elseif pdef.check_for_pole
+ or pdef.drawtype == "fencelike"
+ or string.find(pnode.name, "_post")
+ or string.find(pnode.name, "fencepost") then
+ return true
+ end
+end
+
+function signs_lib.check_for_horizontal_pole(pos, pointed_thing)
+ local ppos = minetest.get_pointed_thing_position(pointed_thing)
+ local pnode = minetest.get_node(ppos)
+ local pdef = minetest.registered_items[pnode.name]
+
+ if not pdef then return end
+
+ if type(pdef.check_for_horiz_pole) == "function" then
+ local node = minetest.get_node(pos)
+ local def = minetest.registered_items[node.name]
+ return pdef.check_for_horiz_pole(pos, node, def, ppos, pnode, pdef)
+ elseif pdef.check_for_horiz_pole then