A BlockState is a set of parameters used to store data permanently for blocks in the world. States can be requested by obtaining a block via BlockSource.getBlock and then using BlockState.hasState or BlockState.getState. They are used by the game engine, manually by developers, and within ICRender.BlockState conditions.
Important Caveat: Do not use numeric identifiers for saving data inside containers; convert them to named identifiers first, as numeric IDs may change each time the world is entered.