diff --git a/init.lua b/init.lua index c546c35..30afc1a 100644 --- a/init.lua +++ b/init.lua @@ -10,19 +10,23 @@ teletool.settings = {} function teletool.teleport(player, pointed_thing) local pos = pointed_thing.above - local over1 = minetest.get_node({x=pos.x,y=pos.y+1,z=pos.z}) local src = player:getpos() local dest = {x=pos.x, y=math.ceil(pos.y)-0.5, z=pos.z} - local destnode = minetest.get_node(dest) + local over = {x=dest.x, y=dest.y+1, z=dest.z} + local destnode = minetest.get_node({x=dest.x, y=math.ceil(dest.y), z=dest.z}) + local overnode = minetest.get_node({x=over.x, y=math.ceil(over.y), z=over.z}) + + minetest.log("action", "[teletool] dest: "..minetest.pos_to_string(dest)) + minetest.log("action", "[teletool] over: "..minetest.pos_to_string(over)) -- This trick prevents the player's head to spawn in a walkable node if the player clicked on the lower side of a node -- NOTE: This piece of code must be updated as soon the collision boxes of players become configurable - if minetest.registered_nodes[over1.name].walkable then + if minetest.registered_nodes[overnode.name].walkable then dest.y = dest.y - 1 end -- The destination must be collision free - local destnode = minetest.get_node(dest) + destnode = minetest.get_node({x=dest.x, y=math.ceil(dest.y), z=dest.z}) if minetest.registered_nodes[destnode.name].walkable then return false end