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
.
Avez-vous l'annotation '@ EventHandler'? – Li357
"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
L'objet Player est-il créé ou échoue-t-il sur cette ligne? –