Class AbstractCommand
java.lang.Object
fr.luc.crcore.util.command.AbstractCommand
- All Implemented Interfaces:
Command
- Direct Known Subclasses:
BaseCommand, SubCommand
Base partagée par
BaseCommand (top-level Bukkit) et SubCommand
(feuille ou groupe imbriqué). Porte tous les champs communs : nom, aliases,
permission, player-only, description, usage, arguments typés, et un registre
de sous-commandes imbriquées.
Une commande peut être :
- feuille : pas de sous-commandes, implémente
execute(CommandContext) - groupe : sous-commandes via
addSubCommand(SubCommand), le routage est récursif. Si aucune sous-commande ne matche,execute(CommandContext)est appelé en fallback (par défaut : liste les sous-commandes). - hybride : groupe ET arguments propres — déconseillé, le routage donne priorité aux sous-commandes.
L'override par les plugins de jeu se fait via replaceSubCommand(String, SubCommand)
(remplacer une sous-commande par nom) ou en sous-classant et en redéfinissant
execute(CommandContext).
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected final voidAjoute un ou plusieurs alias.protected final voidaddSubCommand(SubCommand sub) Enregistre une sous-commande.protected final voidargument(String name, ArgumentType<?> type) Déclare un argument positionnel obligatoire.protected CommandContextbuildContext(org.bukkit.command.CommandSender sender, String label, String[] rawArgs) Parse les arguments raw et construit leCommandContext.protected StringConstruit un usage par défaut à partir du nom et des arguments déclarés.protected booleancheckAccess(org.bukkit.command.CommandSender sender) Check standard de permission + player-only.protected final voiddescription(String description) Description courte affichée dans l'aide.final CommandResultAchemine l'exécution : siargs[0]matche une sous-commande, on recurse dessus avecargs[1..].execute(CommandContext context) Logique métier de la commande.final Optional<SubCommand> findSubCommand(String label) Recherche une sous-commande par nom ou par alias (case-insensitive).final Stringfinal StringgetName()final Stringfinal intfinal Collection<SubCommand> Toutes les sous-commandes enregistrées, dans l'ordre d'insertion.final intfinal StringgetUsage()Usage explicite si défini viausage(String), sinon usage auto-construit.final booleanfinal booleanprotected CommandResultlistSubCommands(CommandContext context) Defaultexecutepour les groupes : affiche la liste des sous-commandes accessibles.protected final voidoptionalArgument(String name, ArgumentType<?> type) Déclare un argument positionnel optionnel (peut être omis par l'utilisateur).protected final voidpermission(String permission) Définit la permission Bukkit requise (ex.protected final voidRestreint l'exécution aux joueurs (refus pour console).final Optional<SubCommand> replaceSubCommand(String name, SubCommand replacement) Remplace une sous-commande existante par son nom.tabComplete(org.bukkit.command.CommandSender sender, String[] args) Auto-complétion récursive : siargsa une seule valeur, suggère les sous-commandes accessibles + les arguments propres.protected final voidUsage explicite (sinon construit automatiquement à partir des arguments).
-
Constructor Details
-
AbstractCommand
-
-
Method Details
-
getName
-
getAliases
- Specified by:
getAliasesin interfaceCommand
-
getPermission
- Specified by:
getPermissionin interfaceCommand
-
isPlayerOnly
public final boolean isPlayerOnly()- Specified by:
isPlayerOnlyin interfaceCommand
-
getDescription
- Specified by:
getDescriptionin interfaceCommand
-
getUsage
Usage explicite si défini viausage(String), sinon usage auto-construit. -
addAlias
Ajoute un ou plusieurs alias. Les aliases sont case-insensitive. -
permission
Définit la permission Bukkit requise (ex."crcore.team.create"). -
playerOnly
protected final void playerOnly()Restreint l'exécution aux joueurs (refus pour console). -
description
Description courte affichée dans l'aide. -
usage
Usage explicite (sinon construit automatiquement à partir des arguments). -
argument
Déclare un argument positionnel obligatoire. -
optionalArgument
Déclare un argument positionnel optionnel (peut être omis par l'utilisateur). -
addSubCommand
Enregistre une sous-commande. LèveIllegalStateExceptionsi une sous-commande du même nom existe déjà (utiliserreplaceSubCommand(String, SubCommand)pour overrider). -
replaceSubCommand
Remplace une sous-commande existante par son nom. Utilisé par les plugins de jeu pour overrider un comportement par défaut.coreCommand.findSubCommand("team") .ifPresent(team -> team.replaceSubCommand("create", new MyCustomCreate(svc)));- Returns:
- l'ancienne sous-commande remplacée, ou
Optional.empty()si aucune n'existait sous ce nom.
-
findSubCommand
Recherche une sous-commande par nom ou par alias (case-insensitive). -
getSubCommands
Toutes les sous-commandes enregistrées, dans l'ordre d'insertion. -
hasSubCommands
public final boolean hasSubCommands() -
getRequiredArgumentCount
public final int getRequiredArgumentCount() -
getTotalArgumentCount
public final int getTotalArgumentCount() -
dispatch
public final CommandResult dispatch(org.bukkit.command.CommandSender sender, String label, String[] args) Achemine l'exécution : siargs[0]matche une sous-commande, on recurse dessus avecargs[1..]. Sinon on appelleexecute(CommandContext)de cette commande. Gère les checks permission / player-only. -
tabComplete
Auto-complétion récursive : siargsa une seule valeur, suggère les sous-commandes accessibles + les arguments propres. Sinon recurse vers la sous-commande qui matche.- Specified by:
tabCompletein interfaceCommand
-
execute
Logique métier de la commande. Override par les sous-classes.Comportement par défaut :
- Si cette commande a des sous-commandes → affiche la liste (aide).
- Sinon → renvoie
CommandResult.invalidUsage().
-
listSubCommands
Defaultexecutepour les groupes : affiche la liste des sous-commandes accessibles. -
buildDefaultUsage
Construit un usage par défaut à partir du nom et des arguments déclarés. -
checkAccess
protected boolean checkAccess(org.bukkit.command.CommandSender sender) Check standard de permission + player-only. -
buildContext
protected CommandContext buildContext(org.bukkit.command.CommandSender sender, String label, String[] rawArgs) Parse les arguments raw et construit leCommandContext.
-