Stoper L'utilisationd'un objet, pendant un event de type "EntityInteractEvent"



  • Bonjour à tous , 
    J'ai un petit soucis dans mon code. 
    Voici le contexte : 
    J'ai un Pnj qui ouvre une interface lorsqu'un joueur clique droit dessus. Le problème est que le clique droit est aussi le bouton pour utiliser l'objet en main.
    Ce qui a pour conséquence d'utiliser un arc , un morceau de pain , ou consommer une potion !!
    Pourtant quand on clique droit sur un coffre, il n'y a pas ce problème , lorsqu’un joueur clique droit sur un coffre , l'item en main réagit comme si le joueur fessais un clique gauche, alors qu'il vient de faire un clique droit pour ouvrir le coffre !

    Je voudrais savoir comment reproduire ce mécanisme pour que les items en main ne soient pas consommés quand un joueur clique droit sur mon PNJ.

    
    @SubscribeEvent
    public void onPlayerInteractPnjToServer(EntityInteractEvent event)
    {
    // On test si un joueur a fait un clique droit sur un des PNJ de ce mods.
    EntityLivingBase entity = (EntityLivingBase) event.target;
    String nameTarget = entity.getClass().getSimpleName().toLowerCase();
    if(!Utilities.isModedEntity(nameTarget)) return;
    
    // Ici on sais que le joueur vient de faire un clique droit sur un PNJ, donc on désactive l'event et l'item en main.
    EntityPlayer player = event.entityPlayer;
    event.setCanceled(true);
    player.clearItemInUse();
    player.stopUsingItem();
    // …
    // ...
    }
    
    

    Mais pour le moment l'item dans la main du joueur est toujours utilisé ! 
    Une personne est déjà tombé sur cette problématique ? 
    L'astuce serais d'utiliser le même mécanisme que pour un clique droit sur un coffre , mais je n'ai rien trouvé  :(.

    Merci de votre aide.



  • L'utilisation de l'item quand on utilise un coffre est annulé car la fonction onBlockActivated du coffre retourne true, je vais regarder comment reproduire ça avec ton event.
    EDIT : j'ai regardé dans les classes et normalement ça devrait annuler le l'utilisation de l'item.



  • Ha d'accort , alors je me dis qu'il existe peut être une fonction de ce style pour les Entity , "onEntityActivated" peut être.
    Et que par conséquence le code qui ouvre mon interface devrait plutôt être dans une telle fonction , que dans ma fonction qui récupère un EntityInteractEvent ?
    EDIT: J'ai trouvé une fonction "interact()", pour une Entity.