This commit is contained in:
2026-01-20 20:33:59 +01:00
commit b16a40e431
583 changed files with 87339 additions and 0 deletions

View File

@@ -0,0 +1,174 @@
---
title: Fenêtres
type: docs
weight: 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 :
```java
Player player = ...;
WindowManager windowManager = player.getWindowManager();
```
## Classes de Fenêtres
### ContainerWindow
Pour les interfaces de conteneur standard :
```java
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.
```java
// 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 :
```java
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()` :
```java
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 :
```java
// 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
```java
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
```java
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 >}}