• 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

Résolu Item à planter ET manger

1.8.x
1.8.9
4
9
1.5k
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.
  • VoraX
    VoraX dernière édition par 15 mai 2016, 16:04

    [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 réponse Dernière réponse Répondre Citer 0
    • BrokenSwing
      BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 15 mai 2016, 16:16

      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 réponse Dernière réponse Répondre Citer 1
      • robin4002
        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 15 mai 2016, 16:16

        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 réponse Dernière réponse Répondre Citer 0
        • VoraX
          VoraX dernière édition par 15 mai 2016, 19:22

          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 réponse Dernière réponse Répondre Citer 0
          • BrokenSwing
            BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 15 mai 2016, 22:21

            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 réponse Dernière réponse Répondre Citer 0
            • AymericRed
              AymericRed dernière édition par 15 mai 2016, 22:21

              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 réponse Dernière réponse Répondre Citer 0
              • VoraX
                VoraX dernière édition par 16 mai 2016, 00:53

                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 réponse Dernière réponse Répondre Citer 0
                • BrokenSwing
                  BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 16 mai 2016, 08:50

                  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 réponse Dernière réponse Répondre Citer 0
                  • VoraX
                    VoraX dernière édition par 16 mai 2016, 12:06

                    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 réponse Dernière réponse Répondre Citer 0
                    • 1 / 1
                    8 sur 9
                    • Premier message
                      8/9
                      Dernier message
                    Design by Woryk
                    Contact / Mentions Légales

                    MINECRAFT FORGE FRANCE © 2018

                    Powered by NodeBB