Forge provides a number of registries to let you extend an existing base class (Block, Item, etc) and then tell the registry about your new Class to integrate it into the game. This is generally the best way to interface with the game, because it is modular, easy to understand and maintain, and relatively robust to changes in the vanilla code.
A broad overview of the different types of registries are listed below.
- Registries for adding new Blocks, Items, Entities - These registries are used to assign names to your Blocks, Items, Entities, and TileEntities. These are necessary for Minecraft to be able to save and load them properly. (It is not automatically the same as the unlocalizedName member variable in each Item and Block.)
- Registries for rendering objects - In order for your object to be drawn on the screen (Block, Item, Entity, TileEntity) you need to provide a renderer class for that object and register it.
- Registries for crafting, smelting, spawning, villagers
- Registries for World generation
- Miscellaneous Registries - key binding, language, GUI screens, achievement pages
~Overview of Forge (and what it can do for you)
Some general notes
How Forge starts up your code (@Mod, @SidedProxy, etc)
Registering your classes
Extra methods for vanilla base classes
Forge summary - grouped by task
World generation, loading, saving
Miscellaneous - player input, rendering, GUI, chat, sounds