2017-06-30 5 views
2

Suchen Sie nach dem richtigen Ereignis, um damit zu arbeiten. Ich möchte überprüfen, ob ein Spieler mit der rechten Maustaste auf einen anderen Spieler geklickt hat.So prüfen Sie, ob ein Spieler mit der rechten Maustaste auf einen anderen Spieler geklickt hat

Dies ist, was ich bisher haben (nicht funktioniert nicht in die if oder else Anweisung bekommen.

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

Haben Sie die Annotation '@ EventHandler'? – Li357

+0

"Nicht in die if- oder else-Anweisung eingehen" Dies bedeutet, dass dieser Rückruf nie aufgerufen wird. Zeige mehr Code bitte. – davidxxx

+0

Erhalten Sie das erstellte Player-Objekt, oder schlägt es bei dieser Zeile fehl? –

Antwort

0

die Antwort auf die Frage gefunden durch meinen eigenen Code mit den Codes von einer anderen Antwort kombiniert auf eine ähnliche Frage:

@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; 
} 

Auch wenn es funktioniert, glaube ich nicht, es ist eine optimale Antwort, wie es sollte ein Ereignis, das, ob ein Spieler einen anderen Spieler rightclicked oder zumindest leftclicked überprüfen Das. getNearestEntitySight Methode findet die nächste Entität im Sichtfeld des Spielers. Ich habe es mit meinem Code kombiniert, der läuft, wenn ein Spieler mit der PlayerInteractEvent einen Rechtsklick macht.

+1

Scheint mir viel zu kompliziert; Ich sehe keinen Sinn darin, 'PlayerInteractEvent' anstelle von' PlayerInteractEntityEvent' zu verwenden. – AscendedKitten

Verwandte Themen