Files
Documentation/content/world/portals/portal-components.fr.md
2026-01-20 20:33:59 +01:00

6.4 KiB

title, type, weight
title type weight
Composants Portail docs 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.

public class PortalDevice implements Component<ChunkStore> {
    // 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

// 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

// 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.

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

// 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.

public class PortalWorld implements Resource<EntityStore> {
    // 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<UUID> diedInWorld;

    // Joueurs voyant actuellement l'UI
    private Set<UUID> seesUi;

    // Transform point de spawn
    private Transform spawnPoint;

    // Reference vers evenement vide actif
    private Ref<EntityStore> voidEventRef;
}

Verifier Monde Portail

// 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

// 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

// 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

// Suivre joueurs voyant l'UI portail
portalWorld.getSeesUi().add(playerUuid);
portalWorld.getSeesUi().remove(playerUuid);

VoidEvent

Composant pour evenements invasion du vide dans mondes portail.

public class VoidEvent implements Component<EntityStore> {
    // Distance minimum entre spawners
    public static final double MIN_BLOCKS_BETWEEN_SPAWNERS = 62.0;

    // Grille spatiale des spawners du vide
    private SpatialHashGrid<Ref<EntityStore>> voidSpawners;

    // Etape active actuelle
    private VoidEventStage activeStage;
}

Acces Evenement Vide

// Verifier si evenement vide actif
Ref<EntityStore> voidRef = portalWorld.getVoidEventRef();
if (portalWorld.isVoidEventActive()) {
    VoidEvent voidEvent = store.getComponent(voidRef, VoidEvent.getComponentType());
    VoidEventStage stage = voidEvent.getActiveStage();
}

Grille Spawners Vide

// Obtenir grille spawners
SpatialHashGrid<Ref<EntityStore>> spawners = voidEvent.getVoidSpawners();

// Spawners maintiennent distance minimum de 62 blocs

VoidEventConfig

Configuration pour evenements du vide.

public class VoidEventConfig {
    // Duree evenement vide en secondes
    private int durationSeconds;

    // Etapes de l'evenement vide
    private List<VoidEventStage> stages;
}

VoidEventStage

Etape unique dans progression evenement vide.

public class VoidEventStage {
    // Quand cette etape demarre (secondes depuis debut evenement)
    private int startTime;

    // Spawners a activer
    private List<VoidSpawnerConfig> spawners;
}

VoidSpawner

Composant entite pour spawners invasion du vide.

public class VoidSpawner implements Component<EntityStore> {
    // Configuration spawner
    // Suit etat de spawn actif
}

Enregistrement Composants

Les composants sont enregistres dans setup PortalsPlugin:

// 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:

public static final BuilderCodec<PortalDevice> CODEC = BuilderCodec.builder(...)
    .append(new KeyedCodec<>("Config", PortalDeviceConfig.CODEC), ...)
    .append(new KeyedCodec<>("BaseBlockType", Codec.STRING), ...)
    .append(new KeyedCodec<>("DestinationWorld", Codec.UUID_BINARY), ...)
    .build();