Créer un item basique



  • youtubeCe tutoriel est également disponible en vidéo.

    Sommaire

    Introduction

    Dans ce tutoriel, nous allons créer un item très basique, puis je vais donner quelques méthodes qui peuvent être utiles.

    Pré-requis

    Code

    Classe de l'item :

    Vous pouvez commencer par créer une nouvelle classe qu'il faut étendre d'Item:

    public class ItemTutoriel extends Item
    {
    
    }
    

    Vous n'avez plus besoin d'ajouter un constructeur en 1.7. Voila, votre classe est terminée, pour l'instant, car vous pourrez lui ajouter des fonctions.

    Classe principale :

    Après avoir fait notre classe d'item, il faut maintenant enregistrer votre item.
    En haut de la classe vous aller déclarer une nouvelle variable Item:

    public static Item itemTutoriel;
    

    Puis, dans la méthode PreInit de votre classe principale (celle avec FMLPreInitializationEvent en argument) vous aller déclarer la variable comme ItemTutoriel:

    itemTutoriel = new ItemTutoriel();
    

    Nous allons lui donner un nom en ajoutant setUnlocalizedName("nom") à la déclaration:

    itemTutoriel = new ItemTutoriel().setUnlocalizedName("tutoriel");
    

    Attention, ceci n'est que le nom non localisé donc, en jeu il sera nommé item.tutoriel.name. Pour localiser le nom (donc avec traduction) allez dans forge/src/main/resources/assets/votre_modid/lang/ et ouvrez les fichiers de lang précédemment créés. Ajoutez :

    item.le nom non localisé.name=Nom Localisé
    

    Ce qui donnera pour le en_US.lang :

    item.tutoriel.name=Item Tutorial
    

    et pour le fr_FR.lang :

    item.tutoriel.name=Item Tutoriel
    

    Après ceci, nous allons enregistrer l'item en ajoutant la méthode suivante:

    GameRegistry.registerItem(itemTutoriel, "item_tutoriel")
    

    itemTutoriel correspond à la variable déclaré précédemment.
    "item_tutoriel" correspond au nom donné à l'item dans le "game data". Ce nom sera utilisé comme référence en jeu (pour le /give, etc ...)

    Nous en avons terminé avec la classe principale.

    Appliquer une texture

    Pour appliquer une texture à un item, il existe deux façons de faire, une simple mais limité et une autre plus longue mais complète.

    Simple: il vous suffit de rajouter .setTextureName(ModTutoriel.MODID + ":nomdelatexture") dans la déclaration de l'item, dans la classe principale.
    Ce qui nous donne:

    itemTutoriel = new ItemTutoriel().setUnlocalizedName("tutoriel").setTextureName(ModTutoriel.MODID + ":itemtutoriel");
    

    Cette méthode étant limité à une seule texture(ce qui est le plus souvent utilisé), il existe une autre façon de faire:
    pour cela, rendez-vous dans la classe de l'Item où vous pouvez ajouter cette méthode qui va enregistrer la texture:

        @Override
        public void registerIcons(IIconRegister iconregister)
        {
            this.itemIcon = iconregister.registerIcon(ModTutoriel.MODID + ":itemtutoriel");
        }
    

    La texture est à mettre dans le dossier assets/modid/textures/items/
    Avec modid à remplacer par l'id du mod.

    Méthodes utiles

    Ajouter votre item à une page de l'inventaire créatif:
    Dans la classe principale ajoutez .setCreativeTab(creativetab) dans la déclaration de l'item (remplacer creativetab par la page souhaitée)

    itemTutoriel = new ItemTutoriel().setUnlocalizedName("itemTutoriel").setTextureName(ModTutoriel.MODID + ":itemtutoriel").setCreativeTab(CreativeTabs.tabMaterials);
    

    Ou dans la classe de l'item, ajouter un constructeur :

    public ItemTutoriel()
    {
        this.setCreativeTab(CreativeTabs.Materials);
    }
    

    Résultat

    0_1529587695902_item_moddé.png

    Github

    Crédits

    Rédaction :

    Correction :

    Creative Commons
    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

    retourRetour vers le sommaire des tutoriels



  • Merci beaucoup 🙂



  • "Vous n'avez plus besoin d'ajouté un constructeur en 1.7."
    je pense qu'il s'agit "d'ajouter"… xD
    Désolé kevin pour ce commentaire désagréable 😉


  • Administrateurs

    On va gronder les correcteurs.



  • Bonjour,

    J'ai un problème concernant les textures de mes items. J'aimerais ajouter 5 nouveaux sticks ( bâton vert, bâton rouge etc… ), et pour cela j'ai créer les textures avec le logiciel Paint.net ( transparence activée ).
    J'ai suivi le tutoriel vidéo puis le tutoriel écrit et je n'ais osé utiliser que cette technique là pour mes textures :

    itemTutoriel = new ItemTutoriel().setUnlocalizedName("tutoriel").setTextureName(ModTutoriel.MODID + ":itemtutoriel");
    

    Sinon, voici ma classe principale :

    package fr.blackpandagaming.dragonadventure.common;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.GameRegistry;
    import cpw.mods.fml.relauncher.Side;
    import fr.blackpandagaming.dragonadventure.proxy.CommonProxy;
    
    @Mod(modid = DragonAdventure.MODID, name = "Dragon Adventure", version = "1.0.0")
    
    public class DragonAdventure
    {
    public static final String MODID = "dragonadventure";
    @Instance("MODID")
    public static DragonAdventure instance;
    
    @SidedProxy(clientSide = "fr.blackpandagaming.dragonadventure.proxy.ClientProxy", serverSide = "fr.blackpandagaming.dragonadventure.proxy.CommonProxy")
    public static CommonProxy proxy;
    
    public static Item batonVert, batonRouge, batonBleu, batonBlanc, batonNoir;
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
    batonVert = new BatonVert().setUnlocalizedName("batonVert").setTextureName(MODID + ":baton_vert").setCreativeTab(CreativeTabs.tabMaterials);
    batonRouge = new BatonVert().setUnlocalizedName("batonRouge").setTextureName(MODID + ":baton_rouge").setCreativeTab(CreativeTabs.tabMaterials);
    batonBleu = new BatonVert().setUnlocalizedName("batonBleu").setTextureName(MODID + ":baton_bleu").setCreativeTab(CreativeTabs.tabMaterials);
    batonBlanc = new BatonVert().setUnlocalizedName("batonBlanc").setTextureName(MODID + ":baton_blanc").setCreativeTab(CreativeTabs.tabMaterials);
    batonNoir = new BatonVert().setUnlocalizedName("batonNoir").setTextureName(MODID + ":baton_noir").setCreativeTab(CreativeTabs.tabMaterials);
    
    GameRegistry.registerItem(batonVert, "baton_vert");
    GameRegistry.registerItem(batonRouge, "baton_rouge");
    GameRegistry.registerItem(batonBleu, "baton_bleu");
    GameRegistry.registerItem(batonBlanc, "baton_blanc");
    GameRegistry.registerItem(batonNoir, "baton_noir");
    }
    
    @EventHandler
    public void init(FMLInitializationEvent event)
    {
    proxy.registerRender();
    }
    
    @EventHandler
    public void postInit(FMLPostInitializationEvent event)
    {
    
    }
    }
    

    Biensur, j'ai tout suivit à la lettre : mes textures sont en .png et du même nom que ceux que j'ai mis dans ma classe principale.

    Voilà, j'espère que j'ai été clair et qu'il y a une solution a mon problème...

    Cordialement.



  • Remplace MODID par DragonAdventure.MODID
    Et dans ton @Instance, remplace "MODID" par DragonAdventure.MODID
    Tu as bien mis tes textures dans src/main/resources/assets/dragonadventure/textures/items?



  • D'abord, merci de ta réponse rapide !

    C'est bon, j'ais régler le problème : je n'avait pas mis mon MODID comme nom de dossier dans le dossier assets –'. Bref encore un truc tout bête 😄
    En tout cas je te remercie de ton aide !

    Cordialement.


  • Administrateurs

    Par contre ça :

    @Instance("MODID")
    public static DragonAdventure instance;
    

    c'est pas bon. ça devrait être :

    @Instance("dragonadventure")
    public static DragonAdventure instance;
    

    ou :

    @Instance(MODID)
    public static DragonAdventure instance;
    


  • Je l'avais déjà dis Robin x)



  • Bon je me remet au code dans s'il y a des erreurs de débutants c'est normal x)

    Donc j'ai bien suivis le tuto (enfin je crois) mais l'item n’apparaît pas dans Tabs Materials ^^

    La classe principale :

    package com.gmail.zzzmaxipzzz.nuclearreinforced.common;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    
    import com.gmail.zzzmaxipzzz.nuclearreinforced.proxy.CommonProxy;
    import com.gmail.zzzmaxipzzz.nuclearreinforced.item.*;
    
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.GameRegistry;
    
    @Mod(modid = "nuclearreinforced", name = "Nuclear Reinforced", version = "Alpha 0.0.0")
    public class NuclearReinforced {
    
    @Instance("nuclearreinforced")
    public static NuclearReinforced instance;
    public static final String MODID = "nuclearreinforced";
    
    @SidedProxy(clientSide = "com.gmail.zzzmaxipzzz.nuclearreinforced.proxy.ClientProxy", serverSide = "com.gmail.zzzmaxipzzz.nuclearreinforced.proxy.CommonProxy")
    public static CommonProxy proxy;
    
    public static Item nucleariumIngot;
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event) {
    
    nucleariumIngot = new ItemNuclearium()
    .setUnlocalizedName("nucleariumIngot")
    .setTextureName(NuclearReinforced.MODID + ":nuclearium_ingot")
    .setCreativeTab(CreativeTabs.tabMaterials);
    
    GameRegistry.registerItem(nucleariumIngot, "nucleariumIngot");
    }
    
    @EventHandler
    public void Init(FMLInitializationEvent event) {
    
    proxy.registerRender();
    
    }
    
    @EventHandler
    public void postInit(FMLPostInitializationEvent event) {
    
    }
    
    }
    
    

    La classe de l'item :

    package com.gmail.zzzmaxipzzz.nuclearreinforced.item;
    
    import net.minecraft.item.Item;
    
    public class ItemNuclearium extends Item {
    
    }
    
    

  • Administrateurs

    Pourtant je vois aucun problème o_O
    Essaye de le give avec /give <ton pseudo="">nuclearreinforced:nucleariumIngot</ton>



  • Ah je me disais bien que c'était bizarre !

    Je vais te passer mes autres class :

    ClientProxy :

    package com.gmail.zzzmaxipzzz.nuclearreinforced.proxy;
    
    public class ClientProxy extends CommonProxy {
    
    @Override
    public void registerRender() {
    System.out.println("Méthode côté client");
    }
    
    }
    
    

    CommonProxy :

    package com.gmail.zzzmaxipzzz.nuclearreinforced.proxy;
    
    public class CommonProxy {
    
    public void registerRender() {
    System.out.println("Méthode côté client");
    }
    
    }
    
    

    Et sinon il y a un point d'exclamation rouge sur le projet, quand je lance ça me dit qu'il y a une erreur mais je lance quand même et ça marche sauf que il y a pas mon item

    EDIT

    C'est obn ça marche, c'est juste que je sais pas pourquoi mais le chemin src\resources\assets\nuclearreinforced\ ne marche pas et qu'il faut mettre modid à la place de nuclearreinforced.
    Je vais m'en occuper pour le régler 🙂
    Merci quand même 😄 !


  • Administrateurs

    Heu pas normal du tout, refait un setup de forge.
    Et quand tu as un crash, envoie le crash.



  • Bah ducoup maintenant ça marche donc je dois quand même faire ça ?


  • Administrateurs

    Non, si ça fonctionne c'est bon.



  • Ok merci de ton aide 🙂



  • Bonjour a tous je débute en modding et j'aimerait faire quelque petit truc j'ai suivi le tuto je les regarder encore et encore mes mon item n'apparais pas je vous envoi ma classe merci de votre réponse et soyer indulgent svp .

    package Primeval.common;
    
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.item.Item;
    import Primeval.proxy.CommonProxy;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.SidedProxy;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.GameRegistry;
    
    @Mod(modid = Modprimeval.MODID, name ="PrimevalCraftWorld", version = "1.0.0")
    
    public class Modprimeval
    {
    public static final String MODID = "Modprimeval";
    
    @Instance(MODID)
    public static Modprimeval instance;
    
    @SidedProxy(clientSide = "Primeval.proxy.ClientProxy", serverSide = "Primeval.proxy.CommonProxy")
    public static CommonProxy proxy;
    
    public static Item itemDetecteur;
    
    @EventHandler
    
    public void preInit(FMLPreInitializationEvent event)
    
    {
    itemDetecteur = new ItemDetecteur().setUnlocalizedName("Detecteur").setTextureName(Modprimeval.MODID + ":itemdetecteur").setCreativeTab(CreativeTabs.tabRedstone);
    
    GameRegistry.registerItem(itemDetecteur, "item_detecteur");
    
    }
    @EventHandler
    
    public void init(FMLInitializationEvent event)
    
    {
    
    proxy.registerRender();
    
    }
    @EventHandler
    
    public void postInit(FMLPostInitializationEvent event)
    {
    
    }
    }
    

  • Administrateurs

    public static final String MODID = "Modprimeval";
    Enlève la majuscule :
    public static final String MODID = "modprimeval";
    Ensuite en jeu :
    /give <ton pseudo="">modprimeval:item_detecteur</ton>



  • Re bonjour j'ai bien fait comme vous disiez j'ai enlever la majuscule ensuite j'ai fait la commande /give zeldadu76290 modprimeval:item_detecteur mais minecraft dit que l'Id n'existe pas
    mes merci de m'avoir répondu .


  • Administrateurs

    Étrange, tu peux envoyer les logs du jeu ?


Log in to reply