Skip to content

👑 Guide de Modding Minecraft 1.20.1 (Forge)

Bienvenue dans votre premier vrai cours de création de contenu ! Aujourd'hui, nous allons créer nos premiers objets (Items).

Pour garder un code propre et professionnel, nous n'allons pas tout écrire dans la classe principale du mod. À la place, nous allons utiliser une architecture déportée : une classe dédiée uniquement à la gestion et à l'enregistrement de nos objets.


1. Pourquoi une "Architecture Déportée" ?

Si vous mettez tout au même endroit, votre fichier principal va vite devenir un enfer illisible. En isolant vos objets dans une classe spécifique (généralement placée dans un dossier init ou registration), votre code reste propre : un fichier s'occupe des objets, un autre des blocs, etc.


2. Le Code Java : Création de ModItems.java

Ce fichier est le "catalogue" de votre mod. C'est ici que Minecraft va lire la liste de vos objets et leurs caractéristiques (rareté, comportement, nourriture...).

  • Emplacement recommandé : src/main/java/net/pseudo/tutorialmod/init/ModItems.java
java
package net.pseudo.tutorialmod.init;

import net.pseudo.tutorialmod.TutorialMod;
import net.minecraft.world.food.FoodProperties;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Rarity;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

public class ModItems {
    // 1. Création du registre (le catalogue) pour nos items
    public static final DeferredRegister<Item> ITEMS = 
            DeferredRegister.create(ForgeRegistries.ITEMS, TutorialMod.MOD_ID);

    // 2. EXEMPLE 1 : Un item simple (ex: un lingot, un composant)
    public static final RegistryObject<Item> LINGOT_MYSTIQUE = 
            ITEMS.register("lingot_mystique", () -> new Item(new Item.Properties()));

    // 3. EXEMPLE 2 : Un item avancé (Rare, non-empilable et qui brille !)
    public static final RegistryObject<Item> ARTEFACT_RARE = 
            ITEMS.register("artefact_rare", () -> new Item(new Item.Properties()
                    .rarity(Rarity.EPIC) // Nom affiché en violet (Épique)
                    .stacksTo(1)         // Impossible d'en avoir 64 sur la même case
            ) {
                @Override
                public boolean isFoil(net.minecraft.world.item.ItemStack stack) {
                    return true; // Active l'effet de lueur (comme un enchantement)
                }
            });

    // 4. EXEMPLE 3 : Un aliment (Nourriture)
    public static final RegistryObject<Item> POMME_MAGIQUE = 
            ITEMS.register("pomme_magique", () -> new Item(new Item.Properties()
                    .food(new FoodProperties.Builder()
                            .nutrition(4)         // Restaure 2 gigots (1 pt = 0.5 gigot)
                            .saturationMod(1.2f)   // Temps avant d'avoir faim à nouveau
                            .alwaysEat()           // Permet de la manger même si on n'a pas faim
                            .build()
                    )
            ));

    // 5. Liaison avec la classe principale
    public static void register(IEventBus eventBus) {
        ITEMS.register(eventBus);
    }
}

3. Activation dans la Classe Principale (TutorialMod.java)

Pour que Minecraft sache que notre catalogue ModItems existe, il faut l'activer une seule fois dans le constructeur de votre fichier principal.

Ajoutez simplement la ligne de liaison dans votre méthode TutorialMod() :

java
public TutorialMod() {
    IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();

    // 🌟 ON BRANCHE NOTRE CATALOGUE D'ITEMS ICI :
    ModItems.register(modEventBus);
    
    modEventBus.addListener(this::addCreativeTab);
}

💡 Pour ajouter l'item dans un onglet créatif :

Dans votre méthode d'onglets (généralement vue au Module 2), utilisez simplement le .get() :

java
event.accept(ModItems.LINGOT_MYSTIQUE.get());

4. Les Ressources Visuelles (Assets)

Le code Java crée l'existence "logique" de l'objet. Si vous lancez le jeu maintenant, votre item existera mais il aura une texture de cube noir et violet (manquante) et un nom technique brut (item.tutorialmod.lingot_mystique).

Pour y remédier, nous devons créer 3 fichiers externes.

Fiche A : Le Nom en jeu (Localisation)

  • Fichier : src/main/resources/assets/tutorialmod/lang/fr_fr.json
  • Rôle : Traduire l'identifiant technique en vrai nom lisible.
json
{
  "item.tutorialmod.lingot_mystique": "Lingot Mystique",
  "item.tutorialmod.artefact_rare": "Artéfact Antique Rare",
  "item.tutorialmod.pomme_magique": "Pomme Magique d'Origine"
}

Fiche B : La Forme de l'objet (Modèle JSON)

  • Fichier : src/main/resources/assets/tutorialmod/models/item/lingot_mystique.json
  • Rôle : Dire à Minecraft que l'objet est un item plat en 2D standard.
json
{
  "parent": "minecraft:item/generated",
  "textures": {
    "layer0": "tutorialmod:item/lingot_mystique"
  }
}

Note : layer0 pointe vers l'image sans écrire le .png à la fin.

Fiche C : Le Visuel (La Texture)

  • Fichier : src/main/resources/assets/tutorialmod/textures/item/lingot_mystique.png
  • Format requis : Image au format .png avec fond transparent.
  • Résolution conseillée : 16x16 ou 32x32 pixels pour respecter le style pixel-art de Minecraft.

⚠️ ATTENTION AUX MAJUSCULES (RÈGLE D'OR) Dans le dossier assets, utilisez uniquement des lettres minuscules, des chiffres et des tirets du bas (_). Une seule majuscule dans le nom d'un fichier ou d'un dossier fera planter l'affichage de tout votre mod !


5. Mémento : La Routine de création d'un Item

À l'avenir, pour chaque nouvel objet que vous voudrez ajouter, suivez toujours ces 4 étapes clés :

ÉtapeActionOù ça se passe ?
1. CodeDéclarer l'item avec sa ligne ITEMS.register(...)ModItems.java
2. ModèleCréer le fichier de structure JSONDossier models/item/
3. TextureDéposer le dessin pixel-art en .pngDossier textures/item/
4. LangueAjouter la ligne de traduction du nomFichier fr_fr.json