I'm a long-time Minecraft modder, and as I learned I collected notes for myself in order to capture my best practices and I have this blog to share these notes with all of you.
Just in case you're in doubt, Mojang's End User License Agreement ("EULA") specifically says that modding is okay so long as it doesn't include redistributing their software and isn't intended for griefing or hacking: "Basically, mods (or plugins, or tools) are cool (you can distribute those), hacked versions of the Game client or server are not (you can't distribute those)."
I feel silly having to say it, but please learn the basics of Java before trying to mod. Java isn't that hard to learn, especially if you know other languages.
Personally I suggest learning programming from books rather than online because people tend to skip around with online learning while a book usually keeps you to a proper progression. However many programming books are daunting and boring, so I suggest the book Java in Easy Steps -- it covers all the basics in a very slim, easy to read format.
After learning the basics, I recommend tutorials.jenkov.com as the best online reference for Java.
Forge is maintained by a community of volunteers. Once you have become a proficient modder and assuming you are strong at Java you should consider helping contribute code to improve Forge. See instructions:
There are lots of other good tutorials out there. I recommend also checking out tutorials by:
Here are some collections of useful tips on a variety of modding subjects. I'll be adding more as I think of them. I also have many more in-depth tutorials on many topics (check the Pages pull-down in menu above).
Modding Is Legal, Even Encouraged By Mojang
Just in case you're in doubt, Mojang's End User License Agreement ("EULA") specifically says that modding is okay so long as it doesn't include redistributing their software and isn't intended for griefing or hacking: "Basically, mods (or plugins, or tools) are cool (you can distribute those), hacked versions of the Game client or server are not (you can't distribute those)."
Learn Java!
I feel silly having to say it, but please learn the basics of Java before trying to mod. Java isn't that hard to learn, especially if you know other languages.
Personally I suggest learning programming from books rather than online because people tend to skip around with online learning while a book usually keeps you to a proper progression. However many programming books are daunting and boring, so I suggest the book Java in Easy Steps -- it covers all the basics in a very slim, easy to read format.
After learning the basics, I recommend tutorials.jenkov.com as the best online reference for Java.
Contributing To Forge
Forge is maintained by a community of volunteers. Once you have become a proficient modder and assuming you are strong at Java you should consider helping contribute code to improve Forge. See instructions:
Updating Between Versions Of Minecraft / Forge
Other Good Tutorial Sites
There are lots of other good tutorials out there. I recommend also checking out tutorials by:
Tips And Tutorials
Here are some collections of useful tips on a variety of modding subjects. I'll be adding more as I think of them. I also have many more in-depth tutorials on many topics (check the Pages pull-down in menu above).
- Java Tips: Learning Java, Reflection, etc.
- Setting Up Java, Eclipse, git and SourceTree
- Strategy To Prevent Hacking And Cheating With Your Mods
- Coding Style Recommendations For Modding
- FML / Mod Loading / Annotations / mcmod.info
- Using A Proxy
- Singletons, Instances And Literals (When To Use ==, instanceof, and equals())
- Deciding When To Extend And When To Copy Vanilla Classes
- Registries:
- Official Forge documentation on registries
- Check out Draco18s' universal registration helper class example
- Cayde Dixon's @ObjectHolder tutorial
- Entities and Player Entities:
- Comprehensive Tutorial on Making Custom Entities
- Other Modding Tips for Entities and Players.
- Villagers and Trading
- Blocks:
- Blocks 1.9+ (The IBlockState Appoach)
- Other Quick Tips For Blocks
- Specific Tutorials
- Blocks With GUIs (Such As Custom Furnace)
- Custom Orientable Block (Logs)
- Custom Block With Random Tick (Leaves)
- Custom Plantable Blocks: Custom Sapling, Custom Crops
- Block That Connects To Neighbors
- Custom Power Distribution Systems
- Items, Armor and Weapons:
- General Tips For Items
- General Tips For Armor
- General Tips For Weapons
- Item That Emits Light (Lantern, Flashlight)
- Extended Reach Weapons
- Tools:
- Fluids, Tanks and Buckets
- Recipes and the Ore Dictionary
- Loot tables:
- Modifying Dungeon Loot Using LootTableLoadEvent
- Modifying Mob Loot Using LootTableLoadEvent
- see Draco18s' loot utilities code.
- TileEntities
- Packets, Networking, and the DataManager/DataWatcher
- Event Handling
- Capabilities (1.9+) and Extended Entity Properties (up to 1.8)
- Visuals: Models, Animation, Rendering, Tesselator, Camera, View, and GL11:
- Official documentation for Advanced Models
- World, Game
- Localization (.lang files)
- Enchantments
- GUI / Keybinding / Mouse / Input
- Advancements (1.12+) and Achievements (up to 1.11)
- Configurations:
- Advanced Configuration Files (minecraftforge.net tutorial)
- Configuration GUI
- Creative Tabs
- World Generation: Dimensions and Biomes:
- General Tips
- Custom dimension full tutorial
- Structures and Villages
- Custom tree generation (with custom log, leaves and sapling)
- Custom flower generation
- Sky and Weather
- Files and ResourceLocations
- Particles
- Sounds
- Server Commands
- Text Formatting And Custom Fonts
- Working With Other Mods:
- Forge Inter-Mod Communications (IMC)
- Managing optional dependencies
- General tips for compatibility
- Creating an API
- Using an API