Disclaimer: I am a beginner modder. I am using this site more to make notes for myself, and if it helps others along the way, that is great. That being said, the info below may be incomplete or may change frequently as I learn more. If you are aware of anything that needs to be changed or may help myself or other readers, please let me know in the comments.
When making a mod for Minecraft, there is a general file structure most mod authors follow. I will list the basic file structure below, but keep in mind, this is not set in stone. Some modders may move things to different folders, add additional folders, or more.
- ModName - src - main - java - com - modauthorname - modname - blocks BlockExampleOre1.java BlockExampleBlock1.java - commands CustomCommandExample.java - compat CompatHandler - dimensions ExampleWorldProvider.java ExampleChunkGenerator.java - entities EntityExample1.java EntityExample2.java - init ModBlocks.java ModDimensions.java ModEntities.java ModItems.java - items ItemExample1.java ItemExample2.java - proxy ClientProxy.java CommonProxy.java ServerProxy.java - util Reference.java ConfigHandler.java - world ExampleOverworldGenerator.java ModName.java - resources - assets - modname - blockstates some_block.json - lang en_US.lang - loot_tables - entities - models - block some_block.json - item some_item.json - textures - blocks some_block.png - entity some_entity.png - gui - items some_item.png mcmod.info
Generally, you want to name your top folder the name your mod will be.
The next folder under your parent folder will be the src folder.
Yet another folder in the hierarchy. This folder will branch off into java (the main coding branch) and resources (where all of your resources are kept, such as image textures, models, and more).
Main Coding Branch
An empty folder generally
– com (or net, etc)
This folder (and the one below it) is used to specify a website of the mod author. For instance, mods I make would have net as this folder’s name (as in: cieloangel.net).
This folder (and the one above it) is used to specify a website of the mod author. For instance, mods I make would have cieloangel as this folder’s name (as in: cieloangel.net). If the mod author does not have a website, that is okay. Put the author’s name anyway.
Another folder with the mod’s name goes here, this time generally in all lower-case. Finally, after numerous mostly empty files, this one will start housing the actual coding. This file generally only contains one Java file, and that is a file that has the name of the mod, which tells Forge to start there for the code.
This folder holds all of your custom block classes. Generally, block class names will begin with the word ‘Block’.
If you make any custom commands, this is a good place to keep them.
I have seen this folder used for integration with others mods such as JEI or WAILA.
This is where a lot of your custom dimension classes could go. I see a lot of authors put their dimension classes here, or make the dimensions folder a subset of the world folder.
Used for storing classes for custom entities.
This is where the classes responsible for initiating many of the different categories of classes listed in the different files. These classes include, but are not limited to, ModBlocks, ModDimensions, ModEntities, ModItems, and more. The class names usually begin with the word ‘Mod’, but that is not written in stone.
Like the – blocks folder, this folder holds all of your custom items classes. Generally, item class names will begin with the word ‘Item’.
The proxy classes are used to help define code that is to be run on the client-side, server-side, or both. There is almost always at least a ClientProxy.java and a CommonProxy.java class in this folder, whereas ServerProxy.java seems to be optional.
This a folder that is generally used for several different utility classes. A common class I see often in this folder is a Reference.java class, which is used to hold constants for things like the MOD_ID, MOD_NAME, VERSION, and more. It also generally contains variables that point to the different proxy classes. This folder is also sometimes used for Enum classes, and lib classes, although sometimes mod authors put those in different folders. If you make a config file, this is usually housed here as well.
If you are adding any kind of world gen features, those are generally housed in this folder. I have just started learning about this aspect of modding, so I will add more to this file list as I learn more.