--- title: Composants Portail type: docs weight: 1 --- Les composants portail definissent les structures de donnees pour les dispositifs portail, les mondes portail et les evenements du vide. **Package:** `com.hypixel.hytale.builtin.portals.components` ## PortalDevice Un composant au niveau chunk representant un bloc dispositif portail. ```java public class PortalDevice implements Component { // Configuration pour etats du portail private PortalDeviceConfig config; // Cle type de bloc pour le dispositif portail private String baseBlockTypeKey; // UUID du monde de destination (si actif) private UUID destinationWorldUuid; } ``` ### Acceder aux Dispositifs Portail ```java // Obtenir dispositif portail a position bloc PortalDevice portal = BlockModule.get().getComponent( PortalDevice.getComponentType(), world, x, y, z ); if (portal != null) { // Portail existe a cet emplacement BlockType blockType = portal.getBaseBlockType(); World destination = portal.getDestinationWorld(); } ``` ### Monde de Destination ```java // Definir destination lors activation portail portal.setDestinationWorld(targetWorld); // Obtenir destination (null si inactif ou monde ferme) World destination = portal.getDestinationWorld(); if (destination == null || !destination.isAlive()) { // Destination portail invalide } ``` ## PortalDeviceConfig Configuration pour les etats visuels du dispositif portail. ```java public class PortalDeviceConfig { // Etat quand instance en creation private String spawningState = "Spawning"; // Etat quand portail actif private String onState = "Active"; // Etat quand portail inactif private String offState = "default"; // Bloc place au point de spawn dans monde portail private String returnBlock; } ``` ### Validation des Etats ```java // Verifier que tous les etats existent sur type de bloc PortalDeviceConfig config = portal.getConfig(); if (config.areBlockStatesValid(baseBlockType)) { // Tous les etats (on, off, spawning) sont valides } ``` ### Noms des Etats | Etat | Description | Defaut | |------|-------------|--------| | `spawningState` | Transition de eteint a actif | "Spawning" | | `onState` | Portail actif | "Active" | | `offState` | Portail inactif | "default" | ## PortalWorld Une ressource attachee aux mondes crees par les portails. ```java public class PortalWorld implements Resource { // ID configuration type portail private String portalTypeId; // Limite temps en secondes private int timeLimitSeconds; // Handler condition de suppression private PortalRemovalCondition worldRemovalCondition; // Joueurs morts dans ce monde private Set diedInWorld; // Joueurs voyant actuellement l'UI private Set seesUi; // Transform point de spawn private Transform spawnPoint; // Reference vers evenement vide actif private Ref voidEventRef; } ``` ### Verifier Monde Portail ```java // Obtenir ressource monde portail PortalWorld portalWorld = store.getResource(PortalWorld.getResourceType()); // Verifier si c'est un monde portail valide if (portalWorld.exists()) { PortalType type = portalWorld.getPortalType(); int timeLimit = portalWorld.getTimeLimitSeconds(); } ``` ### Gestion du Temps ```java // Obtenir temps ecoule et restant double elapsed = portalWorld.getElapsedSeconds(world); double remaining = portalWorld.getRemainingSeconds(world); // Modifier temps restant (ex: etendre timer) portalWorld.setRemainingSeconds(world, 300.0); // 5 minutes ``` ### Suivi des Morts ```java // Verifier si joueur mort dans ce monde if (portalWorld.getDiedInWorld().contains(playerUuid)) { // Ne peut pas re-entrer - mort ici } // Enregistrer une mort portalWorld.getDiedInWorld().add(playerUuid); ``` ### Etat UI ```java // Suivre joueurs voyant l'UI portail portalWorld.getSeesUi().add(playerUuid); portalWorld.getSeesUi().remove(playerUuid); ``` ## VoidEvent Composant pour evenements invasion du vide dans mondes portail. ```java public class VoidEvent implements Component { // Distance minimum entre spawners public static final double MIN_BLOCKS_BETWEEN_SPAWNERS = 62.0; // Grille spatiale des spawners du vide private SpatialHashGrid> voidSpawners; // Etape active actuelle private VoidEventStage activeStage; } ``` ### Acces Evenement Vide ```java // Verifier si evenement vide actif Ref voidRef = portalWorld.getVoidEventRef(); if (portalWorld.isVoidEventActive()) { VoidEvent voidEvent = store.getComponent(voidRef, VoidEvent.getComponentType()); VoidEventStage stage = voidEvent.getActiveStage(); } ``` ### Grille Spawners Vide ```java // Obtenir grille spawners SpatialHashGrid> spawners = voidEvent.getVoidSpawners(); // Spawners maintiennent distance minimum de 62 blocs ``` ## VoidEventConfig Configuration pour evenements du vide. ```java public class VoidEventConfig { // Duree evenement vide en secondes private int durationSeconds; // Etapes de l'evenement vide private List stages; } ``` ## VoidEventStage Etape unique dans progression evenement vide. ```java public class VoidEventStage { // Quand cette etape demarre (secondes depuis debut evenement) private int startTime; // Spawners a activer private List spawners; } ``` ## VoidSpawner Composant entite pour spawners invasion du vide. ```java public class VoidSpawner implements Component { // Configuration spawner // Suit etat de spawn actif } ``` ## Enregistrement Composants Les composants sont enregistres dans setup PortalsPlugin: ```java // Dans PortalsPlugin.setup() this.portalDeviceComponentType = this.getChunkStoreRegistry() .registerComponent(PortalDevice.class, "Portal", PortalDevice.CODEC); this.voidEventComponentType = this.getEntityStoreRegistry() .registerComponent(VoidEvent.class, VoidEvent::new); this.voidPortalComponentType = this.getEntityStoreRegistry() .registerComponent(VoidSpawner.class, VoidSpawner::new); ``` ## Serialisation PortalDevice utilise BuilderCodec pour persistance: ```java public static final BuilderCodec CODEC = BuilderCodec.builder(...) .append(new KeyedCodec<>("Config", PortalDeviceConfig.CODEC), ...) .append(new KeyedCodec<>("BaseBlockType", Codec.STRING), ...) .append(new KeyedCodec<>("DestinationWorld", Codec.UUID_BINARY), ...) .build(); ```