Lemme explain how IcyCraft handles mods.
Mods in IcyCraft are actually the entire game's functionality.
Any block/item/generator behavior is defined by data in the behavior pack.
Each block has an index in the Look-Up-Table (LUT) of the behavior pack.
I use the block/item's ID as that index.
Basic block behavior is defined by a set number of flags (bits) in one of these LUTs.
bit 7 - if set, the player will not be able to move onto this tile
bit 6 - if set, this tile will move the player up or down
bit 5 - if the above is set: set=up, unset=down
bit 4 - if set, this tile can be interacted with
bit 3/2 - 00=chest, 01=crafting table, 10=furnace, 11=Other (given in the Tile crafting method LUT)
bit 1 - if set, this block can be placed
bit 0 - if set, this block can be broken
And reading from this data is as easy as bitwise ANDing with one of those bits.
This would get bit 7 of the ID'th byte of FLAGS, which is the block/item flags.
For structures I have an X and Y size, Minimum and Maximum world layer, and then X*Y bytes of block data.
For biomes I have 64 bytes of block IDs.
But: I have as well a list of biome IDs, which has certain world layer ranges for certain indexes. So not any biome can spawn anywhere.
I'm not sure where I put the probability for each biome to spawn... but it's in there somewhere.
Hope this helps
For more information on IcyCraft: https://icycraft-ce.ca