• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Solved Item à planter ET manger

    1.8.x
    1.8.9
    4
    9
    1368
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • VoraX
      VoraX last edited by

      [font=Ubuntu, sans-serifJe suis sur Eclipse avec forge-1.8.9-11.15.1.1722-mdk .]

      [font=Ubuntu, sans-serifBonjour, après avoir réussi à faire mon orge (planté avec des graines, avec 7 états de croissance, et dropant à maturité des graines et leur “fruit”), j’aimerais faire quelque chose dans le même genre, mais avec une variante.]

      [font=Ubuntu, sans-serifJ’ai farfouillé un peu dans les fichiers du jeu, Eclipse, à la recherche des codes relatifs aux carottes. ]
      Mes recherches m’ont apporté une seule chose: ItemSeedFood.
      Peut-être cela a-t’il un rapport avec ce que je veux faire?

      Car oui, mon but est là:
      Créer une un item qui se mange ET se plante, en sachant que la plante ne drope que cet item en quantité définie (ou entre telle et telle quantité).

      Merci!

      Je suis la terreur un quart née!
      #Diablo #HOTS

      1 Reply Last reply Reply Quote 0
      • BrokenSwing
        BrokenSwing Moddeurs confirmés Rédacteurs last edited by

        C’est simple, tu fait de la même façon que pour une culture normale sauf que ta graine n’est plus un ItemSeed mais un ItemSeedFood

        public class ItemSeedFood extends ItemFood implements net.minecraftforge.common.IPlantable {
        public ItemSeedFood(int healAmount, float saturation, Block crops, Block soil)
        }
        

        Et ton BlockCrops renvoie le même item pour getSeed() et getCrop() et pour le nombre d’item qui drop il me semble que c’est

        public java.util.List <itemstack>getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune)
        
        ```</itemstack>
        1 Reply Last reply Reply Quote 1
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs last edited by

          Salut,
          Il suffit de regarder le code de la carotte :

          package net.minecraft.block;
          
          import net.minecraft.init.Items;
          import net.minecraft.item.Item;
          
          public class BlockCarrot extends BlockCrops
          {
          protected Item getSeed()
          {
          return Items.carrot;
          }
          
          protected Item getCrop()
          {
          return Items.carrot;
          }
          }
          
          1 Reply Last reply Reply Quote 0
          • VoraX
            VoraX last edited by

            Tout fonctionne bien maintenant, mais je n’y arrive pas avec cette fonction pour le bloc ‘BlockOnion’ :

            [font=monospacepublic][font=monospace java][font=monospace.][font=monospaceutil][font=monospace.][font=monospaceList][font=monospace<][font=monospaceItemStack][font=monospace>][font=monospace getDrops][font=monospace(][font=monospacenet][font=monospace.][font=monospaceminecraft][font=monospace.][font=monospaceworld][font=monospace.][font=monospaceIBlockAccess][font=monospace world][font=monospace,] [font=monospaceBlockPos][font=monospace pos][font=monospace,] [font=monospaceIBlockState][font=monospace state][font=monospace,] [font=monospaceint][font=monospace fortune][font=monospace)]

            Disons par exemple que je veux droper 3 items nommés ‘onion’ , je mets quoi dans cette ligne exactement? Et il ne faut remplacer qu’un seul des mots de cette ligne?

            Je suis la terreur un quart née!
            #Diablo #HOTS

            1 Reply Last reply Reply Quote 0
            • BrokenSwing
              BrokenSwing Moddeurs confirmés Rédacteurs last edited by

              Normalement ça devrait marcher si t’override la fonction, un truc comme ça :

              
              @Override
              public java.util.List <itemstack>getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune)
              {
              java.util.List <itemstack>ret = super.getDrops(world, pos, state, fortune);
              int age = ((Integer)state.getValue(AGE)).intValue();
              
              if (age >= 7)
              {
              ret.add(new ItemStack(this.getSeed(), 3, 0)); //Là tu met ce que tu veut en paramètre, t'es pas débile d'après se que j'ai vu donc tu devrait comprendre
              }
              return ret;
              }
              
              ```</itemstack></itemstack>
              1 Reply Last reply Reply Quote 0
              • AymericRed
                AymericRed last edited by

                Non, il faut changer ce que retourne la fonction :

                public List<itemstack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune)
                {
                List <itemstack>list = new ArrayList();
                list.add(new ItemStack(l\'item, la quantité, la metadata)); 
                list.add(new ItemStack(un autre item, la quantité, la metadata)); 
                //Et ainsi de suite, tu peux aussi faire des loots random en fonction de la fortune
                return list;
                }
                

                Pense à utiliser le state pour savoir si la plante était à maturité.
                EDIT : avec ce que BrokenSwing a mis : “int age = ((Integer)state.getValue(AGE)).intValue();”</itemstack></itemstack>

                Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                1 Reply Last reply Reply Quote 0
                • VoraX
                  VoraX last edited by

                  1ère solution, pas d’erreur, mais droppe beaucoup trop (5 le plus souvent) malgré les réglages à la ligne:
                   ret.add(new ItemStack(this.getSeed(), 1, 3));

                  3 c’est bien le maximum non?

                  Et puis quand j’utilise cette solution, il y a certains items dropés qui n’ont pas de textures, alors que d’autres si, et ce sont les mêmes items!

                  Et puis le ‘(age >= 7)’ comme il y a 0,1,2,3 de croissance, il ne faudrait pas remplacer par 3? Ou alors il se base par rapport au json, et considère qu’il y a 7 formes de croissance, mais qu’on ne voit pas comme il y a 4 textures de croissance?

                  package fr.vorax.egypte.common;
                  
                  import net.minecraft.block.BlockCrops;
                  import net.minecraft.block.state.IBlockState;
                  import net.minecraft.item.Item;
                  import net.minecraft.item.ItemStack;
                  import net.minecraft.util.BlockPos;
                  
                  public class BlockOnion extends BlockCrops
                  {
                      @Override
                      protected Item getSeed()
                      {
                      return ModEgypte.onion;
                      }    
                  
                      @Override
                      protected Item getCrop()
                      {
                          return ModEgypte.onion;
                      }
                  
                      @Override
                      public java.util.List <itemstack>getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune)
                      {
                          java.util.List <itemstack>ret = super.getDrops(world, pos, state, fortune);
                          int age = ((Integer)state.getValue(AGE)).intValue();
                  
                          if (age >= 7)
                          {
                                ret.add(new ItemStack(this.getSeed(), 1, 3));
                          }
                          return ret;
                      }
                  
                  }
                  
                  

                  2ème solution, une erreur à list.add(new ItemStack(onion, 2, 0));

                  package fr.vorax.egypte.common;
                  
                  import java.util.ArrayList;
                  import java.util.List;
                  
                  import net.minecraft.block.BlockCrops;
                  import net.minecraft.block.state.IBlockState;
                  import net.minecraft.item.Item;
                  import net.minecraft.item.ItemStack;
                  import net.minecraft.util.BlockPos;
                  import net.minecraft.world.IBlockAccess;
                  
                  public class BlockOnion extends BlockCrops
                  {
                      @Override
                      protected Item getSeed()
                      {
                      return ModEgypte.onion;
                      }    
                  
                      @Override
                      protected Item getCrop()
                      {
                          return ModEgypte.onion;
                      }
                  
                      public List <itemstack>getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune)
                      {
                      List <itemstack>list = new ArrayList();
                      list.add(new ItemStack(onion, 2, 0)); 
                      //Et ainsi de suite, tu peux aussi faire des loots random en fonction de la fortune
                      return list;
                      }
                  
                  }
                  
                  

                  Une autre petite chose dont je ne m’étais pas rendu compte, piétiner les cultures (sauter dessus quoi) enlève la terre cultivée pour remettre le bloc de terre d’origine, mais la plante reste en place.
                  Comment faire pour que cette plante disparaisse et drope un item quand elle n’est pas à maturité et plusieurs items quand elle est à maturité?</itemstack></itemstack></itemstack></itemstack>

                  Je suis la terreur un quart née!
                  #Diablo #HOTS

                  1 Reply Last reply Reply Quote 0
                  • BrokenSwing
                    BrokenSwing Moddeurs confirmés Rédacteurs last edited by

                    Oui, désolé j’avais pas vu le super, ça donne plus un truc comme ça :

                    
                    @Override
                    public java.util.List <itemstack>getDrops(net.minecraft.world.IBlockAccess world, BlockPos pos, IBlockState state, int fortune)
                    {
                    java.util.List <itemstack>ret = new ArrayList<itemstack>();
                    int age = ((Integer)state.getValue(AGE)).intValue();
                    
                    if (age >= 7)
                    {
                    ret.add(new ItemStack(this.getSeed(), 3, 0)); //CTRL + CLIC sur ItemStack -> ItemStack(Item itemIn, int amount, int meta), si tu met 3 en metadata c'est normal qu'il y est des problèmes de texture
                    }
                    return ret;
                    }
                    
                    

                    Pour ce qui est que la plante reste, je ne sais pas je vais voir et si jamais lorsque la plante se casse (par exemple si tu casse le bloc sur lequel elle est posée) et que ça ne drop pas 1 graine (comme le font la plupart des plantes de minecraft) Il fait que tu rajoute 1 graine à la list de drop en dehors de la condition de maturité et le reste à l’intérieur de la condition. Pour ce qui est de la propriétée AGE, il y a bien 8 states de qui vont de 0 à 7 (cf net.minecraft.block.BlockCrops), même si on utilise seulement 4 textures se qui correspond à 1 texture = 2 states

                    Pour la deuxième solution, ton problème et que tu as mal compris, il faut remplacer onion par l’item de tu veut droper (au pire met this.getSeed())</itemstack></itemstack></itemstack>

                    1 Reply Last reply Reply Quote 0
                    • VoraX
                      VoraX last edited by

                      C’est vrai que j’aurais dû faire un ctrl + clic gauche, m’enfin c’est bon, comme la 1ère méthode (corrigée) fonctionne, je l’ai adoptée, mais je vous remercie tous quand-même.

                      Ma plante d’onion drope donc 3 onions (oignons en Français pour ceux qui pensent que je ne sais pas écrire!), voilà c’est tout bon, merci!
                      Oui, c’est bien ça alors, il se base au json, mais en temps que joueur lambda, on ne voit que la croissance de la plante via texture, alors que le jeu, lui il sait que la croissance change dans les données, même si la texture est la même.

                      Sujet résolu!

                      Je suis la terreur un quart née!
                      #Diablo #HOTS

                      1 Reply Last reply Reply Quote 0
                      • 1 / 1
                      • First post
                        Last post
                      Design by Woryk
                      Contact / Mentions Légales

                      MINECRAFT FORGE FRANCE © 2018

                      Powered by NodeBB