Recipe…



  • Hello, aujourd'hui j'ai changé toute ma classe pour qu'elle accepte les ItemStack.Donc j'ai suivi le tuto de BrokenSwing
    Mais quand J'ajoute mes recettes

    public LaserCutterRecipe()
       {
           this.addRecipe(Items.apple, new ItemStack(Blocks.diamond_block)); //Ajout d'une recette, on fait un bloc de diamant à partie de deux pommes et une flèche
           this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,0), new ItemStack(TAqmod2.dustOre,9,0));
           this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,1), new ItemStack(TAqmod2.dustOre,9,1));
           this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,2), new ItemStack(TAqmod2.dustOre,9,2));
           this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,3), new ItemStack(TAqmod2.dustOre,9,3));
           this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,4), new ItemStack(TAqmod2.dustOre,9,4));
           this.addRecipe(Blocks.iron_ore, new ItemStack(TAqmod2.dustOre,9,6));
           this.addRecipe(Blocks.gold_ore, new ItemStack(TAqmod2.dustOre,9,7));
       }
    
    

    il check juste le premier recipe , c'est a dire que par exmple il a vu que c'est du lead ore donc il me donne du lead dust Mais quand je met du silver ore il me donne du lead dust.
    du coup j'ai exactement le meme code dans le tuto…
    Une idée?


  • Administrateurs

    Heu ? Ta fonction addRecipe fait quoi ?
    http://www.minecraftforgefrance.fr/showthread.php?tid=1436



  • je me suis mal exprimé….Il s'agit d'un Gui donc d'une machine. Bref voila ma class Recipe au cas où ```java
    package block;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;

    import tileEntity.TileEntityGenerator;
    import tileEntity.TileEntityLaserCutterMachine;
    import cpw.mods.fml.common.registry.GameRegistry;
    import main.TAqmod2;
    import net.minecraft.block.Block;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemBlock;
    import net.minecraft.item.ItemStack;
    import net.minecraftforge.oredict.OreDictionary;

    public class LaserCutterRecipe {
    /*
    public LaserCutterRecipe(){

    }

    public static ItemStack getGenResult(Item item) {

    return getOutput(item);
    }

    public static ItemStack getOutput(Item item) {

    if (item instanceof ItemBlock && Block.getBlockFromItem(item) != Blocks.air)
    {
    Block block = Block.getBlockFromItem(item);

    if(block == Blocks.iron_ore)return new ItemStack(TAqmod2.dustOre,9,6);
    if(block == Blocks.gold_ore)return new ItemStack(TAqmod2.dustOre,9,7);
    if(block == TAqmod2.oreBlockTAq.getBlockFromName("oreCopper"))return new ItemStack(TAqmod2.dustOre,9,0);

    }

    if(item == Items.apple)return new ItemStack(Items.diamond,9);

    return null;
    }
    / public static ItemStack getOutput(Item item){

    if(stack == new ItemStack(TAqmod2.oreBlockTAq,1,0))return new ItemStack(TAqmod2.dustOre,9,0);

    return null;

    } */
    private static final LaserCutterRecipe smeltingBase = new LaserCutterRecipe(); //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 LaserCutterRecipe()
    {
    this.addRecipe(Items.apple, new ItemStack(Blocks.diamond_block)); //Ajout d'une recette, on fait un bloc de diamant à partie de deux pommes et une flèche
    this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,0), new ItemStack(TAqmod2.dustOre,9,0));
    this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,1), new ItemStack(TAqmod2.dustOre,9,1));
    this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,2), new ItemStack(TAqmod2.dustOre,9,2));
    this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,3), new ItemStack(TAqmod2.dustOre,9,3)); //<--- BUGGED
    this.addRecipe(new ItemStack(TAqmod2.oreBlockTAq,1,4), new ItemStack(TAqmod2.dustOre,9,4));
    this.addRecipe(Blocks.iron_ore, new ItemStack(TAqmod2.dustOre,9,6));
    this.addRecipe(Blocks.gold_ore, new ItemStack(TAqmod2.dustOre,9,7));
    }

    public void addRecipe(ItemStack stack1, ItemStack stack4) //Cette fonction de comprend que des ItemStack, c'est celle qui ajoute les recettes à la HashMap
    {
    ItemStack[] stackList = new ItemStack[]{stack1};
    this.smeltingList.put(stackList, stack4);
    }

    public void addRecipe(Item item1, ItemStack stack) //1er cas
    {
    this.addRecipe(new ItemStack(item1), stack);
    }

    public void addRecipe(Block block1, ItemStack stack) //2nd cas
    {
    this.addRecipe(Item.getItemFromBlock(block1), stack);
    }

    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<=0; i++) // Pour les 3 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 LaserCutterRecipe smelting()
    {
    return smeltingBase;
    }
    }


  • Administrateurs

    Dans ta fonction isSameKey il faut que tu vérifies le metadata.
    if(stackList*.getItem() == stackList2*.getItem())
    ->
    if(stackList*.getItem() == stackList2*.getItem() && stackList*.getItemDamage() == stackList2*.getItemDamage())



  • Ou Itemstack.areitemstacksequals(stack1,stack2)
    Pas sur du nom de la fonction.



  • Ok merci Robin ça marche nickel. J'avais pas vu pour le metadate ^^