Création de minerai



  • Bonjour/Bonsoir

    Je suis un jeune novice dans le codage de mods minecraft. M'étant mis en tête de créer de nouveau minerais pour mon mod, j'ai appris à coder tout le basard. Sauf que un détail me manque, celui qui me permettra de déclarer que  mon bloc de minerai un fois récolté, droppera un item autre et nom pas le bloc en lui même (un peut comme le minerai de diamant drop un diamant et pas un bloc de minerai)
    J'avais supposé que comme pour déclarer le niveau du matériaux de récolte:

       public block(Material materialIn)
       {
           super(materialIn);
           this.setHarvestLevel("pickaxe", 2);
       }
    
    

    Il faut déclarer dans la classe du bloc un variable qui indique que le bloc droppera un item. J'ai donc cherché un peu dans les variable disponible mais je n'ai pas vraiment trouvé si il y avait ce que je cherchais.
    Si vous pouviez m'indiquer quelle variable utiliser et comment la configurer (item droppé, nombres d'items droppés, fortune) ça serait pour moi un grand pas en avant.
    Merci d'avance pour vos réponse! 😉


  • Correcteurs

    @Override
    public Item getItemDropped(int meta, Random random, int fortune) {
       return TonMod.tonItemADropper;
    }
    


  • Merci de la vitesse de réponse je vais tester ça dans la journée 😄



  • @'DiabolicaTrix':

    @Override
    public Item getItemDropped(int meta, Random random, int fortune) {
       return TonMod.tonItemADropper;
    }
    

    j'ai pas mal bidouiller avec ce code jusqu'à obtenir quelques chose de stable. Malheureusement pour moi le code final n'a rien donné. J'ai beau faire une classe de type bloc et ajouter la variable (J'ai même dû recoder le bloc en conséquence), je n'obtient toujours pas l'item.
    Voilà le code de la classe:

    
    [size=small**package**] com.mod1.mod.Block;
    
    [size=small**import**] java.util.Random;
    
    [size=small**import**] com.mod1.mod.Init.itemsmod;
    
    [size=small**import**] net.minecraft.block.Block;
    
    [size=small**import**] net.minecraft.block.material.Material;
    
    [size=small**import**] net.minecraft.item.Item;
    
    [size=small**public**] **[size=smallclass]** oreblockRubis **[size=smallextends]** Block
    {
    
    **[size=smallpublic]** oreblockRubis(Material [size=smallmaterialIn])
    {
    **[size=smallsuper]**([size=smallmaterialIn]);
    **[size=smallthis]**.setHarvestLevel([size=small"Pickaxe"], 2);
    }
    
    **[size=smallpublic]** Item getItemDropped(**[size=smallint]** [size=smallmeta], Random [size=smallrandom], **[size=smallint]** [size=smallfortune]) {
    
    **[size=smallreturn]** itemsmod.*[size=smallitemRubis]*;
    
    }
    
    }
    
    

  • Rédacteurs

    Quelle est ta version de forge (1.7 ou 1.8) ?
    Excuse-moi c'est marqué dans le titre, en 1.8 la fonction est :

    
    @Override
    public Item getItemDropped(IBlockState state, Random rand, int fortune)
    {
       return tonItem;
    }
    
    

    Et je te fait remarquer que tu ne respectes pas la convention Java, le nom d'une classe commence par une majuscule



  • @'bodri':

    Quelle est ta version de forge (1.7 ou 1.8) ?
    Excuse-moi c'est marqué dans le titre, en 1.8 la fonction est :

    
    @Override
    public Item getItemDropped(IBlockState state, Random rand, int fortune)
    {
       return tonItem;
    }
    
    

    Et je te fait remarquer que tu ne respectes pas la convention Java, le nom d'une classe commence par une majuscule

    Je ne connaissais pas cette convention x)
    En tout cas je vais tester ce code

    edit: je viens de tester le code et ça marche! je suis aux anges 🙂

    par contre le fortune semble inopérant, j'ai tester sur un peu plus d'une 100ène de minerais récoltés sans obtenir le moindre petit supplément 😢

    en tout cas  c'est un bon gros plus pour toi car tu m'as apporté une aide assez importante! 😄 😄 😄 😄


  • Correcteurs

    Fait attention à override pour être certain d'utiliser la bonne méthode.



  • @'DiabolicaTrix':

    Fait attention à override pour être certain d'utiliser la bonne méthode.

    le soucis c'est que la façon dont je veux l'intégrer dans ma classe fait que le @override ne fonctionne pas, il ne fait que fausser le code


  • Administrateurs

    Si le @Override cause une erreur cela veut dire que la méthode n'existe pas dans la classe mère. C'est pour ça que le @Override ne fonctionnait pas avec le premier code qu'on t'as donné, ce n'était pas la bonne méthode.
    Sur le deuxième code qu'on t'as donné ça devrait fonctionner.



  • @'robin4002':

    Si le @Override cause une erreur cela veut dire que la méthode n'existe pas dans la classe mère. C'est pour ça que le @Override ne fonctionnait pas avec le premier code qu'on t'as donné, ce n'était pas la bonne méthode.
    Sur le deuxième code qu'on t'as donné ça devrait fonctionner.

    d'accord merci beaucoup!
    Par contre je fais comment pour activer la variable fortune? car là elle est inopérante à priori


  • Administrateurs

    Activer ? C'est à dire ?


  • Rédacteurs

    Il demande en fait comment faire pour qu'avec une pioche fortune, il y ai plus de minerais qui drop, il me semble que la variable int fortune se trouvant dans la fonction retourne le niveau de l'enchantement fortune de l'outil mais je ne suis pas sûr, si c'est le cas il faut seulement utiliser cette variable pour effectuer un calcul


  • Administrateurs

    C'est ça, l'int fortune est le niveau de l'enchantement. Mais pour dropper plus il faut utiliser la fonction quantityDropped et non celle-ci.