2017-06-30 1 views
2

Vous cherchez le bon événement pour travailler avec. Je veux vérifier si un joueur a fait un clic droit sur un autre joueur.Comment vérifier si un joueur a cliqué avec le bouton droit sur un autre joueur

C'est ce que j'ai jusqu'à présent (ne fonctionne pas ne pas entrer dans le if ou la déclaration else.

public void onPlayerRightClicks(PlayerInteractEntityEvent e) { 
    Player p=e.getPlayer(); 
    if(e.getRightClicked() instanceof Player) p.sendMessage("You have rightclicked a player."); 
    else p.sendMessage("You didn't hit anyone with your spell"); 
} 
+0

Avez-vous l'annotation '@ EventHandler'? – Li357

+0

"Ne pas entrer dans l'instruction if ou else" Cela signifie que ce rappel n'est jamais appelé. Montrer plus de code s'il vous plaît. – davidxxx

+0

L'objet Player est-il créé ou échoue-t-il sur cette ligne? –

Répondre

0

a trouvé la réponse à la question en combinant mon propre code avec les codes d'une autre réponse sur une question similaire:

@SuppressWarnings("deprecation") 
@EventHandler 
public void onPlayerClick(PlayerInteractEvent e) { 
    Player p=e.getPlayer(); 
    NBTItem item = new NBTItem(p.getItemInHand()); 
    Entity en=getNearestEntityInSight(p,5); 
    if(e.getAction()==Action.RIGHT_CLICK_AIR && en instanceof Player) p.sendMessage("You have rightclicked a player."); 
    else p.sendMessage("You didn't hit anyone with your spell"); 
} 

public static Entity getNearestEntityInSight(Player player, int range) { 
    ArrayList<Entity> entities = (ArrayList<Entity>) player.getNearbyEntities(range, range, range); 
    ArrayList<Block> sightBlock = (ArrayList<Block>) player.getLineOfSight(null, range); 
    ArrayList<Location> sight = new ArrayList<Location>(); 
    for (int i = 0;i<sightBlock.size();i++) 
     sight.add(sightBlock.get(i).getLocation()); 
    for (int i = 0;i<sight.size();i++) { 
     for (int k = 0;k<entities.size();k++) { 
      if (Math.abs(entities.get(k).getLocation().getX()-sight.get(i).getX())<1.3) { 
       if (Math.abs(entities.get(k).getLocation().getY()-sight.get(i).getY())<1.5) { 
        if (Math.abs(entities.get(k).getLocation().getZ()-sight.get(i).getZ())<1.3) { 
         return entities.get(k); 
        } 
       } 
      } 
     } 
    } 
    return null; 
} 

Même si cela fonctionne, je ne pense pas que ce soit une réponse optimale, car il devrait y avoir un événement qui permet de vérifier si oui ou non un joueur rightclicked ou au moins leftclicked un autre joueur Le.La méthodetrouve l'entité la plus proche aux yeux du joueur. Je l'ai combiné avec mon code qui s'exécute quand un joueur clique à droite, en utilisant le PlayerInteractEvent.

+1

Cela me semble trop compliqué; Je ne vois vraiment pas l'intérêt d'utiliser 'PlayerInteractEvent' au lieu de' PlayerInteractEntityEvent'. – AscendedKitten