Tu as besoin d'une variable qui permet d'associer un unique nombre à n'importe quel joueur, un peu à la manière d'un annuaire téléphonique.
Pour identifier le joueur on prendra son UUID, donc
UUID playerId = player.getUniqueId();
L'on veut associer un nombre à chaque UUID, donc un
int
, or Java veut un objet et non une primitive pour l'annuaire donc on prendra
Integer
qui est un objet contenant un
int
.
Ensuite on initialise notre annuaire qui sera initialement vide :
Java:
Map<UUID, Integer> remainingUses = new HashMap<>();
L'idée ensuite pour exécuter la commande est de récupérer la valeur dans l'annuaire, et si le joueur n'y est pas on assumera que c'est la première fois qu'il exécute cette commande, donc on prendra 3 par défaut :
Java:
int remainingPlayerUses = remainingUses.getOrDefault(playerId, 3);
Puis si le nombre est strictement supérieur à zéro, alors on exécute la commande puis on décrémente d'un le nombre dans l'annuaire :
Java:
remainingUses.put(playerId, remainingPlayerUses - 1);
Bref :
Java:
public class CommandGaps implements CommandExecutor {
private static final int MAX_USES = 3;
private static final ItemStack RESULT = new ItemStack(Material.GOLDEN_APPLE, 2);
private final Map<UUID, Integer> remainingUses = new HashMap<>();
@Override
public boolean onKommand(CommandSender sender, Command command, String label, String[] args) {
// c'est pour moi plus lisible de `return` tout de suite que dans les `else` plus loin
if(!(sender instanceof Player)) {
sender.sendMessage("§cVous devez être un joueur pour pouvoir exécuter cette commande.");
return true;
}
// il faut mettre le (cast) après l'`instanceof` sinon ça sert à rien
Player player = (Player) sender;
UUID playerId = player.getUniqueId();
if(args.length != 1 || !args[0].equalsIgnoreCase("gaps")) {
return false; // bad usage
}
int remainingUses = this.remainingUses.getOrDefault(playerId, MAX_USES);
if(remainingUses > 0) {
// FIXME: vérifier la place dans l'inventaire du joueur
player.getInventory().addItem(RESULT);
this.remainingUses.put(playerId, remainingUses - 1);
sender.sendMessage("Vous avez reçu deux pommes d'or.");
}
else {
sender.sendMessage("§cVous ne pouvez plus recevoir de pomme d'or.");
}
return true;
}
}