From McJty Modding
Revision as of 10:03, 28 July 2021 by McJty (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search



In this page we closely follow the YouTube tutorial but give a more textual explanation about everything. All source code for the tutorials can be found here:

The new tutorial is for Forge 1.15.2 and 1.16.3.

For the 1.17.1 tutorial series go to YouTube-Tutorials-17

Useful Links

* GitHub:
* Forge:
* Forge Forums:
* Official Forge Documentation:
* Forge Discord:
* McJty Discord:
* Mappings:
* Official Java Documentation:
* Basic Java Tutorial:
* Online Java Course using assignments:

New Tutorial Series (for 1.15.2 and 1.16.3)

This new series starts where the original tutorial series ends. In this series we start from a much cleaner codebase with fewer bugs and also we start from 1.15. This series also tries to explain a lot more and helps you figure out things on your own. Don't blindly copy/paste code! Always try to understand what you're doing. In episode 11 we make the transition to 1.16.3. Except for the tutorials about the custom dimension the rest of the tutorials is mostly unchanged between 1.15.2 and 1.16.3

Episode 1: Basic Principles, Getting Information, The Basic Mod and Package Structure

In this tutorial the basic principles of modding are explained. You learn how to use the build system. How to update Forge and get the basic mod going.

* Detailed info: Episode 1
* build.gradle:
* Main mod file:
* mods.toml:
* Video:

Episode 2: The First Block, Capabilities, Container, Gui

Here the first block is explained. This block has properties for direction and being powered or not. It has an inventory and it can generate power. Capabilities are explained as well as the DeferredRegistry for registering Minecraft things:

* FirstBlock:
* FirstBlockTile:
* FirstBlockContainer:
* FirstBlockScreen:
* Registration:
* Video:

Episode 3: Model for the first block, Data Generation

In this episode we explain how to make the visual model for our first block. We do this using data generation. In addition we also explain how data generation can be used to generate the jsons for recipes and loot tables. Using data generation you can avoid having to write json by hand.

* DataGenerators:
* BlockStates:
* Assets directory:
* Video:

Episode 4: Dynamic Rendering using a Tile Entity Renderer

Here we explain the difference between static rendering (static models) and more dynamic rendering associated with tile entities. The latter you can use for doing animations and similar:

* MagicBlock:
* MagicRenderer:
* Video:

Episode 5: Baked Models and Mimicing Other Blocks

In this episode I show how you can make baked models and use them to mimic other blocks:

* FancyBlock:
* FancyBlockTile:
* FancyBakedModel:
* FancyModelLoader:
* Video:

Episode 6: A More Complex Multipart Model

In episode 6 I show how you can make a more complex multipart model that has different configurations for all six sides. I also explain how to set up the blockstate data generation for it.

* ComplexMultipartBlock:
* BlockState:
* complex_multipart.json:
* Assets directory:
* Video:

Episode 7: Configuration, Commands, and Networking

This episode talks about how to do configuration, server side commands using Brigadier and networking with a small custom gui that spawns a mob.

* Config:
* Commands:
* Networking:
* SpawnerScreen:
* Video:

Episode 8: Entity and Custom Dimension

In this episode we talk about making a simple custom entity and also a simple custom dimension. These are the basics but can give you a good idea on how to get started into more complicated entities and dimensions.

* Entities package:
* Dimension package:
* Video:

Episode 9: Specialized Rendering

In this episode we cover a few extra rendering related subjects. More specifically we cover how you can use some rendering events and define your own render type.

* Event handler package:
* Video:

Episode 10: Capabilities

In this episode we show how you can define your own capability and attach it to other objects to do something useful.

* Data package:
* Video:

Episode 11: Porting to 1.16.3

In this episode we port our code to 1.16.3. Most of the explanation in this tutorial is about how dimensions are defined in 1.16.3 because that has changed a lot.

* Main package:
* Video:

Episode 12: Switching to official mappings and debugging

In this episode we switch the tutorial to the official Mojang mappings and also go through some debugging tips:

* Video:

Original Tutorial Series (for 1.14.4 and later 1.15.2)

This series starts with 1.14 and at some point ports to 1.15. This series works step-by-step and code is written gradually. If you like that style then this may be the best series for you to follow. On the other hand it is outdated in some respects (like it starts with 1.14) and it also contains some bugs that are fixed in later episodes or in the new series. Always reference the latest GitHub for the most up-to-date code

The first 12 episodes were made for 1.14 but are still mostly up-to-date for 1.15. Starting with episode 13 the tutorial is updated to Minecraft 1.15.

Episode 1: Setting up IDEA, Basic mod class and first block

* Video:
* Explanation: Episode 1

Episode 2: Loot tables, recipes, language file and first item

* Video:
* Explanation: Episode 2

Episode 3: Block properties, Tile Entity, Item Handler

* Video:
* Explanation: Episode 3

Episode 4: Our first GUI

* Video:
* Explanation: Episode 4

Episode 5: Better loot table and energy production

* Video:
* Explanation: Episode 5

Episode 6: Some fixes, sending out power, configuration and front face animation

* Video:
* Explanation: Episode 6

Episode 7: Updating to latest forge and data generators

* Video:
* Explanation: Episode 7

Episode 8: Getting started with entities

* Video:
* Explanation: Episode 8

Episode 9: Baked Models and Model Data

* Video:
* Explanation: Episode 9

Episode 10: Commands, Networking and Gui

* Video:
* Explanation: Episode 10

Episode 11: Special Edition, McJty Mods Explained

* Video:
* Explanation: Episode 11

Episode 12: Custom Dimensions

* Video:
* Explanation: Episode 12

Episode 13: Porting to 1.15.1 and cleanup

* Video:
* Explanation: Episode 13

Episode 14: Rendering part 1

* Video:
* Explanation: Episode 14

Episode 15: Rendering part 2 and BlockState data generation

* Video:
* Explanation: Episode 15