Effet appliqué à une cible



  • C'est encore moi et mes questions  😛

    Vous voyez ce qui se passe quand on lance une potion splash? On jette la potion (clic droit) et l'effet de potion est appliqué à la cible. Je cherche à faire exactement la même chose, mais avec un autre item. Jusqu'à présent, quand je fais un clic droit avec mon item en main, l'effet de potion est appliqué au joueur qui tient l'item et pas à la cible (ce qui n'est pas le but ^^). Auriez-vous par hasard une idée de la façon de procéder pour obtenir ce résultat?



  • Essaie de voir du côté de l'item qui gère de base la potion à lancer, ItemSplashPotion je crois,
    Tu verra dans la fonction onItemRightClick (truc dans le style), qu'elle fait spawn une entité, EntitySplashPotion (truc du genre) de là tu aura toute les carte en main pour re-créer un item qui lance quelque chose

    Après j'ai peut-être pas bien compris ta demander et dans ce cas là si tu souhaite faire clique droit sur une entité (un joueur par exemple) et là lui appliquer un effet de potion il faudra passer par un event, EntityInteractEvent, et prendre le bout de code déjà tout fait dans la classe de la vache lorsque tu interagi avec elle avec un seau pour avoir du lait.



  • @'Ama':

    si tu souhaite faire clique droit sur une entité (un joueur par exemple) et là lui appliquer un effet de potion il faudra passer par un event, EntityInteractEvent, et prendre le bout de code déjà tout fait dans la classe de la vache lorsque tu interagi avec elle avec un seau pour avoir du lait.

    Effectivement, c'est plus quelque chose comme ça que je cherche à faire, et du coup, je comprends mieux pourquoi j'y arrivais pas avec onItemRightClick ^^

    Je te remercie, je vais essayer ça tout à l'heure!



  • SI tu le souhaite, j'ai fait un tutoriel sur les stick (je fait ma pub ^^) dedans il y a le fameux onIremRightClick et toutes ses déclarations, tu peu le trouver dans la section tutoriel des utilisateurs ^^



  • Oui mais du coup il sert à rien vu que c'est une interaction directe avec une entité, je pense que l'event c'est plus adapté



  • @'Tituya':

    SI tu le souhaite, j'ai fait un tutoriel sur les stick (je fait ma pub ^^) dedans il y a le fameux onIremRightClick et toutes ses déclarations, tu peu le trouver dans la section tutoriel des utilisateurs ^^

    Oui mais du coup il sert à rien vu que c'est une interaction directe avec une entité, je pense que l'event c'est plus adapté



  • Effectivement, j'ai déjà essayé de procéder comme ça, mais ça ne convient pas, parce qu'avec onItemRightClick, l'effet de potion s'applique au joueur et non à la cible.

    Je pense aussi que l'event est la solution pour mon problème, mais je galère un peu ^^ du coup j'y retourne, je vous tiens au courant, merci pour vos réponses 🙂


  • Rédacteurs

    N'utilisez pas un event, il existe une focntion pour ça : ```java
    public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer playerIn, EntityLivingBase target, EnumHand hand)



  • C'est exactement ce qu'il me fallait! Et ça marche impeccable! Merci beaucoup!

    EDIT: je ré-ouvre mon sujet juste pour une petite question. Quand on fait un clic droit sur un bloc avec un item en main, il y a une animation (mouvement de la main) mais il n'y a pas d'animation quand on fait un clic droit sur une entité. Est-il possible de faire en sorte d'avoir cette animation quand on fait un clic droit sur une entité?


  • Rédacteurs

    As-tu retourné true à la fonction ?



  • Oui, voici mon code (au final j'ai remplacé l'effet de potion que je voulais au départ par des dégâts infligés à la cible, ce qui convient encore mieux à ce que je voulais faire):

    @Override
    public boolean itemInteractionForEntity(ItemStack itemstack, EntityPlayer player, EntityLivingBase target, EnumHand hand)
    {
    if (target instanceof EntityZombie)
    {
       target.attackEntityFrom(DamageSource.GENERIC, 6);
       itemstack.damageItem(-1, player);
       player.playSound((net.minecraft.util.SoundEvent) net.minecraft.util.SoundEvent.REGISTRY.getObject(new ResourceLocation(
    ("entity.lightning.impact"))), 1.0F, 1.0F);
    
       return true;
       }
    return super.itemInteractionForEntity(itemstack, player, target, hand);
       }