Creating an ItemStack with BlockState

As an example, I want to craete a new ItemStack of Birch wood.

How would I go about creating birch wood specifically? I know you can use ItemStackBuilder to create an item with ItemType and damage, however it’s much better to avoid using a damage value.

It looks like you would get the BlockType, find the right variant trough BlockState, but at that point I’m not sure how you’d appy the State to the BlockType, or ItemBlock…

It seems the only way at the moment is to set the damage value.
It’s not exactly very neat either:

BlockState state = ItemTypes.PLANKS.getBlock().getDefaultState();
@SuppressWarnings("unchecked")
EnumProperty<BlockPlanks.EnumType> variant = (EnumProperty<BlockPlanks.EnumType>) state.getPropertyByName("variant").get();
BlockPlanks.EnumType birchState = variant.getValueForName("birch").get();
int damage = birchState.func_176839_a();
ItemStack itemStack = game.getRegistry().getItemBuilder().itemType(ItemTypes.PLANKS).damage(damage).build();

I had to import net.minecraft.block.BlockPlanks since the required interfaces in the API do not exist yet, obviously this is a bad idea.

So the ItemStackBuilder really needs a way to accept BlockStates.

Edit
A slightly neater way

BlockState state = ItemTypes.PLANKS.getBlock().getDefaultState();
int damage = state.withProperty(state.getPropertyByName("variant").get(), BlockPlanks.EnumType.BIRCH).getDataValue();
ItemStack itemStack = game.getRegistry().getItemBuilder().itemType(ItemTypes.PLANKS).damage(damage).build();