Créer un item basique
-
Ce 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
Crédits
Rédaction :
Correction :
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 -
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 -
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.
-
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 { }
-
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 ! -
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 ?
-
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) { } }
-
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 . -
Étrange, tu peux envoyer les logs du jeu ?