Instead of allowing people to create new types of BlockIDs, it might be good to make this a "sealed" abstract class so that subclasses can only exist in this file. I'm suggesting this because a bunch of other code may have to change in the future if we have new types of blocks (e.g. any code we might have that prioritizes which data to drop, or figures out whether to compress a block, etc).