--- title: Créer des Commandes type: docs weight: 1 --- Les commandes dans Hytale sont créées en étendant la classe `AbstractCommand`. Cette page couvre les bases de la création et de l'enregistrement des commandes. ## Structure de Base d'une Commande ```java import com.hypixel.hytale.server.core.command.system.AbstractCommand; import com.hypixel.hytale.server.core.command.system.CommandContext; import com.hypixel.hytale.server.core.Message; import java.util.concurrent.CompletableFuture; public class HelloCommand extends AbstractCommand { public HelloCommand() { super("hello", "Envoie un message de salutation"); } @Override protected CompletableFuture execute(CommandContext context) { context.sendMessage(Message.raw("Bonjour, le monde !")); return null; } } ``` ## Constructeurs `AbstractCommand` fournit plusieurs constructeurs : ```java // Nom et description protected AbstractCommand(String name, String description) // Nom, description, et flag de confirmation requise protected AbstractCommand(String name, String description, boolean requiresConfirmation) // Description seule (pour les commandes variantes) protected AbstractCommand(String description) ``` ## Enregistrer des Commandes Enregistrez les commandes dans la méthode `start()` de votre plugin : ```java @Override public void start() { getCommandRegistry().registerCommand(new HelloCommand()); } ``` ## Ajouter des Alias Les commandes peuvent avoir plusieurs noms : ```java public class TeleportCommand extends AbstractCommand { public TeleportCommand() { super("teleport", "Téléporter vers un emplacement"); addAliases("tp", "warp"); } // ... } ``` Les joueurs peuvent maintenant utiliser `/teleport`, `/tp`, ou `/warp`. ## Commande avec Arguments Ajoutez des arguments requis avec `withRequiredArg` : ```java import com.hypixel.hytale.server.core.command.system.AbstractCommand; import com.hypixel.hytale.server.core.command.system.CommandContext; import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg; import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes; // Pour les opérations ECS: import com.hypixel.hytale.component.Ref; // Pour les opérations ECS: import com.hypixel.hytale.server.core.universe.world.storage.EntityStore; import com.hypixel.hytale.server.core.universe.PlayerRef; import com.hypixel.hytale.server.core.asset.type.item.config.Item; import com.hypixel.hytale.server.core.Message; import java.util.concurrent.CompletableFuture; public class GiveCommand extends AbstractCommand { private final RequiredArg targetArg; private final RequiredArg itemArg; public GiveCommand() { super("give", "Donner un item à un joueur"); targetArg = withRequiredArg("player", "Joueur cible", ArgTypes.PLAYER_REF); itemArg = withRequiredArg("item", "Item à donner", ArgTypes.ITEM_ASSET); } @Override protected CompletableFuture execute(CommandContext context) { PlayerRef targetRef = context.get(targetArg); Item item = context.get(itemArg); // PlayerRef fournit un accès direct aux infos du joueur String username = targetRef.getUsername(); // Pour les opérations ECS, utiliser getReference() pour accéder à l'EntityStore // Ref entityRef = targetRef.getReference(); // Donner l'item au joueur... context.sendMessage(Message.raw("Item donné à " + username)); return null; } } ``` ## Arguments Optionnels Ajoutez des arguments optionnels qui n'ont pas besoin d'être spécifiés : ```java private final OptionalArg countArg; public GiveCommand() { super("give", "Donner des items à un joueur"); targetArg = withRequiredArg("player", "Joueur cible", ArgTypes.PLAYER_REF); itemArg = withRequiredArg("item", "Item à donner", ArgTypes.ITEM_ASSET); countArg = withOptionalArg("count", "Nombre d'items", ArgTypes.INTEGER); } @Override protected CompletableFuture execute(CommandContext context) { PlayerRef targetRef = context.get(targetArg); Item item = context.get(itemArg); Integer count = context.get(countArg); // Peut être null int amount = count != null ? count : 1; // Donner les items au joueur... return null; } ``` Utilisation : `/give player123 iron_sword` ou `/give player123 iron_sword --count 5` ## Arguments par Défaut Arguments avec valeurs par défaut : ```java private final DefaultArg countArg; public GiveCommand() { super("give", "Donner des items à un joueur"); countArg = withDefaultArg("count", "Nombre d'items", ArgTypes.INTEGER, 1, "par défaut 1"); } @Override protected CompletableFuture execute(CommandContext context) { int count = context.get(countArg); // Jamais null, utilise la valeur par défaut // ... } ``` ## Arguments Flag Flags booléens qui peuvent être activés : ```java private final FlagArg silentFlag; public BroadcastCommand() { super("broadcast", "Envoyer un message à tous les joueurs"); silentFlag = withFlagArg("silent", "Ne pas afficher le nom de l'expéditeur"); } @Override protected CompletableFuture execute(CommandContext context) { boolean silent = context.provided(silentFlag); // ... } ``` Utilisation : `/broadcast Bonjour à tous ! --silent` ## Arguments Liste Pour les arguments qui acceptent plusieurs valeurs : ```java private final RequiredArg> playersArg; public KickAllCommand() { super("kickall", "Expulser plusieurs joueurs"); playersArg = withListRequiredArg("players", "Joueurs à expulser", ArgTypes.STRING); } @Override protected CompletableFuture execute(CommandContext context) { List players = context.get(playersArg); for (String player : players) { // Expulser chaque joueur } return null; } ``` Utilisation : `/kickall player1 player2 player3` Méthodes d'arguments liste disponibles : - `withListRequiredArg(name, description, argType)` - Liste requise - `withListOptionalArg(name, description, argType)` - Liste optionnelle - `withListDefaultArg(name, description, argType, defaultValue, defaultDesc)` - Liste avec défaut ## Exiger une Confirmation Pour les commandes dangereuses, exigez une confirmation explicite : ```java public class ResetCommand extends AbstractCommand { public ResetCommand() { super("reset", "Réinitialiser toutes les données joueur", true); // requiresConfirmation = true } @Override protected CompletableFuture execute(CommandContext context) { // Ceci ne s'exécute que si --confirm a été fourni resetAllData(); return null; } } ``` Utilisation : `/reset --confirm` ## Permissions Les commandes génèrent automatiquement des permissions basées sur le nom de votre plugin : ``` {group}.{plugin}.command.{commandname} ``` Par exemple : `com.example.myplugin.command.give` Vous pouvez aussi définir une permission personnalisée : ```java public GiveCommand() { super("give", "Donner des items"); requirePermission("myplugin.admin.give"); } ```