Using Player State?

Actually, once you start having too much code, blueprint interfaces are actually better because they can help keep things more oraganized.

Imagine if I have 3 different pawn classes that the player controller could be possessing at any moment, they all have their own Jump function. You want to call Jump on the player’s current pawn, but how do you know what pawn type to cast to? If you have a blueprint interface that all of your pawns implement, then you just call the interface function for jump (To differentiate it, I would call it IJump) against the current pawn, and you don’t have to figure out what type it is.

It’s important though to know how casting works, because that’s the basis of any typed language, and ultimately blueprints compile down to c++ objects which are typed.