While it is blooming obvious, it deserves mentioning that unless you LOOK at all of your opponent's forcing moves in response to your intended move, you will FAIL MISERABLY at chess. Put the books down and train yourself to look for these on EACH move.
Trying to learn copious amounts of new chess knowledge but not doing the most basic of things is like a 1st grade student reading advanced algebra but still ignoring to carry the "1" when doing basic addition.
Getting to the good parts of the game: Nice and clean opening by you until
1. 8.b4 giving him a pawn for free (What's your reasoning here?)
2. Instead of 15.Bc4, why not reclaim your lost pawn by Bxb7
3. Bg5 is a blunder. You ignored the forcing move Bxf3 Qxf3 followed by Qxg5. Notice how this ties closely with the earlier comment about missing forcing moves.
4. Understanding that to launch an attack, your opponent needs to give you targets/weaknesses. Attacks don't come out of nowhere.
Were there any weaknesses to go after here, really?
His fianchetto'ed bishop covering the dark squares, his e6 pawn stopping your b3 bishop and a vast majority of forces easily covering his king do not give you easy attacking chances there. Meanwhile => He's got a lethal bishop hitting your g2 square with a Q+N ready to chomp down on your king.
As I mentioned on another one of your posts, you play what the position requires...in this case => ALL attention to defense + mitigating your opponent's threats before you can actually make an attacking plan that works.
I've just been playing this game in which I was trying to launch an attack, but ended up being checkmated before i could carry it out. I'd like to see how I could improve tbh.