Ce tutoriel est également disponible en vidéo.
Dans ce tutoriel vous allez apprendre à créer un item simple en 1.8, des méthodes utiles seront aussi données.
La classe des items :
Nous allons commencer par créer une classe qui regroupera tous nos items. Commencez par créer un nouveau package dans lequel nous allons mettre toutes les classes en rapport avec les items. Comme le package de mon mod est «fr.minecraftforgefrance.tutorial» je vais nommer le package «fr.minecraftforgefrance.tutorial.items»
Dans ce package créez une classe nommée «VotreModidItems». Dans mon cas ce sera «TutorialItems»
Dans cette classe nous allons ajouter deux fonctions, une fonction nommée registerItems dans laquelle nous allons nommer les items et une nommée registerItemsModels qui sera seulement présente côté client pour l’enregistrement des modèles :
| package fr.minecraftforgefrance.tutorial.items; |
| |
| import net.minecraftforge.fml.relauncher.Side; |
| import net.minecraftforge.fml.relauncher.SideOnly; |
| |
| public class TutorialItems |
| { |
| |
| |
| public static void registerItems() |
| { |
| |
| |
| } |
| |
| @SideOnly(Side.CLIENT) |
| public static void registerItemsModels() |
| { |
| |
| |
| } |
| } |
Ce que nous venons de faire là servira pour tous les items du mod, ce code ne doit exister qu’une seul fois par mod.
Par contre, la suite sera à refaire pour chaque item que vous souhaitez ajouter. En dessous du commentaire «ici on va déclarer les items» ajoutez la ligne suivante :
public static final Item NOM = new ItemTutorial().setUnlocalizedName("nom non localisé").setCreativeTab(CreativeTabs.tabMisc);
Ceci est la déclaration de l’item. Comme c’est une constante, par convention le nom de la variable est en majuscule (utilisez des tirets du bas pour séparer plusieurs mots). Dans la fonction setUnlocalizedName il doit y avoir le nom non-localisé, de préférence mettez-le en minuscule. Il sera utilisé pour les fichiers de langues. setCreativeTab permet de définir l’onglet créatif, il n’est pas obligé d’en avoir un.
ItemTutorial est le nom de la classe de l’item, on va la créer par la suite.
Ensuite dans la fonction registerItems (donc en dessous du commentaire «ici on va les enregistrer») on va enregistrer l’item :
GameRegistry.registerItem(NOM, "nom_dans_le_registre");
NOM est le nom de la variable (le même que dans la déclaration de l’item) et nom_dans_le_registre est, comme indiqué, le nom du registre. Ne mettez surtout pas d’espace dans le nom du registre, évitez également les majuscules pour être cohérent avec les noms de registres de mojang. Utilisez des tirets du bas pour les espaces.
Et pour finir, dans la fonction registerItemsModels on va enregistrer le modèle avec la ligne suivante :
ModelLoader.setCustomModelResourceLocation(NOM, 0, new ModelResourceLocation(ClassePrincipale.MODID + ":nom_dans_le_registre", "inventory"));
Faites attention de bien utiliser le même nom que dans la fonction GameRegistry.registerItem. Pensez également à utiliser ctrl + shift + o pour importer ce qui manque.
Voila à quoi ressemble la classe de mon côté :
| package fr.minecraftforgefrance.tutorial.items; |
| |
| import fr.minecraftforgefrance.tutorial.ModTutorial; |
| import net.minecraft.client.resources.model.ModelResourceLocation; |
| import net.minecraft.creativetab.CreativeTabs; |
| import net.minecraft.item.Item; |
| import net.minecraftforge.client.model.ModelLoader; |
| import net.minecraftforge.fml.common.registry.GameRegistry; |
| import net.minecraftforge.fml.relauncher.Side; |
| import net.minecraftforge.fml.relauncher.SideOnly; |
| |
| public class TutorialItems |
| { |
| public static final Item TUTORIAL = new ItemTutorial().setUnlocalizedName("tutorial").setCreativeTab(CreativeTabs.tabMisc); |
| |
| public static void registerItems() |
| { |
| GameRegistry.registerItem(TUTORIAL, "tutorial_item"); |
| } |
| |
| @SideOnly(Side.CLIENT) |
| public static void registerItemsModels() |
| { |
| ModelLoader.setCustomModelResourceLocation(TUTORIAL, 0, new ModelResourceLocation(ModTutorial.MODID + ":tutorial_item", "inventory")); |
| } |
| } |
La classe de l’item :
Créez la classe de votre item. Elle doit hériter de la classe Item.java :
| public class ItemTutorial extends Item |
| { |
| |
| } |
Le but étant de créer un item simple, nous n’avons rien d’autre à ajouter. Pour ajouter des fonctionnalités à votre item vous pouvez override les différentes fonctions qui se trouvent dans la classe Item.java.
Vous pouvez aussi ajouter un constructeur et modifier la valeur de certaines variables d’Item.java.
Par exemple :
| package fr.minecraftforgefrance.tutorial.items; |
| |
| import net.minecraft.item.Item; |
| |
| public class ItemTutorial extends Item |
| { |
| public ItemTutorial() |
| { |
| this.maxStackSize = 1; |
| } |
| } |
Comme ceci, l’item ne se stackera que par 1.
Un autre exemple :
| package fr.minecraftforgefrance.tutorial.items; |
| |
| import net.minecraft.entity.player.EntityPlayer; |
| import net.minecraft.item.Item; |
| import net.minecraft.item.ItemStack; |
| import net.minecraft.util.ChatComponentText; |
| import net.minecraft.util.ChatComponentTranslation; |
| import net.minecraft.world.World; |
| |
| public class ItemTutorial extends Item |
| { |
| @Override |
| public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) |
| { |
| if(!world.isRemote) |
| { |
| player.addChatMessage(new ChatComponentText("bonjour " + player.getName())); |
| } |
| return stack; |
| } |
| } |
Comme ceci, l’item affichera “bonjour le nom du joueur” dans le chat si on fait un clic droit en ayant ce dernier en main.
Je vous laisse explorer la classe Item.java, il y a plein de fonctions dedans !
La classe commune et client :
Dans la classe commune (aussi appelée common proxy), dans la fonction preInit appelez la fonction registerItems de la classe contenant vos items comme ceci :
| package fr.minecraftforgefrance.tutorial; |
| |
| import java.io.File; |
| |
| import fr.minecraftforgefrance.tutorial.items.TutorialItems; |
| |
| public class TutorialCommon |
| { |
| public void preInit(File configFile) |
| { |
| *TutorialItems.registerItems();* |
| } |
| |
| public void init() |
| { |
| |
| } |
| } |
Il est essentiel d’ajouter cette ligne sinon vos items ne seront jamais enregistrés et donc jamais fonctionnels.
De même, dans la classe client (ou client proxy) appelez la fonction registerItemsModels :
| package fr.minecraftforgefrance.tutorial.client; |
| |
| import java.io.File; |
| |
| import fr.minecraftforgefrance.tutorial.TutorialCommon; |
| import fr.minecraftforgefrance.tutorial.items.TutorialItems; |
| |
| public class TutorialClient extends TutorialCommon |
| { |
| @Override |
| public void preInit(File configFile) |
| { |
| super.preInit(configFile); |
| TutorialItems.registerItemsModels(); |
| } |
| |
| @Override |
| public void init() |
| { |
| super.init(); |
| } |
| } |
Et voilà ! Si vous lancez votre jeu, l’item devrait être fonctionnel mais s’appellera item.nom non localisé.name et n’aura pas de texture. Il faut donc maintenant s’occuper des ressources.
Le modèle et la texture :
Dans un premier temps, voici le fichier JSON de cet item (tutoriel), c’est le fichier JSON de base pour les items basiques de Minecraft.
| { |
| "parent": "builtin/generated", |
| "textures": { |
| "layer0": "tutorial:items/tutorial_item" |
| }, |
| "display": { |
| "thirdperson": { |
| "rotation": [ 0, 90, -35 ], |
| "translation": [ 0, 1.25, -3.5 ], |
| "scale": [ 0.85, 0.85, 0.85 ] |
| }, |
| "firstperson": { |
| "rotation": [ 0, -135, 25 ], |
| "translation": [ 0, 4, 2 ], |
| "scale": [ 1.7, 1.7, 1.7 ] |
| } |
| } |
| } |
Je vais vous expliquer les principales méthodes à changer,
La ligne “layer0” sert à définir la texture de notre Item
(équivalent, à l’époque de la 1.7.x, au this.setTextureName() )
Changez “tutorial” et **“tutorial_item” **par le modid de votre mod et le nom de votre texture.
La texture doit toujours se trouver dans vos assets ! (assets/modid/textures/items/nomdelatexture.png)
Les autres lignes en dessous servent à définir la taille, la position et la rotation de votre item,
"thirdperson"
= rendu à la troisième personne
"firstperson"
= rendu à la première personne (rendu en main et inventaire)
Si vous souhaitez modifier le fichier JSON tout en évitant les erreurs je vous conseille ce site qui corrigera vos erreurs si il y en a : http://jsoneditoronline.com
Il y a aussi les détails complets pour modifier votre fichier JSON sur le wiki officiel de Minecraft
Comme par exemple les particules, les layers…
Vous avez maintenant tous les outils en main pour personnaliser le fichier JSON de votre item !
Une dernière chose, modifier le fichier de langue de votre mod. Ajoutez la ligne suivante dedans :
item.nom non localisé.name=Nom localisé
Un exemple concret :
- pour le fichier en_US.lang :
item.tutorial.name=Tutorial Item
- pour le fichier fr_FR.lang :
item.tutorial.name=Item Tutoriel
Et voila, le nom devrait apparaître en jeu !

Voir le commit sur github
Le commit sur github montre clairement où ont été placé les fichiers, ainsi que ce qui a été ajouté et retiré dans le fichier.
https://www.youtube.com/watch?v=BOlEjl_1L4s
Rédaction :
Correction :
- Fine33
- DiabolicaTrix
- Toutoune1008

Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International
Sommaire des tutoriels