Recipe aléatoire.



  • Bonjour , j'ai créer il y a peu une machine permettant d'obtenir un oeuf , a partir d'ADN et de sang de grenouille. Cependant j'aimerais que cette machine me donne un oeuf différent sachant qu'il y en a beaucoup. Je cherche donc un système pour ajouter plusieurs récipes pour les deux mêmes items , voici le code de mes recipes :

    package mod.common.block;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import mod.common.item.ItemRegister;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    
    @SuppressWarnings("rawtypes")
    public class AnalyzerRecipes {
    
    private static final AnalyzerRecipes smeltingBase = new AnalyzerRecipes(); //Permet d'instancier votre classe car vous le l'instancierez nul part ailleur
    private Map smeltingList = new HashMap(); //Ceci permet de mettre vos recettes
    
    public AnalyzerRecipes()
    {
    
    this.addRecipe(ItemRegister.itemADNofFrog, ItemRegister.itemSevewithmosquito, ItemRegister.itemEgg); //Ajout d'une recette, on fait un bloc de diamant à partie de deux pommes et une flèche
    
    }
    
    @SuppressWarnings("unchecked")
    public void addRecipe(ItemStack stack1, ItemStack stack2, ItemStack stack3) //Cette fonction de comprend que des ItemStack, c'est celle qui ajoute les recettes à la HashMap
    {
    ItemStack[] stackList = new ItemStack[]{stack1, stack2};
    this.smeltingList.put(stackList, stack3);
    }
    
            public void addRecipe(Item item1, Item item2, Item item3) //1er cas
            {
    this.addRecipe(new ItemStack(item1), new ItemStack(item2), new ItemStack(item3));
    
            }
    
            public ItemStack getSmeltingResult(ItemStack[] stack) //En argument : un tableau avec le contenu des trois slots d'input
        {
            Iterator iterator = this.smeltingList.entrySet().iterator();
            Entry entry;
    
            do
            {
                if (!iterator.hasNext()) // Si il n'y a plus de recettes dans la liste
                {
                    return null; //Il n'y a pas de recette correspondante
                }
                   entry = (Entry)iterator.next(); //prend la recette suivante
               }
               while (!this.isSameKey(stack, (ItemStack[])entry.getKey())); //Check si le tableau passé en argument correspond à celui de la recette, vous avez une erreur ici, on crée la fonction tout de suite.
    
               return (ItemStack)entry.getValue(); //retourne l'itemstack : resultat de la recette
         }
    
            private boolean isSameKey(ItemStack[] stackList, ItemStack[] stackList2)
        {
        boolean isSame = false; //Au début ce n'est pas la même
        for(int i=0; i<=1; i++) // Pour les 2 items
        {
        if(stackList*.getItem() == stackList2*.getItem()) //On vérifie si ce sont les même
        {
        isSame = true; // Si c'est le cas alors isSame vaut true
        }
        else
        {
        return false; //Si un seul n'est pas bon, on cherche pas, c'est pas la bonne recette
        }
        }
        return isSame;
        }
    
            public Map getSmeltingList()
        {
               return this.smeltingList;
            }
    
            public static AnalyzerRecipes smelting()
            {
            return smeltingBase;
            }
    }
    
    

    J'ai essayé en ajoutant une deuxieme recette au début comme ceci :

    this.addRecipe(ItemRegister.itemADNofFrog, ItemRegister.itemSevewithmosquito, ItemRegister.itemEgg2); 
    
    

    Sauf que la il ne me donne que la dernière ligne que j'ai mis donc il ne me donne que L'egg2 et pas l'egg 1 , je voulais faire avec if et else if mais je n'ai rien a mettre dans le if (????).

    Y a t-il avec minecraft une fonction avec if () avec fonction de chance donc 0.98% possible d'avoir l'egg 2 par exemple ?

    Merci à ceux qui m'aideront 🙂



  • Tu peux créer une classe implements IRecipe qui te permettra de faire ce que tu veux avec les crafts.


  • Administrateurs

    En effet, la fonction addRecipe ne te permet pas de faire ce que tu veux.



  • J'ai essayé de voir avec les codes de Minecraft et ca a l'air compliqué , je débute donc j'ai essayé avec les codes etc mais c'est trop compliqué pour moi et je tiens vraiment a avoir plusieurs items en output 😕



  • Désolé du double poste je ne fais que demander une chose je ne peut pas faire ca par exemple ?

    Random r = new Random();
    int i = 0 + r.nextInt(50 - 0);
    
    if (i > 5 && i < 10)
    {
    
    public AnalyzerRecipes()
    {
    
    this.addRecipe(ItemRegister.itemADNofFrog, ItemRegister.itemSevewithmosquito, ItemRegister.itemEgg); //Ajout d'une recette, on fait un bloc de diamant à partie de deux pommes et une flèche
    
    }
    }
    
    else
    {
    public AnalyzerRecipes1()
    {
    
    this.addRecipe(ItemRegister.itemADNofFrog, ItemRegister.itemSevewithmosquito, ItemRegister.itemEgg2); //Ajout d'une recette, on fait un bloc de diamant à partie de deux pommes et une flèche
    
    }
    }
    


  • Non car ce sera à chaque initilaisation du jeux, regarde çà : http://www.minecraftforgefrance.fr/showthread.php?tid=2192



  • Arf donc si je fait ca ca risque de buger , car IRecipe a l'air complexe a mettre en place je vais d'abord m'occuper de mes autres problèmes , ma dimension , je ne passe pas en résolu j'aurais surement encore besoin d'aide pour ca 🙂



  • Salut Legrandfifou,

    Je ne sais pas si depuis le temps tu as résolu ton problème, mais j'avais un soucis similaire que j'ai pu contourner de la façon suivante.

    Plutot que de faire la même recette pour plusieurs items, pourquoi ne pas essayer de faire une recette unique qui te donnera par exemple un "Oeuf Mystère ", puis dans la classe de l'item Oeuf Mystère, appeler une méthode onItemRightClick qui return un Oeuf tiré aléatoirement dans une table ?
    Ci-joint, un bout de mon code si jamais ça peut t'aider !

    public class DoggyBag extends Item
    {
    public static final ItemStack new1 = new ItemStack(RegistryFood.ailerons_poulet);
    public static final ItemStack new2 = new ItemStack(RegistryFood.biscuitFade);
    public static final ItemStack new3 = new ItemStack(RegistryFood.chewingGums);
    public static final ItemStack new4 = new ItemStack(RegistryFood.jambonBeurre);
    public static final ItemStack new5 = new ItemStack(RegistryFood.napolitainsMoisis);
    public static final ItemStack new6 = new ItemStack(RegistryFood.nouillesChinoises);
    public static final ItemStack new7 = new ItemStack(RegistryFood.paquetChips);
    public static final ItemStack new8 = new ItemStack(RegistryFood.petitsBeurres);
    public static final ItemStack new9 = new ItemStack(RegistryFood.pims_perimes);
    ItemStack[] DoggyBagTable = {new1,new2,new3,new4,new5,new6,new7,new8,new9};
    
    public DoggyBag()
    {
    this.setCreativeTab(CreativeTabs.tabMisc);
    this.setMaxStackSize(1);
    }
    
    @Override
    public ItemStack onItemRightClick(ItemStack itemStack, World world,EntityPlayer player)
    {
    int lower = 0;
    int higher = 9;
    
    int random = (int)(Math.random() * (higher-lower)) + lower;
    
    return DoggyBagTable[random];
    }
    }
    

    En espérant avoir pu t'aider au moins provisoirement !
    Bonne fin d'après midi,
    Myrilandel



  • Salut Myrilandel , wow j'ai totalement résolu le problème depuis longtemps et j'ai oublié de passer en résolu mais ca s'avère utile pour ceux qui recherche la fonction 🙂