Collision detection with tiling, fall problems?

Evening

I’m making a block-based game, yeah I know, using tiling. As it’s convenient to do so I hold all the tiles in a two-dimensional array. It seems to work very well together with having my images for the tiles held in an enum, so they’re only loaded once. It works quickly for Java 2D. Everything including the sky in my game is made of tiles apart from the player.

I have a problem with making my player, a robot, fall. It’s fine for horizontal collisions but downwards is a problem if the robot is slightly spanning two tiles. I fixed this a bit by making the robot 48px tall and 24px wide when tiles are 32px by 32px but it’s still bad:

If I nudge forwards a tiny bit more it’s fine a the robot will fall. Here’s my code:

// Find the tile the robot spans.
int t = player.getY1() / BLOCK_SIZE; // Top tile coordinate.
int b = (player.getY2() / BLOCK_SIZE); // Bottom tile coordinate.
int l = player.getX1() / BLOCK_SIZE; // Left tile coordinate.
int r = player.getX2() / BLOCK_SIZE; // Right tile coordinate.

// Left movement, -1 to get both tiles on the sides.
if(gameInput.getKeyState(KeyEvent.VK_D) && !blocks[b - 1][r].isSolid() && !blocks[t][r].isSolid()) {
    player.move(1);
}

// Right movement, -1 to get both tiles on the sides.
if(gameInput.getKeyState(KeyEvent.VK_A) && !blocks[b - 1][l].isSolid() && !blocks[t][l].isSolid()) {
    player.move(-1);
}

// Jumping, well more like flying at the moment.
if(gameInput.getKeyState(KeyEvent.VK_W)) {
    player.jump(3);
}

// Falling. This is mostly what's the problem. isSolid() simply returns true unless the tile is sky.
if(!blocks[b][l].isSolid() && !blocks[b][r].isSolid()) {
    player.fall(1);
}

I recall other games with similar problems but can’t recall if they work around it or leave it. Does anyone have any suggestions? ???