Files
Documentation/content/ui-systems/windows.fr.md
2026-01-20 20:33:59 +01:00

5.4 KiB

title, type, weight
title type weight
Fenêtres docs 3

Les fenêtres sont des panneaux UI pour afficher et gérer les conteneurs d'inventaire, les interfaces de crafting et autres interactions basées sur les objets.

Package: com.hypixel.hytale.server.core.entity.entities.player.windows

Types de Fenêtres

Type Description
WindowType.Container Vue standard inventaire/conteneur
WindowType.PocketCrafting Petite grille de crafting (2x2)
WindowType.BasicCrafting Table de crafting basique (3x3)
WindowType.DiagramCrafting Crafting basé sur des diagrammes
WindowType.StructuralCrafting Crafting structurel/construction
WindowType.Processing Interface de traitement/fonte
WindowType.Memories Interface de stockage des Mémoires

Gestionnaire de Fenêtres

Chaque joueur a un WindowManager qui gère les fenêtres ouvertes :

Player player = ...;
WindowManager windowManager = player.getWindowManager();

Classes de Fenêtres

ContainerWindow

Pour les interfaces de conteneur standard :

import com.hypixel.hytale.server.core.entity.entities.player.windows.ContainerWindow;
import com.hypixel.hytale.server.core.inventory.container.ItemContainer;

// Ouvrir une fenêtre de conteneur - prend juste l'ItemContainer
ContainerWindow window = new ContainerWindow(itemContainer);

{{< callout type="info" >}} ContainerWindow utilise automatiquement WindowType.Container. L'ID de fenêtre est assigné en interne. {{< /callout >}}

BlockWindow

BlockWindow est une classe abstraite pour les conteneurs liés aux blocs. Elle est typiquement utilisée via les interactions intégrées plutôt qu'instanciée directement.

// BlockWindow est abstraite - utilisée en interne par les interactions de blocs
// Constructeur: BlockWindow(WindowType, x, y, z, rotationIndex, BlockType)

ItemStackContainerWindow

Pour les conteneurs basés sur ItemStack :

import com.hypixel.hytale.server.core.entity.entities.player.windows.ItemStackContainerWindow;
import com.hypixel.hytale.server.core.inventory.container.ItemStackItemContainer;

// Prend un ItemStackItemContainer
ItemStackContainerWindow window = new ItemStackContainerWindow(itemStackItemContainer);

Ouvrir des Fenêtres

Utilisez PageManager.setPageWithWindows() ou openCustomPageWithWindows() :

Player player = ...;
PageManager pageManager = player.getPageManager();
Ref<EntityStore> ref = player.getReference();
Store<EntityStore> store = ref.getStore();

// Ouvrir une page avec des fenêtres d'inventaire
ContainerWindow chestWindow = new ContainerWindow(chestContainer);

boolean success = pageManager.setPageWithWindows(
    ref, store,
    Page.None,  // ou Page.Bench, Page.Inventory, etc.
    true,       // canCloseThroughInteraction
    chestWindow
);

Avec des Pages Personnalisées

Combiner les fenêtres avec des pages UI personnalisées :

// UI de crafting personnalisée avec fenêtres
CraftingPage craftingPage = new CraftingPage(player.getPlayerRef());
ContainerWindow inputWindow = new ContainerWindow(inputContainer);
ContainerWindow outputWindow = new ContainerWindow(outputContainer);

pageManager.openCustomPageWithWindows(
    ref, store,
    craftingPage,
    inputWindow,
    outputWindow
);

Événements de Fenêtre

Les fenêtres interagissent avec le système d'inventaire. Gérez les changements d'inventaire via les événements et handlers appropriés.

Exemple Pratique

UI de Conteneur Coffre

public void openChest(Player player, ItemContainer chestContainer) {
    PageManager pageManager = player.getPageManager();
    Ref<EntityStore> ref = player.getReference();
    Store<EntityStore> store = ref.getStore();

    ContainerWindow window = new ContainerWindow(chestContainer);

    pageManager.setPageWithWindows(
        ref, store,
        Page.Bench,  // Utiliser Page.Bench pour l'UI de conteneur
        true,        // Permettre la fermeture via interaction
        window
    );
}

Ouvrir Plusieurs Fenêtres

public void openCraftingUI(Player player, ItemContainer inputContainer,
                           ItemContainer outputContainer) {
    PageManager pageManager = player.getPageManager();
    Ref<EntityStore> ref = player.getReference();
    Store<EntityStore> store = ref.getStore();

    // Créer plusieurs fenêtres
    ContainerWindow inputWindow = new ContainerWindow(inputContainer);
    ContainerWindow outputWindow = new ContainerWindow(outputContainer);

    pageManager.setPageWithWindows(
        ref, store,
        Page.Bench,
        true,
        inputWindow,
        outputWindow
    );
}

{{< callout type="info" >}} Note : BlockWindow est abstraite et utilisée en interne par les interactions de blocs. Pour des UI de crafting personnalisées, utilisez ContainerWindow avec vos propres conteneurs. {{< /callout >}}

Bonnes Pratiques

{{< callout type="info" >}} Directives des Fenêtres :

  • Utilisez des IDs de fenêtre uniques pour chaque fenêtre ouverte
  • Faites correspondre WindowType à l'interface prévue
  • Nettoyez les conteneurs quand les fenêtres sont fermées
  • Utilisez canCloseThroughInteraction de manière appropriée {{< /callout >}}

{{< callout type="warning" >}} Important : Les fenêtres sont liées à l'état du conteneur. Assurez-vous que les conteneurs persistent pendant toute la durée d'ouverture de la fenêtre. {{< /callout >}}