4.0 KiB
4.0 KiB
🛡️ Validation & Double Confirmation - betterMcCommands
La bibliothèque intègre des mécanismes pour valider les pré-requis métier et sécuriser les actions destructrices ou sensibles.
📑 Sommaire
- 1. Validation Métier au Niveau de la Commande
- 2. Validation au Niveau d'un Argument
- 3. Confirmation Préalable & Double Validation (
.requireConfirmation)
1. Validation Métier au Niveau de la Commande
La méthode .validate(...) permet d'exécuter des assertions logiques avant que le gestionnaire principal ne soit appelé. Si la validation échoue, le message d'erreur est automatiquement envoyé et la commande s'interrompt.
Exemple : Validation simple par prédicat
BetterMcCommands.builder("level-reward")
.playerOnly()
// Teste si le joueur a le niveau requis
.validate(ctx -> ctx.getPlayer().getLevel() >= 10, "Vous devez posséder le niveau 10 minimum !")
.executes(ctx -> {
ctx.replySuccess("Récompense de niveau 10 réclamée !");
})
.register();
Exemple : Validateur complexe (CommandValidator)
BetterMcCommands.builder("claim")
.playerOnly()
.validate(ctx -> {
Player p = ctx.getPlayer();
if (economy.getBalance(p) < 500) {
return ValidationResult.invalid("Solde insuffisant : 500 $ requis.");
}
if (territoryManager.isProtected(p.getLocation())) {
return ValidationResult.invalid("Cette zone est déjà protégée !");
}
return ValidationResult.valid();
})
.executes(ctx -> {
ctx.replySuccess("Territoire revendiqué avec succès !");
})
.register();
2. Validation au Niveau d'un Argument
Vous pouvez également restreindre les valeurs acceptées par un argument :
BetterMcCommands.builder("setprice")
.argument(Arguments.decimal("prix")
// Vérification personnalisée de la valeur
.validate(prix -> prix > 0, "Le prix doit être strictement supérieur à 0 !")
.validate(prix -> prix <= 1000000, "Le prix maximal autorisé est de 1 000 000 $.")
)
.executes(ctx -> {
double prix = ctx.getDouble("prix");
ctx.replySuccess("Prix configuré : <gold>" + prix + " $</gold>.");
})
.register();
3. Confirmation Préalable & Double Validation (.requireConfirmation)
Pour les commandes irréversibles (suppression de données, dissolution de guilde, réinitialisation de statistiques), activez la confirmation préalable avec .requireConfirmation(...) :
BetterMcCommands.builder("disband")
.description("Dissout votre guilde")
.playerOnly()
// Délai de 15 secondes pour confirmer avec message d'avertissement
.requireConfirmation(Duration.ofSeconds(15), "<red><bold>ATTENTION</bold> : Cette action est irréversible ! Retapez <yellow>/disband</yellow> dans les 15 secondes pour confirmer.</red>")
.executes(context -> {
Player p = context.getPlayer();
guildManager.disbandGuild(p);
context.replySuccess("Votre guilde a été dissoute.");
})
.register();
Comment fonctionne le cycle de confirmation ?
- 1ère exécution : L'émetteur tape
/disband.- La commande est suspendue.
- Une demande de confirmation temporaire est enregistrée dans le
ConfirmationManager. - Le message d'avertissement est envoyé au joueur.
- L'événement
CommandConfirmationRequiredEventest diffusé.
- 2ème exécution (dans les 15s) : L'émetteur retape
/disband.- La confirmation active est détectée et consommée.
- Le code du gestionnaire métier
.executes(...)s'exécute normalement.
- Expiration : Si le joueur ne retape pas la commande dans le délai, la confirmation expire automatiquement.
📖 Étape suivante : Découvrez les cooldowns et répétitions dans 06_COOLDOWNS_AND_REPEAT.md.