From e182e479dfdf26524771fe9349bad90546690d45 Mon Sep 17 00:00:00 2001 From: Dmitry Kostenko Date: Sun, 21 Feb 2021 21:21:28 +0100 Subject: [PATCH] Revert "#1. Lock teleport with privilege" This reverts commit 509dd83897bfa8990fb45476e33c6f5faf166c20. --- init.lua | 54 ++++++++++++++++++++++++++---------------------------- 1 file changed, 26 insertions(+), 28 deletions(-) diff --git a/init.lua b/init.lua index b4d49ad..4e3720f 100644 --- a/init.lua +++ b/init.lua @@ -930,37 +930,35 @@ terraform:register_tool("teleport", { short_description = "Terraform Teleport", inventory_image = "terraform_tool_teleport.png", execute = function(itemstack, player, target) - privileged(player, function() - -- Get position - local target_pos = minetest.get_pointed_thing_position(target) - if not target_pos then - return - end + -- Get position + local target_pos = minetest.get_pointed_thing_position(target) + if not target_pos then + return + end - local player_pos = vector.floor(player:get_pos()) - local probe = { x = player_pos.x, y = player_pos.y, z = player_pos.z } - while minetest.get_node(probe).name == "air" do - probe.y = probe.y - 1 - end - local vm = minetest.get_voxel_manip() - local mine,maxe = vm:read_from_map(vector.add(target_pos, vector.new(0, -128, 0)), vector.add(target_pos, vector.new(0, 128 + player_pos.y - probe.y, 0))) - local va = VoxelArea:new({MinEdge=mine, MaxEdge=maxe}) - local data = vm:get_data() - local i = va:indexp(target_pos) - while data[i] ~= minetest.CONTENT_AIR do --Move to the topmost block - i = i + va.ystride - end - i = i + va.ystride * (player_pos.y - probe.y - 1) + local player_pos = vector.floor(player:get_pos()) + local probe = { x = player_pos.x, y = player_pos.y, z = player_pos.z } + while minetest.get_node(probe).name == "air" do + probe.y = probe.y - 1 + end + local vm = minetest.get_voxel_manip() + local mine,maxe = vm:read_from_map(vector.add(target_pos, vector.new(0, -128, 0)), vector.add(target_pos, vector.new(0, 128 + player_pos.y - probe.y, 0))) + local va = VoxelArea:new({MinEdge=mine, MaxEdge=maxe}) + local data = vm:get_data() + local i = va:indexp(target_pos) + while data[i] ~= minetest.CONTENT_AIR do --Move to the topmost block + i = i + va.ystride + end + i = i + va.ystride * (player_pos.y - probe.y - 1) - for delta = 0,128 do -- Try up to 128 meters up or down - for sign = -1,1,2 do - if data[i + va.ystride * delta * sign] == minetest.CONTENT_AIR and data[i + va.ystride * (1 + delta * sign)] == minetest.CONTENT_AIR then - result = va:position(i + va.ystride * delta * sign) - player:set_pos(result) - return - end + for delta = 0,128 do -- Try up to 128 meters up or down + for sign = -1,1,2 do + if data[i + va.ystride * delta * sign] == minetest.CONTENT_AIR and data[i + va.ystride * (1 + delta * sign)] == minetest.CONTENT_AIR then + result = va:position(i + va.ystride * delta * sign) + player:set_pos(result) + return end end - end, true) + end end })