Un item mangeable



  • Salut !
    Je fais un tutoriel sur comment créer un item qui se mange !

    Crée votre item

    Commencez par déclarer votre item :

    public static Item TutorialEgg;
    

    Sans oublier d'importer "Item.java"
    Ajoutez ensuite dans la fonction "PreInit" :

    TutorialEgg = new ItemTutorialEgg(ID, Gigot, Saturation, Nourriture loup).setUnlocalizedName("TutorialEgg").setTextureName("modtutoriel:ChocolateEgg");
    

    ID = L'id de votre Item(int)
    Gigot = le nombre de demi-gigot qui seront régénérés (int 5 par exemple),
    Saturation = la saturation de votre nourriture (Float, 1.5F par exemple),
    Nourriture loup = Si la nourriture est pour les loups (boolean, false = non et true = oui)

    ItemFoodTuto est souligné, car il faut créer cette classe, dans la seconde partie du tuto 😄 !

    Optionnel, enregistrez l'item :

    GameRegistry.registerItem(TutorialEgg, "TutorialEgg", "ModTutoriel");
    

    Pour la texture et le nom, le principe est le même que pour un item basique.

    La classe de l'item

    Créez la classe ItemFoodTuto, et mettez ce code dedans :

    package tutoriel.common;
    
    import net.minecraft.item.ItemFood;
    
    public class ItemTutorialEgg extends ItemFood
    {
        public ItemTutorialEgg(int id, int foodAmount, float saturation, boolean isWolfFood)
        {
            super(id, foodAmount, saturation, isWolfFood);
        }
    }
    

    Si vous voulez que votre item puisse se boire, rajoutez :

       public EnumAction getItemUseAction(ItemStack par1ItemStack)
       {
           return EnumAction.drink;
       }
    

    Ajouter un effet à votre item lorsqu'il est mangé

    Pour ce faire, ajoutez dans votre item dans le "PreInit" :

    .setPotionEffect(Potion.confusion.id, 30, 0, 1.0F)
    

    Potion.confusion.id = Remplacez par Potion.votreEffet.id,
    30 = Durée de l'effet
    0 = Force (speed 1, speed 2 par exemple)
    1.0F = Chance en % d'avoir l'effet (1.0F étant 100%, 0.1F pour avoir 10%)

    Attention, cette méthode se trouve dans ItemFood, pour qu'elle fonctionne, utilisez cette syntaxe :

    TutorialEgg = (new ItemTutorialEgg(TutorialEggID, 5, 4.5F, false)).setPotionEffect(Potion.regeneration.id, 5, 1, 1.0F)…...
    

    Le setPotionEffect doit être avant le .setUnlocalizedName

    Voir sur github

    Voila, ce tutoriel est finis !
    Laissez un commentaire, aimez mon message !
    À plus pour d'autres tutos 😄

    Questions/Réponses

    Q : Comme rendre l'item mangeable même quand la barre de faim est pleine ?
    R : De la même façon que pour setPotionEffect, ajoutez .setAlwaysEdible() dans la déclaration de l'item avant le .setUnlocalizedName


  • Moddeurs confirmés Rédacteurs Administrateurs

    Bon tutoriel, je valide et j'ajoute au menu 🙂



  • Merci 🙂



  • Salut,

    Quand tu dis " Si vous voulez que votre item puisse se boire, rajoutez : (…) return EnumAction.eat; ", faut pas plutôt remplacer par return EnumAction.drink; ?

    Et tu pourrais rajouter la méthode pour garder le récipient? Je crois que c'est celle-ci :

    public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
    super.onEaten(par1ItemStack, par2World, par3EntityPlayer);
    return new ItemStack(bowlEmpty)
    }
    

    (d'ailleurs j'ai un petit problème avec cette méthode, impossible de remplacer bowlEmpty par un objet que j'ai moi-même créer sans avoir une erreur)


  • Administrateurs

    @'Minecraftienne':

    public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
    super.onEaten(par1ItemStack, par2World, par3EntityPlayer);
    return new ItemStack(bowlEmpty)
    }
    

    (d'ailleurs j'ai un petit problème avec cette méthode, impossible de remplacer bowlEmpty par un objet que j'ai moi-même créer sans avoir une erreur)

    Hm… ça te mets quoi exactement comme erreur ?



  • Si je fais : return new ItemStack(ChopeDeBiereVide);
    => ChopeDeBiereVide cannot be resolved to a variable

    Mais je vois pas pourquoi le bol vide est une variable 0_o Faut que je rajoute une méthode dans la classe de mon objet pour que les objets puissent s'empiler non?



  • Tu as raison minecraftienne, j'ai changé par "drink", et pour récupérer le bol, il faut ajouter ceci :

    public ItemStack onEaten(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
    super.onEaten(par1ItemStack, par2World, par3EntityPlayer);
    return new ItemStack(taClassPrincipale.taChopeDeBiereVide);
    }
    

    Et remplace :
    taClassPrincipale par tu sais quoi ^^ (ta class principale) , et taChopeDeBiereVide par ton item qui sera donné après avoir bût (surement) ta bière 🙂



  • Merci ça fonctionne 😉



  • Derien 🙂


  • Moddeurs confirmés Rédacteurs Administrateurs

    @'Minecraftienne':

    Mais je vois pas pourquoi le bol vide est une variable 0_o Faut que je rajoute une méthode dans la classe de mon objet pour que les objets puissent s'empiler non?

    La classe de ton Item est extends ItemFood et ItemFood est extends Item, comme les items vanilles sont déclarés dans Item.java, bowlEmpty est valide, tout comme this.bowlEmpty l'est aussi.
    Donc pour les items de ton mod il faut bien mettre la classe principale devant.

    Voila pour l'explication 😉

    Ha, en passant :
    https://github.com/MCNanotech/ModTutoriel/commit/1515e305c61b6f8c26cf3b1b32d9c3bc0e9d3887
    J'ai aussi modifier un peu le tutoriel, j'ai ajouté l'enregistrement de l'item (qui reste optionnel), la texture, le nom et j'ai enlevé les importations inutiles dans la classe de l'item



  • Très bon tutoriel, ça marche à merveille 😉 J'aimerais savoir comment faire pour pouvoir manger l'item sans que notre barre de faim sois descendu, comme pour les pommes d'or par exemple (j'ai chercher et j'ai pas trouver :/) merci de vos réponses ! 🙂


  • Moddeurs confirmés Rédacteurs Administrateurs

    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
    return stack;
    }
    

    Je crois que c'est ça.



  • Merci pour la réponse robin, ça marche nickel ! Un tuto sur les générations bientôt ? 🙂



  • @'robin4002':

    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
    return stack;
    }
    

    Je crois que c'est ça.

    Y'a un autre code laaaaaargement plus simple, si je le retrouve x)



  • Impossible pour moi de mettre le setpotion effect…
    Suis-je le seul à avoir se problème ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Quel erreur eclipse te donne ?



  • @'robin4002':

    Quel erreur eclipse te donne ?

    Aucune erreur, mais quand je créé mon item ainsi : ```java
    StrangeCupcake = new ItemStrangeCupcake(6047, 7, 1, false).setUnlocalizedName("StrangeCupcake").setTextureName("landcast:strangecupcake").setCreativeTab(CreativeTabs.tabFood).setPotionEffect(Potion.confusion.id, 30, 0, 1.0F);

    Il me souligne le .setpotioneffect en disant qu'il n'existe pas…

  • Moddeurs confirmés Rédacteurs Administrateurs

    Pourtant cette fonction existe bien dans ItemFood, vérifie que ItemStrangeCupcake est extends ItemFood



  • Le set potion effect est aussi buggé chez moi, j'utilise un autre code plus simple (onEaten ou un autre truc dans le genre)



  • @'robin4002':

    Pourtant cette fonction existe bien dans ItemFood, vérifie que ItemStrangeCupcake est extends ItemFood

    Vérifié, il est bien en extends ItemFood…


Log in to reply