1 juil. 2015, 21:18

Désolé de devoir réouvrir ce sujet mais ça évitera d’en recréer un qui traite le même problème. Je voudrai que si mon Item passé en argument du constructeur, soit inutile si il possède déjà un Tag. En gros on ne peut pas réaliser le craft si par-exemple ma batte de baseball possède déjà le NBT Boolean “wasImprovedInClouMode”. Déjà soit je n’ai toujrous rien compris soit je sais pas , mon premier println n’est même pas appelé (celui de la méthode matches()) alors que mon item possède bien un tag, donc logiquement le stackTagCompound ne devrait pas être null, or c’est le second println qui est appelé.
Voici mon code


package fr.mrplaigon.dyingcraft.common.customrecipe;

import net.minecraft.inventory.InventoryCrafting;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import fr.mrplaigon.dyingcraft.common.handler.ItemHandler;
import fr.mrplaigon.dyingcraft.common.item.DyingCraftItemSword;

public class ImprovementsRecipe implements IRecipe
{

private DyingCraftItemSword itemImproved;
private byte statut;

public ImprovementsRecipe(DyingCraftItemSword itemImproved)
{
this.itemImproved = itemImproved;
statut = 0;
}

@Override
public boolean matches(InventoryCrafting craftingTable, World world)
{
ItemStack itemstack = new ItemStack(itemImproved, 1);

if(itemstack.stackTagCompound != null)
{
System.out.println("stackTagCompound non null");
}
else
{
System.out.println("stackTagCompound null");
}

for (int k1 = 0; k1 < craftingTable.getSizeInventory(); ++k1)
{
if(itemImproved.isImprovableInClouMode())
{
if(craftingTable.getStackInSlot(1) != null && craftingTable.getStackInSlot(3) != null && craftingTable.getStackInSlot(4) != null && craftingTable.getStackInSlot(5) != null && craftingTable.getStackInSlot(7) != null)
{
if(craftingTable.getStackInSlot(1).getItem() == ItemHandler.boiteClous && craftingTable.getStackInSlot(3).getItem() == ItemHandler.boiteClous && craftingTable.getStackInSlot(5).getItem() == ItemHandler.boiteClous && craftingTable.getStackInSlot(7).getItem() == ItemHandler.boiteClous && craftingTable.getStackInSlot(4).getItem() == itemImproved)
{
statut = 1;
return true;
}
}
}
if(itemImproved.isImprovableInPoisonMode())
{
if(craftingTable.getStackInSlot(1) != null && craftingTable.getStackInSlot(3) != null && craftingTable.getStackInSlot(4) != null && craftingTable.getStackInSlot(5) != null && craftingTable.getStackInSlot(7) != null)
{
if(craftingTable.getStackInSlot(1).getItem() == ItemHandler.fiolePoison && craftingTable.getStackInSlot(3).getItem() == ItemHandler.fiolePoison && craftingTable.getStackInSlot(5).getItem() == ItemHandler.fiolePoison && craftingTable.getStackInSlot(7).getItem() == ItemHandler.fiolePoison && craftingTable.getStackInSlot(4).getItem() == itemImproved)
{
statut = 2;
return true;
}
}
}
}
return false;
}

@Override
public ItemStack getCraftingResult(InventoryCrafting inventorycrafting)
{
ItemStack itemstack = new ItemStack(itemImproved, 1);
NBTTagCompound compound = new NBTTagCompound();
// if(statut == 1 && !itemstack.stackTagCompound.hasKey("wasImprovedInClouMode"))
// {
// compound.setBoolean("wasImprovedInClouMode", true);
// return itemstack;
// }
// if(statut == 1 && itemstack.stackTagCompound.hasKey("wasImprovedInClouMode"))
// {
// EventHandlerClient.drawCraftPicture(168, 138, new ResourceLocation("dyingcraftmod", "textures/gui/improvements/errorsMessages.png"));
// }
// else if(statut == 2 && !itemstack.stackTagCompound.hasKey("wasImprovedInPoisonMode"))
// {
// compound.setBoolean("wasImprovedInPoisonMode", true);
// return itemstack;
// }
if(statut == 1)
{
compound.setBoolean("wasImprovedInClouMode", true);
}
else
{
compound.setBoolean("wasImprovedInPoisonMode", true);
}
itemstack.setTagCompound(compound);
return itemstack;
}

@Override
public int getRecipeSize()
{
return 9;
}

@Override
public ItemStack getRecipeOutput()
{
return new ItemStack(itemImproved);
}

}