10 mars 2020, 16:07

Bonjour , excellent tuto mais évidemment puisque je poste un commentaire : j’ai un problème étant donné que mon four n’est composé que de 2 slots d’input et 1 slot d’output j’ai du bidouiller un peu le code pour faire quelque chose et quand je met deux items dans les 2 slots d’input et bien…mon jeu crash :

Description: Ticking block entity

java.lang.ArrayIndexOutOfBoundsException: 2
	at raven.tacoscraft.recipes.RecipesCustomFurnace.isSameKey(RecipesCustomFurnace.java:67)
	at raven.tacoscraft.recipes.RecipesCustomFurnace.getSmeltingResult(RecipesCustomFurnace.java:57)
	at raven.tacoscraft.tileentity.TileEntityFactoriteForge.canSmelt(TileEntityFactoriteForge.java:228)
	at raven.tacoscraft.tileentity.TileEntityFactoriteForge.updateEntity(TileEntityFactoriteForge.java:203)
	at net.minecraft.world.World.updateEntities(World.java:2160)
	at net.minecraft.client.Minecraft.runTick(Minecraft.java:2097)
	at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1039)
	at net.minecraft.client.Minecraft.run(Minecraft.java:962)
	at net.minecraft.client.main.Main.main(Main.java:164)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at net.minecraft.launchwrapper.Launch.launch(Launch.java:135)
	at net.minecraft.launchwrapper.Launch.main(Launch.java:28)
	at net.minecraftforge.gradle.GradleStartCommon.launch(Unknown Source)
	at GradleStart.main(Unknown Source)

Voici le crash-report et voici les classes des erreurs en question
La Classe des Recettes :

package raven.tacoscraft.recipes;

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

import net.minecraft.block.Block;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import raven.tacoscraft.Factoria;

public class RecipesCustomFurnace {
	
	  private static final RecipesCustomFurnace smeltingBase = new RecipesCustomFurnace(); 
	  private Map smeltingList = new HashMap(); 
	  
	  public RecipesCustomFurnace()
	    {
	        this.addRecipe(Factoria.itemFactoriteIngot, Factoria.itemTinIngot, new ItemStack(Factoria.itemFactoriteTinIngot));
	        this.addRecipe(Factoria.itemFactoriteIngot, Items.diamond, new ItemStack(Factoria.itemFactoriteDiamondIngot));
	        this.addRecipe(Factoria.itemFactoriteIngot, Factoria.itemVoltitePowder, new ItemStack(Factoria.itemFactoriteVoltiteIngot));
	    }
	  
	  public void addRecipe(ItemStack stack1, ItemStack stack2, ItemStack stack3) 
	    {
	        ItemStack[] stackList = new ItemStack[]{stack1, stack2, stack3};
	        this.smeltingList.put(stackList, stack3);
	    }
	 
	        public void addRecipe(Item item1, Item item2, ItemStack stack) 
	    {
	        this.addRecipe(new ItemStack(item1), new ItemStack(item2), stack);
	    }
	 
	    public void addRecipe(Block block1, Item item2, ItemStack stack) 
	    {
	        this.addRecipe(Item.getItemFromBlock(block1), item2, stack);
	    }
	 
	    
	        
	        public ItemStack getSmeltingResult(ItemStack[] stack) 
	        {
	            Iterator iterator = this.smeltingList.entrySet().iterator();
	            Entry entry;
	     
	            do
	            {
	                if (!iterator.hasNext()) 
	                {
	                    return null; 
	                }
	            entry = (Entry)iterator.next(); 
	        }
	        while (!this.isSameKey(stack, (ItemStack[])entry.getKey())); 
	        return (ItemStack)entry.getValue(); 
	        }
	        
	        private boolean isSameKey(ItemStack[] stackList, ItemStack[] stackList2)
	        {
	            boolean isSame = false; 
	            for(int i=0; i<=2; i++) 
	            {
	                if(stackList[i].getItem() == stackList2[i].getItem())
	                {
	                    isSame = true;
	                }
	                else
	                {
	                    return false; 
	                }
	            }
	            return isSame;
	        }
	        
	        public Map getSmeltingList()
	        {
	            return this.smeltingList;
	        }
	     
	        public static RecipesCustomFurnace smelting()
	        {
	            return smeltingBase;
	        }

		
}

La fonction CanSmelt et Updateentity de la classe TileEntity :

public void updateEntity() 
    {
        if(this.isBurning() && this.canSmelt()) 
        {
            ++this.workingTime; 
        }
        if(this.canSmelt() && !this.isBurning()) 
        {
            this.workingTime = 1; 
        }
        if(this.canSmelt() && this.workingTime == this.workingTimeNeeded) 
        {
            this.smeltItem(); 
            this.workingTime = 0; 
        }
        if(!this.canSmelt()) 
        {
                this.workingTime= 0; 
        }
    }
	    

	
	 private boolean canSmelt()
	    {
	        if (this.contents[0] == null || this.contents[3] == null) 
	        {
	            return false;
	        }
	        else
	        {
	            ItemStack itemstack = RecipesCustomFurnace.smelting().getSmeltingResult(new ItemStack[]{this.contents[0], this.contents[3]}); 
	            if (this.contents[2] == null) return true; 
	            if (!this.contents[2].isItemEqual(itemstack)) return false; 
	            int result = contents[2].stackSize + itemstack.stackSize;
	            return result <= getInventoryStackLimit() && result <= this.contents[2].getMaxStackSize(); }
	    }
	

Ah et mon premier slot d’input est [0] et le deuxième est [3]

Merci d’avance !