30 juin 2015, 19:51

Bonsoir tout le monde
Je recrée le même sujet que l’autre tout à l’heure qui a subi un bug entraînant sa suppression. Bref je redis tout pour les nouveaux. Je souhaite qu’en craftant un item celui-ci ait un de ses NBT qui change de valeur (un boolean, de false à true) . J’avoue ne pas avoir compris les NBT et autres valeurs assignés aux items malgré le fait d’avoir regardé de nombreux tutoriels. Voici mes classes


package fr.mrplaigon.dyingcraft.common.handler;

import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import cpw.mods.fml.common.registry.GameRegistry;
import fr.mrplaigon.dyingcraft.common.item.DyingCraftItemSword;

public class CraftingHandler 
{

public static void initRecipes()
{
GameRegistry.addRecipe(new ItemStack(ItemHandler.bandage), new Object[]{"   ", "XXX", "   ", 'X', ItemHandler.tissu});
GameRegistry.addRecipe(new ItemStack(ItemHandler.kitSoin), new Object[]{"   ", "XYX", "   ", 'X', ItemHandler.bandage, 'Y', ItemHandler.alcool});
GameRegistry.addRecipe(new ItemStack(ItemHandler.kitSecours), new Object[]{"   ", "XYX", "   ", 'X', ItemHandler.bandage, 'Y', ItemHandler.desinfectant});

Item batteBaseballClouee1 = ItemHandler.batteBaseball;
((DyingCraftItemSword)batteBaseballClouee1).setWasImprovedInClouMode(true);
ItemStack batteBaseballClouee2 = new ItemStack(batteBaseballClouee1, 1);
GameRegistry.addRecipe(batteBaseballClouee2, new Object[]{" X ", "XYX", " X ", 'X', ItemHandler.boiteClous, 'Y', ItemHandler.batteBaseball});

Item batteBaseballPoison1 = ItemHandler.batteBaseball;
((DyingCraftItemSword)batteBaseballPoison1).setWasImprovedInPoisonMode(true);
ItemStack batteBaseballPoison2 = new ItemStack(batteBaseballPoison1, 1);
GameRegistry.addRecipe(batteBaseballPoison2, new Object[]{" X ", "XYX", " X ", 'X', ItemHandler.fiolePoison, 'Y', ItemHandler.batteBaseball});
}
}

package fr.mrplaigon.dyingcraft.common.item;

import java.util.List;

import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import fr.mrplaigon.dyingcraft.common.core.DyingCraftMod;

public class DyingCraftItemSword extends ItemSword 
{

private boolean isImprovableInClouMode;
private boolean isImprovableInPoisonMode;

private boolean wasImprovedInClouMode;
private boolean wasImprovedInPoisonMode;

public DyingCraftItemSword(ToolMaterial toolmaterial) 
{
super(toolmaterial);
}
public DyingCraftItemSword(ToolMaterial toolmaterial, boolean isImprovableInClouMode, boolean isImprovableInPoisonMode)
{
super(toolmaterial);
this.setCreativeTab(DyingCraftMod.newCreativeTab);
this.isImprovableInClouMode = isImprovableInClouMode;
this.isImprovableInPoisonMode = isImprovableInPoisonMode;
}

public boolean isImprovableInClouMode() 
{
return isImprovableInClouMode;
}

public void setImprovableInClouMode(boolean isImprovableInClouMode) 
{
this.isImprovableInClouMode = isImprovableInClouMode;
}

public boolean isImprovableInPoisonMode() 
{
return isImprovableInPoisonMode;
}

public void setImprovableInPoisonMode(boolean isImprovableInPoisonMode) 
{
this.isImprovableInPoisonMode = isImprovableInPoisonMode;
}

    public boolean isWasImprovedInClouMode() 
    {
return wasImprovedInClouMode; 
}
public void setWasImprovedInClouMode(boolean wasImprovedInClouMode) 
{
this.wasImprovedInClouMode = wasImprovedInClouMode;
}

public boolean isWasImprovedInPoisonMode() 
{
return wasImprovedInPoisonMode;
}
public void setWasImprovedInPoisonMode(boolean wasImprovedInPoisonMode) 
{
this.wasImprovedInPoisonMode = wasImprovedInPoisonMode;
}

/**public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity)
    {
    stack.stackTagCompound = new NBTTagCompound();
    if(this.isImprovableInClouMode)
    {
    stack.stackTagCompound.setBoolean("isImprovableInClouMode", this.isImprovableInClouMode);
    }
    if(this.isImprovableInPoisonMode && player.isSneaking())
    {
    stack.stackTagCompound.setBoolean("isImprovableInPoisonMode", this.isImprovableInPoisonMode);
    }
        return false;
    }*/

    public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean par4) 
    {
    if(stack.stackTagCompound != null)
    {
    if(this.isImprovableInClouMode && stack.stackTagCompound.hasKey("wasImprovedInClouMode"))
    {
    String information = "Mode clou activé";
    list.add(information);
    System.out.println("clou mode activé ?");
    }
    if(this.isImprovableInPoisonMode && stack.stackTagCompound.hasKey("wasImprovedInPoisonMode"))
    {
    String information = "Mode poison activé";
    list.add(information);
    System.out.println("Poison mode activé ?");
    }
    }
    }

    public void onCreated(ItemStack stack, World world, EntityPlayer player) 
    {
    stack.stackTagCompound = new NBTTagCompound();
    if(this.isImprovableInClouMode)
    {
    stack.stackTagCompound.setBoolean("wasImprovedInClouMode", this.wasImprovedInClouMode);
    }
    if(this.isImprovableInPoisonMode)
    {
    stack.stackTagCompound.setBoolean("wasImprovedInPoisonMode", this.wasImprovedInPoisonMode);
    }
    }
}

Je voudrai juste vous expliquer les variables isImprovableIn…Mode sont là pour le constructeur car certaines armes sont améliorables en certains modes, d’autres non. Les variables wasImprovedIn…Mode sont là pour dire si l’arme vient d’être amélioré et surtout là pour l’enregistrement des 2 NBTTagCompound.

Merci d’avance 🙂