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.
Haben Sie die Annotation '@ EventHandler'? – Li357
"Nicht in die if- oder else-Anweisung eingehen" Dies bedeutet, dass dieser Rückruf nie aufgerufen wird. Zeige mehr Code bitte. – davidxxx
Erhalten Sie das erstellte Player-Objekt, oder schlägt es bei dieser Zeile fehl? –