--- title: Commandes Portail type: docs weight: 3 --- Commandes pour gerer les portails, fragments et evenements du vide. **Package:** `com.hypixel.hytale.builtin.portals.commands` ## Commandes Joueur ### /leave Quitter le monde portail actuel et retourner au monde d'origine. ``` /leave ``` **Comportement:** - Fonctionne uniquement dans un monde portail - Retire la malediction de tous les items avant de partir - Teleporte le joueur vers l'emplacement du dispositif portail **Implementation:** ```java public class LeaveCommand extends AbstractPlayerCommand { @Override protected void execute(CommandContext context, Store store, Ref ref, PlayerRef playerRef, World world) { PortalWorld portalWorld = store.getResource(PortalWorld.getResourceType()); if (!portalWorld.exists()) { playerRef.sendMessage(MESSAGE_NOT_IN_PORTAL); return; } // Retirer malediction de tous items CursedItems.uncurseAll(player.getInventory().getCombinedEverything()); // Sortir de l'instance InstancesPlugin.exitInstance(ref, store); } } ``` ## Commandes Fragment ### /fragment Commande parente pour gestion fragments. ``` /fragment ``` | Sous-commande | Description | |---------------|-------------| | `timer` | Modifier temps restant fragment | ### /fragment timer Definir le temps restant pour le fragment portail actuel. ``` /fragment timer ``` **Arguments:** | Argument | Type | Description | |----------|------|-------------| | `secondes` | INTEGER | Nouveau temps restant en secondes | **Exemple:** ``` /fragment timer 300 # Definir 5 minutes restantes /fragment timer 60 # Definir 1 minute restante ``` **Implementation:** ```java public class TimerFragmentCommand extends PortalWorldCommandBase { private final RequiredArg remainingSecondsArg; @Override protected void execute(CommandContext context, World world, PortalWorld portalWorld, Store store) { int before = (int) portalWorld.getRemainingSeconds(world); int desired = remainingSecondsArg.get(context); portalWorld.setRemainingSeconds(world, desired); // Rapporte: "Change de {before} a {after}" } } ``` ## Commandes Evenement Vide ### /voidevent Commande parente pour gestion evenement vide. ``` /voidevent ``` | Sous-commande | Description | |---------------|-------------| | `start` | Demarrer un evenement vide | ### /voidevent start Demarrer un evenement invasion du vide dans le monde actuel. ``` /voidevent start [--override] ``` **Flags:** | Flag | Description | |------|-------------| | `--override` | Forcer demarrage meme si pas dans monde portail | **Comportement:** - Si deja dans monde portail avec evenement vide actif: echoue - Si pas dans monde portail sans `--override`: echoue - Avec `--override`: cree configuration monde portail temporaire - Met temps restant a 1 seconde pour declencher evenement vide **Implementation:** ```java public class StartVoidEventCommand extends AbstractWorldCommand { private final FlagArg overrideWorld; @Override protected void execute(CommandContext context, World world, Store store) { PortalWorld portalWorld = store.getResource(PortalWorld.getResourceType()); // Verifier si deja en cours if (portalWorld.exists() && portalWorld.isVoidEventActive()) { context.sendMessage("Evenement vide deja en cours"); return; } // Si pas dans monde portail, requiert --override if (!portalWorld.exists()) { if (!overrideWorld.get(context)) { context.sendMessage("Pas dans monde portail"); return; } // Configurer monde portail temporaire portalWorld.init(portalType, timeLimit, removalCondition, config); } // Declencher evenement vide en mettant timer a 1 seconde portalWorld.setRemainingSeconds(world, 1.0); } } ``` ## Commandes Utilitaires ### /cursehelditem Marquer l'item tenu comme maudit (commande debug/test). ``` /cursehelditem ``` **Comportement:** - Ajoute marqueur malediction a l'item en main principale - Items maudits sont perdus quand joueur meurt dans monde portail ## Classes de Base Commandes ### PortalWorldCommandBase Classe de base pour commandes necessitant un monde portail: ```java public abstract class PortalWorldCommandBase extends AbstractWorldCommand { @Override protected final void execute(CommandContext context, World world, Store store) { PortalWorld portalWorld = store.getResource(PortalWorld.getResourceType()); if (!portalWorld.exists()) { context.sendMessage(MESSAGE_NOT_IN_PORTAL); return; } execute(context, world, portalWorld, store); } protected abstract void execute(CommandContext context, World world, PortalWorld portalWorld, Store store); } ``` ## Enregistrement Commandes Les commandes sont enregistrees dans setup PortalsPlugin: ```java this.getCommandRegistry().registerCommand(new LeaveCommand()); this.getCommandRegistry().registerCommand(new CursedHeldItemCommand()); this.getCommandRegistry().registerCommand(new VoidEventCommands()); this.getCommandRegistry().registerCommand(new FragmentCommands()); ``` ## Messages Les commandes portail utilisent des cles de traduction pour les messages: | Cle | Description | |-----|-------------| | `server.commands.leave.notInPortal` | Pas dans monde portail | | `server.commands.leave.uncursedTemp` | Items ont ete decursifies | | `server.commands.portals.notInPortal` | Pas dans monde portail | | `server.commands.voidevent.start.alreadyRunning` | Evenement vide actif | | `server.commands.voidevent.start.success` | Evenement vide demarre | | `server.commands.fragment.timer.success` | Timer modifie |