About Contact

The tutorial text is available under the CC BY-SA 4.0 License. Any code in the tutorial is Public Domain, feel free to use it in your own projects.

Additional Resources

There are some useful concepts that i haven't had time to write tutorials for yet but are reasonably well documented online already. This page has a collection of resources that will prove helpful. These may be less detailed than my tutorials and thus require a strong understanding of Java.

The wikis haven't updated to 1.19 at the time of writing but very little has changed since 1.18 so most of the information below remains true.


Packets allow you to send information over the network between server code and client code.

Key Bindings

You can add new key bindings that players can rebind in the vanilla menu and react when they are pressed. You can only read the key on the client side so you will probably have to send a packet back to the server.

Global Loot Modifers

Global loot modifiers allow you to run code when items are dropped from loot tables to change the drops for lots of things at once without having to manually edit a bunch of json files.

Block Entity Renderer

Some blocks (like chests or beacons) that have complex rendering or animations will have specialized rendering code instead of simple model json files.

A very similar system can be used to render complex items as well

Item Property Overrides

Allows you to pass information to your model json file when rendering an item. Bows use this for the drawing back animation.

Tinting Textures

If you want many variations of a block or item texture that just changes the colours, you can apply tints from code. Vanilla uses this for spawn eggs, leather armor, leaves, etc.


Capabilities allow attaching data to lots of different entities, tile entities or item stacks while allowing easy compatibility between them. They're basically an over complicated version of Java's Interfaces designed to make mod compatibility easier. Forge gives you a few for storing items, fluids and RF but you can make your own as well.

World Saved Data

World saved data allows you to save nbt data on a specific world that you can read back later.


Particles are an easy way for you to render a 2d sprite at a specific location in the world.


Make your mod more exciting by adding noise!



To create a command you'll have to listen to the RegisterCommandsEvent and call event.getDispatcher().register(LiteralArgumentBuilder)

Access Transformers

Access transformers allow you to make vanilla code public and removing the final modifier. Generally try to avoid using this and do things through the proper api instead but sometimes there's no other way.


Mixins allow you to directly modify vanilla's bytecode. Generally try to avoid using this and do things through the proper api instead but sometimes there's no other way. Since mixin is a separate library, it doesn't change much with minecraft versions so old tutorials (or even ones for fabric) are still useful.

Game Test Framework

Automatically run unit tests that interact with a minecraft game instance.

Got Questions? Join the Discord!

View Full Tutorial Code on Github!

Donate to Support Tutorial Creation!

See Page Edit History