Les recettes


  • Administrateurs

    Vous savez maintenant créer des blocs et des items plus ou moins complexes mais … vous ne pouvez que les obtenir en créatif ou par give. Nous allons donc voir comment ajouter une recette.

    À la fin de la méthode Init(FMLInitializationEvent event), après le commentaire //recipe, ajoutez ceci :

    GameRegistry.addRecipe(new ItemStack(BlockTutorial), new Object[]{"XXX", "ZYZ", "XXX", 'X', Block.blockLapis,
    'Y', new ItemStack(Item.dyePowder, 1, 15), 'Z', new ItemStack(Item.dyePowder, 1, 6)});
    

    GameRegistry.addRecipe revient au même que GameRegistry.addShapedRecipe
    On a comme paramètre un ItemStack BlockTutorial, c'est la sortie, et ensuite un tableau d'objet qui sont l'entré. Il y a 3 String qui se suivent : la ligne du haut, celle du milieu, puis celle du bas. Ensuite on défini chaque caractère. Le caractère 'X' correspond au bloc Block.blockLapis, 'Y' correspond à un ItemStack(Item.dyePowder, 1, 15).
    Vous pouvez faire correspondre un caractère à un bloc, item ou à un itemstack.
    Pour utiliser les metadata vous devez créer un itemstack, comme je l'ai fais pour les colorants : new ItemStack(item ou bloc, quantité, metadata).

    Résultat :

    Autre exemple avec une sortie en metadata :

    GameRegistry.addRecipe(new ItemStack(TutorialMetadata, 4, 2), new Object[]{"XXX", "XXX", " ", 'X', Block.stone});
    

    D'ailleurs vous pouvez aussi voir que j'ai laissé la troisième ligne vide, le résultat est donc :
    Ne fonctionne pas. | Fonctionne
    Même principe pour les lignes de gauche à droite, vous pouvez faire : "XX ", "XX ", "YY ", …

    En revanche, si je ne met pas de troisième ligne, comme ceci :

    GameRegistry.addRecipe(new ItemStack(TutorialMetadata, 4, 1), new Object[]{"XXX", "XXX", 'X', Block.dirt});
    

    Fonctionne | Fonctionne aussi
    Même principe pour les lignes de gauche à droite, vous pouvez faire : "XX", "XX", "YY", … et le craft fonctionnera soit à droite, soit à gauche de la table de craft.

    Et pour finir, les sharpeless recipe :

    GameRegistry.addShapelessRecipe(new ItemStack(ItemTutorial, 2), new Object[]{ new ItemStack(Item.dyePowder, 1, 15), new ItemStack(Item.dyePowder, 1, 6)});
    

    Cette fois-ci, pas de caractère (char) ni de chaîne de caractère (String), on met tout à la suite, et le résultat est qu'il n'y a pas de sens pour la recette :

    Il suffit juste que les 2 colorants soient dans la table de craft pour que la recette fonctionne.

    Voir sur github



  • Y a t'il un document qui recense les différents bloc et items vanilla du jeu ?

    Pour mes différentes recettes j'utilise la roche le sable le verre et le bloque de fer . Pour les dernier j'ai trouvé dans le code source ( Block.stone, BlockSand.sand, BlockGlass.glass ) par contre je ne trouve pas pour le bloc de fer.

    Alors au lieux de vous demander quel est l'objet pour le bloc le bloc de fer je me demande si il y a pas qque part une liste complète.

    salutation.



  • Il me semble que c'est SteelBlock
    Mais j'ai un doute


  • Administrateurs

    @'ulysse1976':

    …BlockSand.sand, BlockGlass.glass...

    Euh ? xD C'est plutôt : Block.sand, Block.glass ! 😉

    Et pour le block de fer : Block.blockIron 🙂


  • Administrateurs

    Vas dans la classe Block.java, tu trouvera ce que tu cherche :
    public static final Block <ici le nom à mettre après block.>
    Même chose pour dans Item.java :
    public static final Item



  • @'elias54':

    @'ulysse1976':

    …BlockSand.sand, BlockGlass.glass...

    Euh ? xD C'est plutôt : Block.sand, Block.glass ! 😉

    Et pour le block de fer : Block.blockIron 🙂

    oui c surement mieux d'utiliser Block.sand … , mais comme j'utilisais ce que je trouvais lol . BlockSand.sand fonctionne (BlockSand dérivé de Block)


    @'robin4002':

    Vas dans la classe Block.java, tu trouvera ce que tu cherche :[…]

    Merci bien !



  • Je te propose de regarder dans la classe "Block.java" du package "net.minecraft.block", il y a tous les blocs référencés ainsi que les caractéristiques. 🙂

    Tu fais un petit "Ctrl + F" pour rechercher ton bloc. Surtout coche bien la case "Whole word" sinon tu risque d'avoir quelques surprises.

    Tu as la même chose pour les items dans une classe Item.java je crois.*

    EDIT : Epic fail Robin est passé juste devant moi 😛



  • bonjour

    j'ai le problème suivant :

    pour terminer mon craft j'ai besoin de savoir l'endroit du blocs hardenedclay organge (qui n'existe pas après 1 heures de recherche).
    il y a t'il un rapport avec le data values ?


  • Administrateurs

    Exactement :

    new ItemStack(Block.field_111039_cA, 1, 14)
    (vive les nom pas mappés, je sais pas ce que fait la team de mcp)



  • Ouaip, les "fields" sont devenus mes peurs de la programmation 😉



  • Salut,

    je me suis mis depuis quelques temps (4 jours) au modding, par curiosité (j'aime bien fouiller dans les codes ^^) et j'ai intégré quelques bases comme créer un bloc, une recette, un item…etc

    Seulement, une fois le premier "mod" comoilé et testé, je me suis posé une question : Peut-on modifier/shunter/désactiver une recette de façon non invasive évidement (cad sans changer le code de minecraft)

    J'ai fait quelques recherches et j'ai fini, au bout d'une soirée de labeur par pouvoir réécrire une recette du four(avec "GameRegistry.addsmelting..."), ce qui m'a permis de changer la recette du lingot de fer (le minerai de fer me donne un lingot d'or au lieu de fer dans mon exemple, j'ai réinventé l'alchimie ^^). Seulement, pas moyen de trouver un moyen pour pouvoir shunter une recette de crafting plus "classique", dison que je voudrais par exemple qu'un stick ne se fabrique plus avec deux blocs de planches superposées, mais trois (oui, je peux créer une recette avec trois bloc, mais elle ne remplace pas l'originale).

    J'ai bien trouver quelques allusions à une fonction "findMatchingRecipe" dans le "CraftingManager", mais d'une part elle ne permet que de ressortir une recette pas moyen de la modifier ensuite et d'autre part, je n'arrive pas à maitriser les paramètres qui entrent en ligne de compte.

    Des pistes sur ce sujet?(j'espère avoir été assez clair)

    Edit : En continuant de farfouiller, je suis tombé là dessus. En modifiant quelques petites choses pour l'adapter (notamment pour pouvoir travailler avec les ShapelessOreRecipe et les ShapedOreRecipe), ce petit bout de code permet de supprimer une recette de la liste. il m'a juste suffit d'en insérer une nouvelle pour "modifier" une recette originale (et ainsi fabriquer des bâtons non plus avec 2 mais trois planches superposées. J'aurais aimé quelque chose de plus pratique, mais, même si la modification est évoquée plusieurs fois sur le site de Mojang, elle reste toujours dans le fond des tiroirs ^^'



  • Si j'ai bien compris tu veux supprimé une recette existante, pour la remplaçais par la tienne ?
    Si c'est le cas, approfondis t'est recherche sur le forum, le problème a déjà été exposé il me semble ;).
    Cordialement.



  • En effet, j'ai poussé un peu ma recherche sur le forum (et surtout j'ai recherché un texte et plus le pseudo "recette"… -_-)

    http://www.minecraftforgefrance.fr/showthread.php?tid=107&pid=1233#pid1233

    J'ai survolé le code, et il ressemble fortement à celui que j'ai trouvé (c'est d'ailleurs le même forum). C'est tout de même dommage qu'une solution plus accessible ne soit pas prévue, surtout que c'est extrêmement simple dans le cas d'une recette de four (qui remplace automatiquement sur un "addsmelting"). J'aime les solutions élégantes ^^



  • XD
    Pourtant j'ai fais comme on me l'a montrai x).



  • Merci pour le tuto 😉

    Il y aurais moyen d'utiliser des potions dans le craft ? Si oui comment, merci ^^


  • Administrateurs

    GameRegistry.addRecipe(new ItemStack(Item.potion, 1, 8259), new Object[] {"X", 'X', Block.glass});
    Pour le métadata, le mieux est de regarder en jeu avec NEI ou TMI.



  • Merci de la réponse 😛

    PS: C'est possible d'ajouter un effet 'enchanté' sur un objet quelconque ? (Oui j'en demande beaucoup 🙂 )


  • Administrateurs



  • @robin4002
    Attention robin4002, il demande pas comment ajouté un enchantement, mais L'EFFET d'un enchantement.

    @Artnerm
    Vue que j'ai peinai un peu a trouvais, je te passe le code a mètre directement dans la classe de ton item:

    @SideOnly(Side.CLIENT)
    public boolean hasEffect(ItemStack par1ItemStack)
    {
        return true;
    }
    

    Voila :).



  • Comment fais-t'on un craft avec un four ?
    Cela aurai été intéressant à aborder.