The previous recipe demonstrated the use of BlueprintType as a class specifier. BlueprintType allows the type to be used as a type within the Blueprint editor (that is, it can be a variable or a function input/return value).
However, we may want to create blueprints based on our type (using inheritance) rather than composition (placing an instance of our type inside an Actor, for example).
This is why Epic provided Blueprintable as a class specifier. Blueprintable means a developer can mark a class as inheritable by Blueprint classes.
We have both BlueprintType and Blueprintable instead of a single combined specifier because sometimes you may only want to expose a partial functionality. For example, certain classes should be usable as variables, but performance reasons forbid creating them in Blueprint. In that instance, you would use BlueprintType rather than both specifiers.
On the other hand, perhaps we want to use the Blueprint editor to create new subclasses, but we don't want to pass object instances around inside the Actor blueprints. It is recommended you use Blueprintable, but omit BlueprintType in this case.
Like before, neither Blueprintable nor BlueprintType specify anything about the member functions or member variables contained inside our class. We'll make those available in later recipes.