• Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
  • S'inscrire
  • Se connecter
  • S'inscrire
  • Se connecter
  • Recherche
  • Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes

Créer une armure

Les items
1.7.x
39
247
60.9k
Charger plus de messages
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • robin4002
    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par robin4002 29 nov. 2021, 01:27 12 mars 2014, 19:56

    youtubeCe tutoriel est également disponible en vidéo.

    Sommaire

    • Introduction
    • Pré-requis
    • Code
      • La classe principale
      • La classe de l’armure
      • Les textures et les noms
      • Rendre l’armure réparable
    • Bonus
      • Quelques effets avec la fonction onArmorTick
      • Quelques effets avec les events
    • Résultat
    • Crédits

    Introduction

    Une armure est composée de 4 items. Ces items ne peuvent pas être mis en metadata car le système de dégâts de l’armure utilise déjà les metadatas. Il existe deux façons pour créer une armure, une passant par la méthode de FML ou l’autre en passant par la méthode de forge. Dans ce tutoriel, nous allons faire une armure avec la méthode de forge car elle permet de mettre les textures dans le dossier assets/modid alors que celle de fml met les textures dans /assets/minecraft. Nous allons aussi voir comment ajouter des effets à cette armure.

    Pré-requis

    • Créer un item basique

    Code

    La classe principale :

    À la suite de la déclaration des items déjà existant :

        public static Item itemTutoriel, itemTutoriel2;
    

    Ajoutez quatre items, le casque, le plastron, les jambières et les bottes :

        public static Item itemTutoriel, itemTutoriel2, helmetTuto, chestPlateTuto, leggingsTuto, bootsTuto;
    

    Il faut également déclarer le matériel de l’armure :

        public static ArmorMaterial armorTuto = EnumHelper.addArmorMaterial("armorTuto", 25, new int[] {4, 6, 5, 4}, 20);
    

    Dans l’ordre :

    • armorTuto : le nom du field.
    • EnumHelper.addArmorMaterial : une fonction de forge pour ajouter un matériel d’armure. Pensez d’ailleurs à importer net.minecraftforge.common.util.EnumHelper et net.minecraft.item.ItemArmor.ArmorMaterial.
    • 25 est la durée de l’armure. Si vous souhaitez connaître les valeurs des armures de minecraft, ctrl + clic sur ArmorMaterial.
    • new int[] {4, 6, 5, 4} : l’absorption de l’armure, dans l’ordre, celle du casque, puis celle du plastron, puis celle des jambières et enfin celle des bottes.
    • 20 correspond à la facilité d’enchantement, plus la valeur est élevée, plus il sera facile d’avoir de bons enchantements.

    Ensuite initialisez ces quatre items, dans la fonction init, à la suite des autres items :

    helmetTuto = new ItemTutoArmor(armorTuto, 0).setUnlocalizedName("helmetTuto").setTextureName(MODID + ":helmet_tutoriel");
    chestPlateTuto = new ItemTutoArmor(armorTuto, 1).setUnlocalizedName("chestPlateTuto").setTextureName(MODID + ":chestplate_tutoriel");
    leggingsTuto = new ItemTutoArmor(armorTuto, 2).setUnlocalizedName("leggingsTuto").setTextureName(MODID + ":leggings_tutoriel");
    bootsTuto = new ItemTutoArmor(armorTuto, 3).setUnlocalizedName("bootsTuto").setTextureName(MODID + ":boots_tutoriel");

    Vous pouvez constater que c’est presque la même ligne qu’un item basique, la seule différence est qu’il y a un int en plus dans le constructeur. C’est lui qui va définir le type de l’armure (0 pour le casque, 1 pour le plastron, 2 pour les jambières, 3 pour les bottes). Vous devez normalement reconnaître le reste du code, si ce n’est pas le cas je vous invite à revoir les pré-requis. Vous devez également enregistrer ces items (voir pré-requis, créer un item basique).

    La classe de l’armure :

    Créez la classe de votre armure, en superclass mettez net.minecraft.item.ItemArmor.
    armor-create-class.png

    Vous allez avoir une erreur sur la classe, ajoutez un constructeur :

    public ItemTutoArmor(ArmorMaterial material, int type)
    {
    super(material, 0, type);
    }

    Le 0 correspond en fait à l’index de la texture, mais comme nous utilisons forge cette int ne nous concerne pas.
    Ensuite, ajoutez la fonction pour la texture sur le joueur :

    public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type)
    {
    if(slot == 2)
    {
    return ModTutoriel.MODID + ":textures/models/armor/tutorial_layer_2.png";
    }
    return ModTutoriel.MODID + ":textures/models/armor/tutorial_layer_1.png";
    }

    Explication du code : si le slot est égale à 2 (donc les jambières) alors je lui dis de chercher la texture tutorial_layer_2. Sinon, il va continuer le code, et donc chercher tutorial_layer_1.
    Vous pouvez faire la même chose avec une comparaison d’objet :

    public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type)
    {
    if(stack.getItem() == ModTutoriel.leggingsTuto)
    {
    return ModTutoriel.MODID + ":textures/models/armor/tutorial_layer_2.png";
    }
    return ModTutoriel.MODID + ":textures/models/armor/tutorial_layer_1.png";
    }

    D’ailleurs la comparaison avec l’objet de l’item offre un avantage : vous pouvez utiliser la même classe pour plusieurs armures. Il suffit de faire des conditions à chaque fois, si stack.getItem() est égal aux jambières de l’armure tuto1, alors la fonction renvoie tuto1_layer_2 sinon si stack.getItem() est le casque, ou le plastron, ou les bottes de l’armure tuto1 la fonction renvoie tuto1_layer_1, sinon si stack.getItem() sont les jambières de l’armure tuto2 alors la fonction renvoie tuto2_layer_2, etc …
    Le chemin de la texture est sous la forme d’une ResourceLocation, comme pour les mobs. On utilise “modid:chemin vers la texture avec le .png”
    Vous n’êtes pas obligé d’utiliser le même chemin que moi, dans le tutoriel j’utilise le même que minecraft.

    La texture et le nom :

    Pour les noms de vos items, il suffit de les ajouter dans vos fichiers de lang. Dans mon cas :

    item.helmetTuto.name=Tutorial Helmet
    item.chestPlateTuto.name=Tutorial ChestPlate
    item.leggingsTuto.name=Tutorial Leggings
    item.bootsTuto.name=Tutorial Boots

    Je ne vais pas rentrer dans les détails, c’est quelque chose que vous devrez maîtriser, si ce n’est pas le cas, retournez voir les pré-requis.
    Pour la texture dans l’inventaire, je ne vais pas non plus entrer dans les détails, les explications étant déjà faites dans le tutoriel sur l’item basique.
    En revanche, pour les textures sur le rendu de l’entité, vous ne pouviez pas deviner.
    Allez donc dans votre dossier forge/src/main/resources/assets/votre id de mod/. À partir de ce dossier, il suffit de créer l’arborescence de ce que nous avons mis après le : de la fonction getArmorTexture. Dans mon cas, j’ai textures/models/armor/tutorial_layer_2.png et textures/models/armor/tutorial_layer_2.png, donc j’ouvre le dossier textures, dans ce dossier je crée un nouveau dossier nommé “models” puis à l’intérieur de ce dossier, je fais un dossier “armor”. Pour finir, je place mes deux textures dans ce dossier. Je vous conseil de vous baser sur les .png de minecraft, vous pouvez les trouvées dans le .jar de minecraft, dans le même dossier mais avec minecraft à la place du modid (assets/minecraft/textures/models/armor/).

    Rendre l’armure réparable :

    Actuellement si vous mettez votre armure dans une enclume, elle ne sera pas réparable. Pour la rendre réparable, il faut ajouter cette fonction dans la classe de l’armure :

    public boolean getIsRepairable(ItemStack input, ItemStack repair)
    {
    if(repair.getItem() == ModTutoriel.itemTutoriel)
    {
    return true;
    }
    return false;
    }

    repair correspond à l’item mis à gauche de l’enclume, il suffit de vérifier qu’il correspond à l’item avec lequel vous souhaitez rendre votre armure réparable. Vous pouvez aussi faire ça :

    public boolean getIsRepairable(ItemStack input, ItemStack repair)
    {
    if(repair.getItem() == ModTutoriel.itemTutoriel || repair.getItem() == ModTutoriel.itemTutoriel2)
    {
    return true;
    }
    return false;
    }

    Pour rendre votre armure réparable avec deux items différents.
    input correspond à l’item mis à gauche de l’enclume, il sera toujours égal à celui de la classe même. Il peut toujours vous servir si vous voulez utiliser la même classe pour plusieurs armures, par exemple :

    public boolean getIsRepairable(ItemStack input, ItemStack repair)
    {
    if(((input.getItem() == ModTutoriel.helmetTuto1 || les autres pièces d armures1) && repair.getItem() == ModTutoriel.itemTutoriel1) || ((input.getItem() == ModTutoriel.helmetTuto2 || les autres pièces d armures2) && repair.getItem() == ModTutoriel.itemTutoriel2))
    {
    return true;
    }
    return false;
    }

    Pour rendre les armures 1 réparables avec mon item 1 et les armures 2 avec mon item 2. J’ai raccourci la condition, il faut mettre les 3 autres pièces d’armure à la place de “les autres pièces d’armures”. Attention quand même de ne pas vous perdre dans toutes ces parenthèses, une deuxième classe sera bien plus simple si vous avez peur de vous perdre.

    Bonus

    Quelques effets avec la fonction onArmorTick :

    Dans la classe de votre item, ajoutez cette fonction :

    public void onArmorTick(World world, EntityPlayer player, ItemStack stack)
    {
    }

    Elle va être appelée à chaque tick lorsque le joueur porte l’armure sur lui. En argument il y a le monde, l’instance du joueur et le stack de l’armure. Donc il y a de quoi faire. Tous les codes que je vais vous donner vont se placer dans cette fonction.
    On va commencer par quelque chose de simple, nous allons ajouter un effet de potion si le joueur porte une pièce de l’armure sur lui.

            player.addPotionEffect(new PotionEffect(Potion.resistance.id, 20, 0));
    

    Ce code ajoute l’effet resistance pendant une seconde. Comme ce code est exécuté à chaque tick, l’effet va rester temps que le joueur à l’armure sur lui. Potion.resistance.id correspond à l’id de la potion, 20 à la durée en tick (20 = une seconde, 40 = deux secondes, etc …) et 0 à l’amplificateur. Avec amplificateur de 0, la potion sera de niveau 1. Avec un amplificateur de 1, la potion sera de niveau 2. L’amplificateur monte jusqu’à 4, au-delà le niveau de la potion ne s’affiche plus en jeu.

    Un peu plus poussé, je veux donner au joueur l’effet de vision de nuit si la luminosité est faible, et que le joueur porte le casque :

    if(this.armorType == 0 && world.getBlockLightValue(MathHelper.floor_double(player.posX), MathHelper.floor_double(player.posY), MathHelper.floor_double(player.posZ)) < 8)
    {
    player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 220, 0));
    }

    Si le type d’armure est 0 (donc le casque) et que la luminosité au niveau du joueur est inférieure à 8, alors je donne l’effet de potion vision de nuit pendant 11 secondes. Pourquoi 11 ? Car en dessous de 10, l’effet clignote, et donc ce n’est pas agréable pour le joueur.
    Vous souhaitez que si le joueur porte les jambières il puisse courir plus vite ? Pas de problème, il suffit de vérifier si le joueur porte les jambières et si il court, et dans ce cas on augmente son mouvement x et son mouvement z :

    if(this.armorType == 2 && player.isSprinting() && player.onGround)
    {
    player.motionX *= 1.1F;
    player.motionZ *= 1.1F;
    }

    (multiplier par 1.1F = vitesse augmenter de 10 %)
    A l’inverse, vous pouvez ralentir le joueur ( *= 0.5F) par exemple pour le ralentir si votre armure est lourde.

    Les possibilités avec cette méthode sont énormes, je n’ai montré ici qu’un échantillon de ce qu’on peut faire. Tapez player. et faites ctrl + espace, vous allez avoir la liste de toutes les variables et fonctions du joueur que vous pouvez utiliser. Même chose pour world, même chose pour stack. Attention quand même de ne pas mettre des méthodes qui ne sont que présent en client, les ticks se font aussi sur le serveur.

    Quelques effets avec les events :

    Pour commencer avec les events, il faut enregistrer dans la fonction init de la classe principale la classe où il y aura les event :

            MinecraftForge.EVENT_BUS.register(new LivingEventHandler());
    

    LivingEventHandler est le nom de la classe où je vais regrouper tous les événements qui concernent les entités vivantes. Créez ensuite cette classe.
    Elle n’a pas d’héritage, pour que votre événement soit détecté il suffit d’utiliser l’annotation @SubscribeEvent.

    package fr.minecraftforgefrance.tutoriel.common;
    import net.minecraftforge.event.entity.living.LivingFallEvent;
    import net.minecraftforge.event.entity.living.LivingHurtEvent;
    import cpw.mods.fml.common.eventhandler.SubscribeEvent;
    public class LivingEventHandler
    {
    @SubscribeEvent
    public void onLivingHurt(LivingHurtEvent event)
    {
    }
    @SubscribeEvent
    public void onLivingFall(LivingFallEvent event)
    {
    }
    }

    Voila à quoi ressemble ma classe après y avoir ajouté deux événements. Le nom de la fonction importe peu, l’essentiel est que le @SubscribeEvent soit présent et que la fonction ait un event en argument. LivingHurtEvent est déclenché quand l’entité prend des dégâts et LivingFallEvent quand l’entité tombe.
    Nous allons commencer par compléter l’event fall, en effet, je souhaite que les dégâts de chute soit annulé si l’entité à les bottes tutoriel sur lui.

    ItemStack boots = event.entityLiving.getEquipmentInSlot(1); // récupère les bottes
    if(boots != null && boots.getItem() == ModTutoriel.bootsTuto) // on vérifie que l'entité à des bottes avec le null check puis si elle a des bottes, on vérifie si celles-ci sont les bottes tuto
    {
    boots.damageItem(MathHelper.floor_float(event.distance), event.entityLiving); // on endommage les bottes en fonction de la puissance de la chute
    event.distance = 0F; // on défini la distance à 0 pour pas que l'entité prenne de dégâts
    if(boots.stackSize == 0) // si le stack size est de 0 (donc que les bottes ont cassé)
    {
    event.entityLiving.setCurrentItemOrArmor(1, null); // on met un item null au niveau des bottes, c'est pour éviter un bug d'affichage
    }
    }

    Tout le code est commenté pour expliquer à quoi sert chaque ligne. Attention, le null check (boots != null) est très important, si vous le mettez pas cette condition avant boots.getItem(), vous allez avoir un NPE (NullPointerException) si l’entité n’a pas de bottes. Donc si votre jeu crash avec un NullPointerException, vérifiez ça.
    Ici j’ai réduit totalement les dégâts de chute, mais on aurait pu par exemple les diviser par deux en remplaçant event.distance = 0F; par event.distance = event.distance / 2;
    J’ai aussi endommagé les bottes en fonction de la chute, on aurait pu aussi multiplier ou diviser par deux cette valeur.

    Ceci n’est qu’un exemple, il y a pleins d’autres possibilités, une fois de plus, à vous d’utiliser votre imagination.

    Ensuite nous allons compléter la fonction onLivingHurt. Cette fois je fais appliquer mes effets seulement si le joueur à toute l’armure sur lui. On commence par obtenir l’instance des ItemStack de toute l’armure. Ensuite dans une condition, je vérifie à chaque que fois que l’armure n’est pas null et qu’elle correspond à l’item voulu :

    ItemStack boots = event.entityLiving.getEquipmentInSlot(1);
    ItemStack leggings = event.entityLiving.getEquipmentInSlot(2);
    ItemStack chestPlate = event.entityLiving.getEquipmentInSlot(3);
    ItemStack helmet = event.entityLiving.getEquipmentInSlot(4);
    if(boots != null && boots.getItem() == ModTutoriel.bootsTuto && leggings != null && leggings.getItem() == ModTutoriel.leggingsTuto && chestPlate != null && chestPlate.getItem() == ModTutoriel.chestPlateTuto && helmet != null && helmet.getItem() == ModTutoriel.helmetTuto)
    {
    // La suite ici
    }

    Cette event à 3 variables intéressantes : entityLiving, l’instance de l’entité qui vient de prendre des dégâts, source, le DamageSource que l’entité vient de se prendre, et ammount le nombre de dégât que l’entité vient de prendre. Je souhaite faire que si l’entité vient de se faire attaqué par un creeper, alors cela endommage l’armure, et les dégâts sont réduis à 0. À la place de la suite ici, je mets ça :

    if(event.source.getEntity() != null && event.source.getEntity() instanceof EntityCreeper) // vérifie que l'entité qui a causée les dégâts n'est pas null (elle sera null si les dégâts sont causés pas une chute, ou par le feu, ou par la lave, etc ...) et si elle n'est pas null, vérifie que l'entité qui a causée les dégâts est un creeper.
    {
    boots.damageItem(MathHelper.floor_float(event.ammount / 4), event.entityLiving); // endommage les bottes
    leggings.damageItem(MathHelper.floor_float(event.ammount / 4), event.entityLiving); // endommage les jambières
    chestPlate.damageItem(MathHelper.floor_float(event.ammount / 4), event.entityLiving); // endommage le plastron
    helmet.damageItem(MathHelper.floor_float(event.ammount / 4), event.entityLiving); // endommage le casque
    event.ammount = 0F; // réduit les dégâts à 0
    }

    Autre exemple, si la source des dégâts est un cactus, ça explose ! :

    if(event.source.getDamageType().equals("cactus"))
    {
    event.entityLiving.worldObj.newExplosion(event.entityLiving, event.entityLiving.posX, event.entityLiving.posY, event.entityLiving.posZ, event.ammount, true, true);
    }

    Vous pouvez détecter le type de dégât avec if(event.source.getDamageType().equals(“nom du dégât”)), je vous laisse faire un tour dans la classe DamageSource.java.
    Voila, c’est tout pour les événements.

    Résultat

    Voir le commit sur github
    Le commit sur github montre clairement où ont été placés les fichiers, ainsi que ce qui a été ajouté et retiré dans le fichier.

    Crédits

    Rédaction :

    • robin4002

    Correction :

    • gagoi
    • FireDreft

    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

    1 réponse Dernière réponse Répondre Citer 0
    • S
      sevenno07 dernière édition par 15 mars 2014, 21:48

      Merci beaucoup :D, je vais devoir utilisé certaine chose de la partit bonus :).

      Auteur originale de Sevenno's Addons et de [url=http://www.minecraftfor…

      1 réponse Dernière réponse Répondre Citer 0
      • Überfap
        Überfap dernière édition par robin4002 21 juin 2018, 11:26 16 mars 2014, 08:17

        Avis aux amateurs : Ne mettez jamais player.motionY *= 1.5F;

        Sinon ça fait ça :

        Si je t'ai aidé, n'hésites pas à mettre un point de réputation positif !
        Si tu m'as aidé, je n'hésiterais pas à t'en donner à mon tour !

        1 réponse Dernière réponse Répondre Citer 0
        • S
          Sir_Bee dernière édition par 16 mars 2014, 18:04

          Bonjour,
          J’ai un problème, une erreur apparait au niveau de .setTextureName(MODID + “:boots_tutoriel”);
          Quand je mets l’ID de mon mod, eclipse me dis : “cannot be resolved to a variable”

          Et j’ai une autre question, je ne comprends pas ce qu’il faut mettre exactement ici :

          return ModTutoriel.MODID + ":textures/models/armor/tutorial_layer_2.png";
          

          D’après ce que j’ai compris, je dois mettre : iddumod.iddumod après return ?
          Je ne vois pas la différence entre le MODID et ce qui précède

          J’ai lu également le tutoriel sur la création d’un item basique et pourtant je ne comprends pas.

          Merci d’avance 🙂

          1 réponse Dernière réponse Répondre Citer 0
          • Superloup10
            Superloup10 Modérateurs dernière édition par 16 mars 2014, 18:13

            ModTutoriel est le nom de la class principale et MODID est une constance définie dans la class principale.

            Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

            Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

            1 réponse Dernière réponse Répondre Citer 1
            • S
              Sir_Bee dernière édition par 16 mars 2014, 18:24

              Merci !
              Mais j’ai une nouvelle erreur maintenant : “modid cannot be resolved or is not a field”
              Et eclipse me propose create field et create constant

              1 réponse Dernière réponse Répondre Citer 0
              • Superloup10
                Superloup10 Modérateurs dernière édition par 16 mars 2014, 18:29

                Envois ta class principale.

                Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

                Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

                1 réponse Dernière réponse Répondre Citer 0
                • robin4002
                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 16 mars 2014, 19:24

                  Soit dans ta classe principale tu mets :
                  public static final String MODID = “ton id de mod”; comme expliqué dans le tutoriel sur l’item basique.
                  Soit dans la classe de l’armure, tu remplaces ClassePrincipale.MODID par “ton id de mod”.

                  1 réponse Dernière réponse Répondre Citer 0
                  • S
                    Sir_Bee dernière édition par 16 mars 2014, 19:33

                    Merci ! 🙂

                    1 réponse Dernière réponse Répondre Citer 0
                    • azatom
                      azatom dernière édition par 19 mars 2014, 12:12

                      Pas énormément de changements par rapport a la 1.6 😉

                      1 réponse Dernière réponse Répondre Citer 0
                      • L
                        leviator31 dernière édition par 30 mars 2014, 18:14

                        Bonjour à tous, j’ai tenté ce code en modifiant deux trois trucs comme les noms et les textures, mais les objets fonctionnent correctement, cependant, il est impossible de les revêtir en temps qu’armure, il est également impossible de le réparer sur une enclume, je vous met le contenu des deux classes dans un fichier texte: http://dl.pokemon-dimension.com/classes.txt

                        Merci d’avance 👼

                        1 réponse Dernière réponse Répondre Citer 0
                        • Superloup10
                          Superloup10 Modérateurs dernière édition par 30 mars 2014, 18:25

                          Déjà, tu as fail dans le nom de la méthode pour réparer.
                          Ensuite, tu as fail dans l’initialisation des éléments de ton armure.

                          Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

                          Je suis un membre apprécié et joueur, j'ai déjà obtenu 17 points de réputation.

                          1 réponse Dernière réponse Répondre Citer 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 30 mars 2014, 19:13

                            helmet = 0, chestplate = 1, leggings = 2, boots = 3.
                            Seul ton casque est bon, les autres tu as mit les mauvais nombres (dans la classe principale).
                            Et pour l’enclume, voir un message plus haut.

                            1 réponse Dernière réponse Répondre Citer 0
                            • geekuko
                              geekuko dernière édition par 14 avr. 2014, 22:11

                              j’ai tout fais sa marche sauf que je voi pas la texture … help me please

                              1 réponse Dernière réponse Répondre Citer 0
                              • robin4002
                                robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 14 avr. 2014, 22:19

                                Code de ton armure ? Emplacement des fichiers png ?

                                1 réponse Dernière réponse Répondre Citer 0
                                • BlackPanda
                                  BlackPanda dernière édition par 3 juin 2014, 16:40

                                  Salut !

                                  J’ai presque réussi a faire tout ce que tu fait dans ton tutoriel mais j’ai rencontré un problème : les textures de mon armure ne s’affiche pas sur mon joueur.
                                  Je te passe ma classe principale et ma class “Armures”:

                                  package fr.blackpandagaming.dragonadventure.common;
                                  import net.minecraft.creativetab.CreativeTabs;
                                  import net.minecraft.item.Item;
                                  import net.minecraft.item.ItemArmor.ArmorMaterial;
                                  import net.minecraftforge.common.util.EnumHelper;
                                  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 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, dragoniteVerte, dragoniteRouge, dragoniteBleue, dragoniteBlanche, dragoniteNoire, casqueDragoniteBlanche, plastronDragoniteBlanche, pentalonDragoniteBlanche, bottesDragoniteBlanche;
                                  public static ArmorMaterial Armures = EnumHelper.addArmorMaterial("Armures", 25, new int[]{4, 6, 5, 4}, 35);
                                  @EventHandler
                                  public void preInit(FMLPreInitializationEvent event)
                                  {
                                  batonVert = new Batons().setUnlocalizedName("batonVert").setTextureName(MODID + ":baton_vert").setCreativeTab(CreativeTabs.tabMaterials);
                                  batonRouge = new Batons().setUnlocalizedName("batonRouge").setTextureName(MODID + ":baton_rouge").setCreativeTab(CreativeTabs.tabMaterials);
                                  batonBleu = new Batons().setUnlocalizedName("batonBleu").setTextureName(MODID + ":baton_bleu").setCreativeTab(CreativeTabs.tabMaterials);
                                  batonBlanc = new Batons().setUnlocalizedName("batonBlanc").setTextureName(MODID + ":baton_blanc").setCreativeTab(CreativeTabs.tabMaterials);
                                  batonNoir = new Batons().setUnlocalizedName("batonNoir").setTextureName(MODID + ":baton_noir").setCreativeTab(CreativeTabs.tabMaterials);
                                  dragoniteVerte = new Batons().setUnlocalizedName("dragoniteVerte").setTextureName(MODID + ":dragonite_verte").setCreativeTab(CreativeTabs.tabMaterials);
                                  dragoniteRouge = new Batons().setUnlocalizedName("dragoniteRouge").setTextureName(MODID + ":dragonite_rouge").setCreativeTab(CreativeTabs.tabMaterials);
                                  dragoniteBleue = new Batons().setUnlocalizedName("dragoniteBleue").setTextureName(MODID + ":dragonite_bleue").setCreativeTab(CreativeTabs.tabMaterials);
                                  dragoniteBlanche = new Batons().setUnlocalizedName("dragoniteBlanche").setTextureName(MODID + ":dragonite_blanche").setCreativeTab(CreativeTabs.tabMaterials);
                                  dragoniteNoire = new Batons().setUnlocalizedName("dragoniteNoire").setTextureName(MODID + ":dragonite_noire").setCreativeTab(CreativeTabs.tabMaterials);
                                  casqueDragoniteBlanche = new Armures(Armures, 0).setUnlocalizedName("casqueDragoniteBlanche").setTextureName(MODID + ":casquedragonite_blanche");
                                  plastronDragoniteBlanche = new Armures(Armures, 1).setUnlocalizedName("plastronDragoniteBlanche").setTextureName(MODID + ":plastrondragonite_blanche");
                                  pentalonDragoniteBlanche = new Armures(Armures, 2).setUnlocalizedName("pentalonDragoniteBlanche").setTextureName(MODID + ":pentalondragonite_blanche");
                                  bottesDragoniteBlanche = new Armures(Armures, 3).setUnlocalizedName("bottesDragoniteBlanche").setTextureName(MODID + ":bottesdragonite_blanche");
                                  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");
                                  GameRegistry.registerItem(dragoniteVerte, "dragonite_verte");
                                  GameRegistry.registerItem(dragoniteRouge, "dragonite_rouge");
                                  GameRegistry.registerItem(dragoniteBleue, "dragonite_bleue");
                                  GameRegistry.registerItem(dragoniteBlanche, "dragonite_blanche");
                                  GameRegistry.registerItem(dragoniteNoire, "dragonite_noire");
                                  GameRegistry.registerItem(casqueDragoniteBlanche, "casquedragonite_blanche");
                                  GameRegistry.registerItem(plastronDragoniteBlanche, "plastrondragonite_blanche");
                                  GameRegistry.registerItem(pentalonDragoniteBlanche, "pentalondragonite_blanche");
                                  GameRegistry.registerItem(bottesDragoniteBlanche, "bottesdragonite_blanche");
                                  }
                                  @EventHandler
                                  public void init(FMLInitializationEvent event)
                                  {
                                  proxy.registerRender();
                                  }
                                  @EventHandler
                                  public void postInit(FMLPostInitializationEvent event)
                                  {
                                  }
                                  }

                                  Et voici ma class “Armures”:

                                  package fr.blackpandagaming.dragonadventure.common;
                                  import net.minecraft.entity.Entity;
                                  import net.minecraft.entity.player.EntityPlayer;
                                  import net.minecraft.item.ItemArmor;
                                  import net.minecraft.item.ItemStack;
                                  import net.minecraft.potion.Potion;
                                  import net.minecraft.potion.PotionEffect;
                                  import net.minecraft.world.World;
                                  public class Armures extends ItemArmor
                                  {
                                  public Armures(ArmorMaterial material, int type)
                                  {
                                  super(material, 0, type);
                                  }
                                  public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type)
                                  {
                                  if(slot == 2)
                                  {
                                  return DragonAdventure.MODID + ":textures/models/armor/DragoniteBlanche_leyer_2";
                                  }
                                  return DragonAdventure.MODID + ":textures/models/armor/DragoniteBlanche_leyer_1";
                                  }
                                  public boolean getIsRepairable(ItemStack input, ItemStack repair)
                                  {
                                  if(repair.getItem() == DragonAdventure.dragoniteBlanche || repair.getItem() == DragonAdventure.dragoniteBlanche)
                                  {
                                  return true;
                                  }
                                  return false;
                                  }
                                  public void onArmorTick(World world, EntityPlayer player, ItemStack stack)
                                  {
                                  player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 210, 2));
                                  }
                                  }

                                  Petite précision : mes textures ( DragoniteBlanche_leyer_1 et DragoniteBlanche_leyer_2 ) ont était faites avec novaskin, juste au cas ou… 🙂

                                  Cordialement.

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • robin4002
                                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 3 juin 2014, 17:05

                                    Il manque les .png dans la fonction getArmorTexture

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • BlackPanda
                                      BlackPanda dernière édition par 4 juin 2014, 18:26

                                      Merci infiniment ! C’est quand même fou de foirer des textures in game juste pour 3 lettres 😕

                                      Cordialement.

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • BlackPanda
                                        BlackPanda dernière édition par 5 juin 2014, 16:43

                                        Salut,

                                        Je suis désolé de vous déranger encore une foie mais j’aimerais créer plusieurs armures avec des effets ( si possible dans la même class ) mais je n’ais pas très bien compris comment il faut faire, quelqu’un peut-il m’aider ?

                                        Cordialement.

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • Diangle
                                          Diangle dernière édition par robin4002 21 juin 2018, 11:09 5 juin 2014, 17:08

                                          @‘BlackPanda’:

                                          Salut,

                                          Je suis désolé de vous déranger encore une foie mais j’aimerais créer plusieurs armures avec des effets ( si possible dans la même class ) mais je n’ais pas très bien compris comment il faut faire, quelqu’un peut-il m’aider ?

                                          Cordialement.

                                          tien sa devrais marcher ^^

                                          public class NomDeTaClasse extends ItemArmor
                                          {
                                          private ItemArmor.ArmorMaterial material;
                                          {
                                          super(material, 0, type);
                                          this.material = material;
                                          this.setCreativeTab(Class.Tabs);
                                          }
                                          // ton rendu
                                          //ta fonction pour réparer l'item
                                          //la fonction de l'effet
                                          public void onArmorTick(World world, EntityPlayer player, ItemStack stack)
                                          {
                                          if(this.armorType == 0 && this.material == classDeTonArmoreMaterial.ArmoreMaterial)
                                          {
                                          player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 240, 0));
                                          }

                                          voilà ^^

                                          if(this.armorType == 0 && this.material == classDeTonArmoreMaterial.ArmoreMaterial)
                                          

                                          sa veut dire que si l’armure est un casque ET que il est de material quelque chose (exemple classPrincipale.armorBlack)

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 5
                                          • 12
                                          • 13
                                          • 1 / 13
                                          1 sur 247
                                          • Premier message
                                            1/247
                                            Dernier message
                                          Design by Woryk
                                          Contact / Mentions Légales

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB