Revert "#1. Lock teleport with privilege"

This reverts commit 509dd83897.
master
Dmitry Kostenko 2021-02-21 21:21:28 +01:00
parent 509dd83897
commit e182e479df
1 changed files with 26 additions and 28 deletions

View File

@ -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
})