Blocks are broken into two parts, type and state. These are represented by the BlockType and BlockState classes. An example of block type is minecraft:oak_log, and a state would be the combination of the type minecraft:oak_log and the properties [axis=y].

You can get a BlockState from a BlockType using either getDefaultState() or providing the correct property mappings to getState(Map).

For example, to get the state for minecraft:oak_log[axis=y]

BlockType oakLog = Objects.requireNonNull(BlockTypes.OAK_LOG);
BlockState yFacingOakLog = oakLog.getState(ImmutableMap.of(
    oakLog.getProperty("axis"), "y"
System.err.println("State: " + yFacingOakLog);

Some blocks include NBT, and these are represented by the BaseBlock type.

You can get a BaseBlock from a BlockState using toBaseBlock(CompoundTag).