Créer un outil mangeable



  • Bonjour,

    Aussi étrange et loufoque que ça peut-être, j'ai besoin de créer un kit d'outils "mangeable".

    J'ai donc essayé d'implémenter la classe ItemFood à ItemSword sans grand succès. Je ne peut pas non plus faire extends ItemSword et ItemFood à la classe de l'outil.

    J'ai donc trouvé une solution : j'ai modifié la classe de l'outil pour que quand on clique droit avec, on obtient un item avec le même nom et la même texture qui lui est mangeable et l'outil se consume.

    Code de la classe de mon outil :

    
    package com.squixdev.cookieparty.item;
    
    import com.squixdev.cookieparty.common.CookieParty;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Items;
    import net.minecraft.item.Item;
    import net.minecraft.item.Item.ToolMaterial;
    import net.minecraft.item.ItemStack;
    import net.minecraft.item.ItemSword;
    import net.minecraft.world.World;
    
    public class ItemCookieSwordNormal extends ItemSword
    {
    public ItemCookieSwordNormal(ToolMaterial material)
    {
    super(material);
    }
    
    @Override
    public ItemStack onItemRightClick(ItemStack stack, World par2World,
    EntityPlayer p) {
    p.inventory.addItemStackToInventory(new ItemStack(CookieParty.cookieSwordNormalEat));
    p.inventory.consumeInventoryItem(stack.getItem());
    // TODO Auto-generated method stub
    return super.onItemRightClick(stack, par2World, p);
    }
    
    public boolean getIsRepairable(ItemStack input, ItemStack repair)
    {
    if(repair.getItem() == Items.cookie)
    {
    return true;
    }
    return false;
    }
    }
    
    

    Code de la classe de l'item mangeable :

    
    package com.squixdev.cookieparty.item;
    
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.ItemFood;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
    
    public class ItemCookieSwordNormalEat extends ItemFood {
    
    public ItemCookieSwordNormalEat(int foodAmount, float saturation, boolean isWolfFood)
    {
    super(foodAmount, saturation, isWolfFood);
    }
    
    }
    
    

    Et voilà le problème ! J'aimerais que l'item qui est donné "suive" en quelque sorte l'action du clique droit (onItemRightClick) et se mette automatiquement à être mangé ! De plus, il faudrait que le joueur reçoivent l'item mangeable à l'emplacement où se trouvait l'outil.

    C'est peut-être impossible, mais bon je tente le coup, alors si vous pouvez me donner des pistes ou m'aider, n'hésitez pas !

    Merci d'avance,

    Squix


  • Administrateurs

    Salut,
    Pas besoin d'avoir deux items.

    package fr.minecraftforgefrance.tutoriel.common;
    
    import java.util.List;
    
    import net.minecraft.command.IEntitySelector;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.monster.EntityMob;
    import net.minecraft.entity.passive.EntityAnimal;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.EnumAction;
    import net.minecraft.item.ItemStack;
    import net.minecraft.item.ItemSword;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.util.ChatComponentTranslation;
    import net.minecraft.world.World;
    
    public class ItemTutoSword extends ItemSword
    {
    public ItemTutoSword(ToolMaterial material)
    {
    super(material);
    }
    
    public boolean getIsRepairable(ItemStack input, ItemStack repair)
    {
    if(repair.getItem() == ModTutoriel.itemTutoriel)
    {
    return true;
    }
    return false;
    }
    
    public EnumAction getItemUseAction(ItemStack stack)
    {
    return EnumAction.eat;
    }
    
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    if (player.canEat(false)) // a mettre sur true pour que le joueur puisse manger même si il a la barre de fin pleins
    {
    player.setItemInUse(stack, this.getMaxItemUseDuration(stack));
    }
    return stack;
    }
    
    public int getMaxItemUseDuration(ItemStack stack)
    {
    return 32;
    }
    
    public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player)
    {
    –stack.stackSize;
    player.getFoodStats().addStats(4, 4); // nombre de demi-jambon + saturation
    world.playSoundAtEntity(player, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F);
    return stack;
    }
    }
    


  • Merci beaucoup robin !