local MAX_TP_DOWN = 100 mcl_anticheat = { positions = {} } function mcl_anticheat.set_pos(player, pos) player:set_pos(pos) if player:is_player() then mcl_anticheat.positions[player] = pos end end minetest.register_on_joinplayer(function(player) mcl_anticheat.positions[player] = player:get_pos() end) minetest.register_on_leaveplayer(function(player) mcl_anticheat.positions[player] = nil end) minetest.register_globalstep(function() for _, player in pairs(minetest.get_connected_players()) do local pos = player:get_pos() local old_pos = mcl_anticheat.positions[player] if old_pos.y - pos.y > MAX_TP_DOWN and not player:get_attach() then player:set_pos(old_pos) else mcl_anticheat.positions[player] = pos end end end)