If it is character that is supposed to react differently depending on neighbouring blocks - than he is the one that should be scripted for this. Easiest option is to make him child of TileMap and detect what are surrounding tiles each move, using TileMaps methods ( get_cell, world_to_map ). Finally, when block is detected make one MATCH statement and code chosen behavior under every detected tilemap cell, like in this pseudocode :
var pm = world_to_map(Player_position)
for tile in [pm + vec2(1,0),pm + vec2(0,1),pm + vec2(-1,0 .... and so on :
match get_cell(tile) :
0 :
Player.defense += 10
1:
Player.health -= 25
and so on, numbers are indexes of your blocks in tilemap