Since 1.16, the way minecraft handles world generation has been shifting towards being based on json files in data packs rather than making you write code. Eventually I'd like to write my own tutorials on this but for now I'll try to collect a list of resources made by people that understand it much better than me.
If you have questions about world gen specificlly, the Minecraft Worldgen Discord Server might have someone who can help.
- json format for making a custom dimension
- json format for making biomes
- other world gen json formats. (Noise settings, carvers, surface builders, features, structure sets, jigsaw pools, structure sets)
- Create a new structure that generates in the world. Uses jigsaw so you can make kinda dynamic structures built out of many parts like how villages work. (note: in 1.18.2 you can use only json files but in 1.18.0/1 you need code too).
- Ore gen. Shows how to add a placed feature to any biome using
Feature.OREas an example.
- Add new buildings to villages. Adds new piece to a pool of a jigsaw structure so similar would work for bastions, woodland mansions and many modded structures. Note: You will still need to add a jigsaw block to your nbt structure piece so that it can connect to the other pieces and spawn. For example, adding to village's houses pool means you need a jigsaw block with "minecraft:building_entrance" in the Name field and the jigsaw block is facing outward towards the street on the bottom edge of the piece.
- Add modded crop blocks to village farms. This method can stack with other people attempting to do the same. This works by adding a new processer to the structure piece that randomly replaces some wheat blocks. You could do other block replaces in other structures with the same technique.
- Explination of biome tags. the replacement for
BiomeCategoryfor 1.18.2 and later. If you add a custom biome, you should put it in a tag!