
The idea of Carpenters blocks is that for any given shape in minecraft it should be able to use any texture, for this, a block has to know what model and what texture to use, by default a block already knows what model to use, but we need to store additional information about what texture to use instead, from what I gather, this is usally done using block entities, block entities feel like a lot of overhead for what is effectively a single number, as such my "frame" blocks have an additional property caled texture id.
when a player interacts with a block, if they have a block in there hand then that blocks texture is then assigned a texture id, this is universal across all frames, for instance, if stone was used on some stairs and assigned the id 1, then any other frame would use texture id 1 for stone, this does add a lot of extra states to some blocks, but at a low level, having the game take a bit longer to load but run fairly unobstructed in game, is a good thing.