General Minecraft Mod File Structure with Descriptions for Each

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

 

General

-ModName

Generally, you want to name your top folder the name your mod will be.

– src

The next folder under your parent folder will be the src folder.

– main

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

– java

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).

– modauthorname

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.

-modname

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.

– blocks

This folder holds all of your custom block classes. Generally, block class names will begin with the word ‘Block’.

– commands

If you make any custom commands, this is a good place to keep them.

– compat

I have seen this folder used for integration with others mods such as JEI or WAILA.

– dimensions

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.

– entities

Used for storing classes for custom entities.

– init

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.

– items

Like the – blocks folder, this folder holds all of your custom items classes. Generally, item class names will begin with the word ‘Item’.

– proxy

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.

– util

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.

– world

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.

Resources Branch

TO DO

 

Leave a Reply

Your email address will not be published. Required fields are marked *