• S'inscrire
    • Se connecter
    • Recherche
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes

    Créer des crafts customs avec l'interface IRecipe

    Tutoriels des membres
    5
    7
    3936
    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.
    • SCAREX
      SCAREX dernière édition par robin4002

      Sommaire

      • Introduction
      • Pré-requis
      • Code
        • Classe principale / Classe d’enregistrement de vos crafts
        • Classe du recipe
      • Résultat
      • En vidéo
      • Crédits

      Introduction

      Vous voulez rajouter un craft plus complexe que ceux proposés par Minecraft ? Voici comment créer son IRecipe custom.

      Pré-requis

      • Créer la base de votre mod
      • Un cerveau en bon état pour comprendre et pouvoir modifier le code donné.

      Code

      Classe principale / Classe d’enregistrement de vos crafts :

      Personnellement je mets les crafts dans la classe des Items. Vous pouvez les mettre à n’importe quel endroit tant qu’ils sont appelés après l’enregistrement de vos items.

      package fr.scarex.tutorialmod.item;
      
      import cpw.mods.fml.common.registry.GameRegistry;
      import fr.scarex.tutorialmod.recipe.BackpackRecipe;
      import net.minecraft.item.Item;
      
      /**
          * @author SCAREX
          * 
          */
      public class TutorialModItems
      {
          public static Item ITEM_BACKPACK;
      
          public static final void registerItems() {
              ITEM_BACKPACK = new ItemBackPack();
          }
      
          public static final void registerItemsCrafts() {
              GameRegistry.addRecipe(new BackpackRecipe());
          }
      }
      

      Classe du Recipe

      Cette classe doit simplement implémenter l’interface IRecipe.

      package fr.scarex.tutorialmod.recipe;
      
      import fr.scarex.tutorialmod.item.TutorialModItems;
      import net.minecraft.block.BlockColored;
      import net.minecraft.init.Items;
      import net.minecraft.inventory.InventoryCrafting;
      import net.minecraft.item.Item;
      import net.minecraft.item.ItemStack;
      import net.minecraft.item.crafting.IRecipe;
      import net.minecraft.nbt.NBTTagCompound;
      import net.minecraft.world.World;
      
      /**
          * @author SCAREX
          *
          */
      public class BackpackRecipe implements IRecipe
      {
          /**
              * The craft matrix
              */
          public static final Item[][] matrix = new Item[][] {
                  new Item[] { Items.paper,
                          Items.paper,
                          Items.paper },
                  new Item[] { Items.paper,
                          Items.dye,
                          Items.paper },
                  new Item[] { Items.paper,
                          Items.paper,
                          Items.paper } };
      
          /**
              * This method is used to check if the matrix corresponds to your craft
              * 
              * @param inv
              *            The crafting table's inventory
              * @param world
              *            The world
              * @return true if the matrix corresponds
              */
          @Override
          public boolean matches(InventoryCrafting inv, World world) {
              for (int i = 0; i < 3; i++) {
                  for (int j = 0; j < 3; j++) {
                      if (!BackpackRecipe.corresponds(BackpackRecipe.matrix[ i ][j], inv.getStackInSlot(i * 3 + j))) return false;
                  }
              }
              return true;
          }
      
          /**
              * This method is used to get the result from the craft relatively to the
              * given inventory
              * 
              * @param inv
              *            The crafting table's inventory
              * @return The result from the craft
              */
          @Override
          public ItemStack getCraftingResult(InventoryCrafting inv) {
              ItemStack stack = new ItemStack(TutorialModItems.ITEM_BACKPACK);
              if (!stack.hasTagCompound()) stack.setTagCompound(new NBTTagCompound());
              stack.getTagCompound().setInteger("Color", BlockColored.func_150032_b(inv.getStackInSlot(4).getItemDamage()));
              return stack;
          }
      
          /**
              * This method should return the size used for the craft
              * 
              * @return The requested size
              */
          @Override
          public int getRecipeSize() {
              return 9;
          }
      
          /**
              * @return An ItemStack to identify the craft
              */
          @Override
          public ItemStack getRecipeOutput() {
              return new ItemStack(TutorialModItems.ITEM_BACKPACK);
          }
      
          /**
              * @param item
              *            The item from your matrix
              * @param stack
              *            The ItemStack from the crafting inventory
              * @return true if the 2 objects correspond
              */
          public static boolean corresponds(Item item, ItemStack stack) {
              // Si les 2 sont "null", on retourne true car il ne doit rien y avoir dans ce slot et il n'y a rien.
              if (stack == null && item == null) return true;
              // Si l'un est null mais pas l'autre, on retourne false (ici j'ai séparé la condition en 2 parties pour plus de clarté)
              if (stack == null && item != null) return false;
              if (stack != null && item == null) return false;
              // Et pour finir si les 2 ne sont pas égaux, on retourne false
              if (stack.getItem() != item) return false;
              // Sinon, on retourne true
              return true;
          }
      }
      
      

      Cette classe doit simplement implémenter l’interface IRecipe.
      Vous allez devoir ré-écrire ces méthodes :

      • matches : cette méthode doit retourner “true” si le craft correspond. ATTENTION : cette méthode est très importante car c’est elle qui va constituer la recette de votre craft.
      • getCraftingResult : cette méthode doit retourner un ItemStack contenant le résultat du craft en fonction de ce qui se trouve dans l’inventaire de la table de craft.
      • getRecipeSize : cette méthode retourne la taille dont vous avez besoin pour votre craft. Si vous n’avez besoin que 2 slots, retournez 2. Cette méthode importe assez peu.
      • getRecipeOutput : retourne un ItemStack pour identifier le craft. Cette méthode a assez peu d’importance mais il faut absolument la compléter.

      La fontion"corresponds" retourne true si l’ItemStack et l’Item correspond, vous devrez changer cette fonction selon vos besoins.

      ATTENTION : Si vous utilisez une variable pour les méthodes getRecipeOutput et getCraftingResult, il faut penser à faire votreItemStack.copy(), sinon vous risquez de modifier le craft de base.

      Résultat

      0_1531658697841_javaw 05-08-2015 00-46-34-937.png

      Liste des commits GitHub :
      Commit initial
      Les commits sur github montrent clairement où ont été placés les fichiers, ainsi que ce qui a été ajouté et retiré dans le fichier.

      Crédits

      Rédaction :

      • SCAREX


      Ce tutoriel de SCAREX publié sur Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

      retourSommaire des tutoriels

      Site web contenant mes scripts : http://SCAREXgaming.github.io

      Pas de demandes de support par MP ni par skype SVP.
      Je n'accepte sur skype que l…

      1 réponse Dernière réponse Répondre Citer 0
      • Flow
        Flow dernière édition par

        Tuto très utile ! Je suppose que ca marche avec une table de craft personnalisé ? C’est Eryah qui va etre content !!

        Oui ce gif est drôle.

        1 réponse Dernière réponse Répondre Citer 0
        • SCAREX
          SCAREX dernière édition par

          Tant que la table de craft en question passe par la classe CraftingManager, oui. Par contre çà marche pas avec NEI, çà fera l’objet d’un bonus.

          Site web contenant mes scripts : http://SCAREXgaming.github.io

          Pas de demandes de support par MP ni par skype SVP.
          Je n'accepte sur skype que l…

          1 réponse Dernière réponse Répondre Citer 0
          • Eryah
            Eryah dernière édition par

            @‘Legrandfifou’:

            Tuto très utile ! Je suppose que ca marche avec une table de craft personnalisé ? C’est Eryah qui va etre content !!

            Je n’utiliserais pas le tuto ( Désolé Scarex :)) Car pour moi, inutile.
            Je me ferais pas chier a faire une classe en plus ( Déjà que c’est le bordel !), alors que je peut faire juste un addCrafting
            Je vois pas l’utilité du truc en plus.
            Je peut comprendre que c’est pour eviter de faire 16 lignes, mais bon.
            Après, je viens de me reveiller, et ma compréhension n’est pas a 100%

            Membre fantôme
            Je développe maintenant un jeu sur UnrealEngine4


            Contact :…

            1 réponse Dernière réponse Répondre Citer 0
            • SCAREX
              SCAREX dernière édition par

              Cette classe ne sera pas utile pour la plupart des gens. Mais elle permet de transférer certaines données lors du craft. Dans ce tuto, je transfer la couleur du colorant dans les NBT du sac. Ce qui n’est pas possible sans cette classe

              Site web contenant mes scripts : http://SCAREXgaming.github.io

              Pas de demandes de support par MP ni par skype SVP.
              Je n'accepte sur skype que l…

              1 réponse Dernière réponse Répondre Citer 0
              • A
                AngelSushi dernière édition par

                Bonjour,

                J’ai du mal à comprendre le tutoriel.Comment pourrais-je faire pour que la sortie de la recette soit comme celle du block de fer. Lorsque je met mon bloque cela me donne 9 minerais ?

                1 réponse Dernière réponse Répondre Citer 0
                • AymericRed
                  AymericRed dernière édition par

                  Salut, tu n’es pas au bon endroit, pour les recettes “simples”, c’est ici https://www.minecraftforgefrance.fr/showthread.php?tid=3917 (ou un endroit différent si tu es en 1.12)

                  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
                  • 1 / 1
                  • Premier message
                    Dernier message
                  Design by Woryk
                  Contact / Mentions Légales

                  MINECRAFT FORGE FRANCE © 2018

                  Powered by NodeBB