Condition sur un item équipé


  • Correcteurs

    Je sais, un sujet qui ne pèse pas gros mais ça me pose problème ^^'
    J'aimerais mettre en condition un item équipé, comme l'annonce le titre.

    Plus précisément je veux faire deux items, une pièce d'armure (torse) et un "détonateur". En cliquant avec l'item et Si le joueur porte la dite pièce d'armure alors qqch se produit.
    (En l'occurence le type se fait péter avec les explosifs qu'ils portent sur lui, cherchez pas ça intéresse mes joueurs alors bon).

    L'armure c'est fait, l'item ça donne ça:

    :::

    public class ItemDetonateur extends Item
    {
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
        {
    if (!world.isRemote && stack.getItem() == Modpg.bodyKamikaze) //C'est ici que je bute
    {
       world.newExplosion(null, player.posX, player.posY + 1, player.posZ, 2.0F, true, true);
    }
    return stack;
        }
    }
    

    :::

    De plus cette mise en condition me permettra de régler un autre problème sur des armures (dont les effets, vitesse et résistance au knockback s'applique simplement en ayant l'item en main, vous voyez le délire)


  • Moddeurs confirmés Rédacteurs Administrateurs

    ItemStack boots = player.getEquipmentInSlot(1);
    ItemStack leggings = player.getEquipmentInSlot(2);
    ItemStack chestPlate = player.getEquipmentInSlot(3);
    ItemStack helmet = player.getEquipmentInSlot(4);
    Il te suffit ensuite de vérifier que boots n'est pas null et que boots.getItem() == l'item voulu.


  • Correcteurs

    Super, pour le détonateur c'est au poil.

    Concernant les armures ceci dit "encore" un problème de paramètres c'est sur la méthode getArmorTexture, une classe d'armure issu d'un de tes tuto:

    :::

    public class ItemArmorR1 extends ItemArmor
    {
    public ItemArmorR1(ArmorMaterial material, int type)
    {
    super(material, 0, type);
    }
    
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
        public Multimap getAttributeModifiers(ItemStack stack)
        {
           Multimap map = super.getAttributeModifiers(stack);
           map.put(SharedMonsterAttributes.knockbackResistance.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "KnockbackResist", 0.25, 0));
           map.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(field_111210_e, "MovementSpeed", 0.025, 1));
           return map;
        }
    
    public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type)
    {
    if(stack.getItem() == Modpg.bodyStreet1 || stack.getItem() == Modpg.headStreet1 || stack.getItem() == Modpg.bootsStreet1 || stack.getItem() == Modpg.legsStreet1)
    {
    return Modpg.MODID + ":textures/models/armors/street_1_layer_1.png";
    }
    else if(stack.getItem() == Modpg.bodyStreet2 || stack.getItem() == Modpg.headStreet2 || stack.getItem() == Modpg.bootsStreet2 || stack.getItem() == Modpg.legsStreet2)
    {
    return Modpg.MODID + ":textures/models/armors/street_2_layer_1.png";
    }
    else if(stack.getItem() == Modpg.bodyStreet3 || stack.getItem() == Modpg.headStreet3 || stack.getItem() == Modpg.bootsStreet3 || stack.getItem() == Modpg.legsStreet3)
    {
    return Modpg.MODID + ":textures/models/armors/street_3_layer_1.png";
    }
    else if(stack.getItem() == Modpg.bodyKamikaze)
    {
    return Modpg.MODID + ":textures/models/armors/kamikaze_layer_1.png";
    }
    return null;
    }
    }
    

    :::

    J'ai plusieurs armures avec des effets différents et comme je disais avec ce code actuel il suffit d'avoir l'item en main pour bénéficier des effets. Ton indication nécessitant la variable player, comment puis-je l'appeler ici?


  • Moddeurs confirmés Rédacteurs Administrateurs

    Tu as le paramètres entity. Donc

    if(entity instanceof EntityPlayer)
    {
    EntityPlayer player = (EntityPlayer)entity;
    

  • Correcteurs

    Ouki, je garderai ça en tête. Le "instanceof"

    Merci robin.


Log in to reply