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 !