Files
Documentation/content/world/interactions/_index.fr.md
2026-01-20 20:33:59 +01:00

256 lines
8.0 KiB
Markdown

---
title: Système d'Interactions
type: docs
weight: 8
---
Le système d'Interactions est le puissant framework de comportements piloté par les données de Hytale. Il définit comment les objets, blocs et entités se comportent lorsqu'ils sont utilisés ou activés.
## Vue d'Ensemble
Les interactions sont principalement configurées via des fichiers d'assets plutôt que du code Java. Elles forment des chaînes d'opérations qui s'exécutent lorsqu'un joueur effectue des actions comme cliquer, attaquer ou utiliser des objets.
{{< cards cols="2" >}}
{{< card link="interaction-types" title="Types d'Interactions" subtitle="100+ types d'interactions intégrés" icon="lightning-bolt" >}}
{{< card link="selectors" title="Sélecteurs" subtitle="Cibler entités et blocs" icon="cursor-click" >}}
{{< card link="combat" title="Combat" subtitle="Calcul de dégâts et knockback" icon="fire" >}}
{{< /cards >}}
## Concepts Clés
### Assets d'Interaction
Les interactions sont des assets chargés depuis les data packs. Les assets sont stockés dans une map indexée - vous devez d'abord obtenir l'index, puis récupérer l'asset :
```java
import com.hypixel.hytale.server.core.modules.interaction.interaction.config.Interaction;
import com.hypixel.hytale.assetstore.map.IndexedLookupTableAssetMap;
// Obtenir la map d'assets
IndexedLookupTableAssetMap<String, Interaction> assetMap = Interaction.getAssetMap();
// Obtenir l'index depuis l'ID string
int index = assetMap.getIndex("my_interaction");
// Obtenir l'interaction par index
Interaction interaction = assetMap.getAsset(index);
// Ou combiné (mais vérifiez null !)
if (index != Integer.MIN_VALUE) {
Interaction myInteraction = assetMap.getAsset(index);
}
```
{{< callout type="warning" >}}
**Important :** `getAsset()` prend un `int` index, pas un String. Utilisez `getIndex()` d'abord pour convertir l'ID string en index. Retourne `Integer.MIN_VALUE` si non trouvé.
{{< /callout >}}
### Contexte d'Interaction
Quand les interactions s'exécutent, elles reçoivent un `InteractionContext` avec :
- **Référence d'entité** - L'entité effectuant l'interaction
- **Objet tenu** - L'objet utilisé
- **Bloc/entité cible** - Ce qui est ciblé
- **Suivi d'état** - Informations de progression et timing
### États d'Interaction
**Package :** `com.hypixel.hytale.protocol`
```java
public enum InteractionState {
Finished(0), // Terminé avec succès
Skip(1), // Ignoré par l'utilisateur
ItemChanged(2), // Annulé suite à changement d'objet
Failed(3), // Échec d'exécution
NotFinished(4); // Toujours en cours
}
```
| État | Valeur | Description |
|------|--------|-------------|
| `Finished` | 0 | Interaction terminée avec succès |
| `Skip` | 1 | L'utilisateur a demandé d'ignorer |
| `ItemChanged` | 2 | Annulé car l'objet tenu a changé |
| `Failed` | 3 | L'interaction a échoué |
| `NotFinished` | 4 | Toujours en cours, pas encore terminé |
## Catégories d'Interactions
### Interactions de Blocs
Opérations sur les blocs :
| Interaction | Description |
|-------------|-------------|
| `PlaceBlockInteraction` | Placer un bloc |
| `BreakBlockInteraction` | Casser un bloc |
| `DestroyBlockInteraction` | Détruire sans drops |
| `ChangeBlockInteraction` | Changer le type de bloc |
| `UseBlockInteraction` | Interagir avec un bloc |
| `PlaceFluidInteraction` | Placer un fluide |
### Interactions d'Objets
Opérations avec les objets :
| Interaction | Description |
|-------------|-------------|
| `AddItemInteraction` | Ajouter un objet à l'inventaire |
| `EquipItemInteraction` | Équiper un objet |
| `ModifyInventoryInteraction` | Modifier le contenu de l'inventaire |
### Interactions d'Entités
Opérations sur les entités :
| Interaction | Description |
|-------------|-------------|
| `UseEntityInteraction` | Interagir avec une entité |
| `RemoveEntityInteraction` | Supprimer une entité |
| `ApplyEffectInteraction` | Appliquer un effet de statut |
| `ClearEntityEffectInteraction` | Supprimer les effets |
### Interactions de Combat
Dégâts et combat :
| Interaction | Description |
|-------------|-------------|
| `DamageCalculator` | Calculer les dégâts |
| `DamageEffects` | Appliquer les effets de dégâts |
| `Knockback` | Appliquer le knockback |
| `DirectionalKnockback` | Knockback directionnel |
| `ForceKnockback` | Knockback basé sur la force |
### Interactions UI
Interface utilisateur :
| Interaction | Description |
|-------------|-------------|
| `OpenContainerInteraction` | Ouvrir l'UI de conteneur |
| `OpenPageInteraction` | Ouvrir une page |
| `OpenCustomUIInteraction` | Ouvrir une UI personnalisée |
| `SendMessageInteraction` | Envoyer un message au joueur |
### Interactions de Structures
Modification du monde :
| Interaction | Description |
|-------------|-------------|
| `SpawnPrefabInteraction` | Faire apparaître un prefab/structure |
| `LaunchProjectileInteraction` | Lancer un projectile |
### Flux de Contrôle
Interactions de chaînage et conditions :
| Interaction | Description |
|-------------|-------------|
| `SerialInteraction` | Exécuter les interactions en séquence |
| `ParallelInteraction` | Exécuter les interactions simultanément |
| `SelectInteraction` | Choisir entre les interactions |
| `ConditionInteraction` | Exécution conditionnelle |
| `RepeatInteraction` | Répéter une interaction |
| `CancelChainInteraction` | Annuler la chaîne |
### Interactions de Stats
Statistiques d'entités :
| Interaction | Description |
|-------------|-------------|
| `ChangeStatInteraction` | Modifier une stat |
| `StatsConditionInteraction` | Vérifier les conditions de stats |
## Propriétés d'Interaction
Propriétés communes à toutes les interactions :
```yaml
# Exemple de configuration d'interaction
MyInteraction:
Type: PlaceBlock
RunTime: 0.5 # Durée en secondes
ViewDistance: 96.0 # Distance de visibilité
HorizontalSpeedMultiplier: 1.0
CancelOnItemChange: true
Effects:
WaitForAnimationToFinish: true
ItemAnimationId: "swing"
Rules:
# Règles d'activation
```
### InteractionEffects
Effets visuels et audio :
- `ItemAnimationId` - Animation à jouer
- `WaitForAnimationToFinish` - Attendre l'animation
- Effets sonores
- Effets de particules
### InteractionRules
Contrôle quand les interactions peuvent s'exécuter :
- Restrictions de mode de jeu
- Exigences d'état
- Vérifications de cooldown
## Sélecteurs
Les sélecteurs déterminent quelles entités ou blocs sont ciblés :
| Sélecteur | Description |
|-----------|-------------|
| `RaycastSelector` | Lancer un rayon depuis la caméra |
| `AOECircleSelector` | Zone d'effet circulaire |
| `AOECylinderSelector` | Zone d'effet cylindrique |
| `StabSelector` | Estoc à courte portée |
| `HorizontalSelector` | Balayage horizontal |
## Accéder aux Interactions
### Depuis les Objets
Les objets définissent leurs interactions dans les fichiers d'assets. À l'exécution :
```java
ItemStack item = player.getInventory().getActiveItem();
Item itemAsset = item.getItem();
// L'objet définit ses interactions primaires/secondaires
```
### Depuis les Blocs
Les blocs définissent les interactions d'utilisation :
```java
BlockType blockType = world.getBlockType(position);
// Le bloc définit son interaction d'utilisation
```
## Bonnes Pratiques
{{< callout type="info" >}}
**Directives d'Interaction :**
- Les interactions sont principalement pilotées par les données via les assets
- Utilisez les types d'interaction existants quand possible
- Chaînez les interactions pour des comportements complexes
- Utilisez les sélecteurs pour cibler de manière appropriée
- Considérez le mode de jeu dans les règles
{{< /callout >}}
{{< callout type="warning" >}}
**Note de Performance :** Les chaînes d'interaction complexes avec de nombreuses opérations parallèles peuvent impacter les performances. Gardez les chaînes efficaces.
{{< /callout >}}
## Lectures Complémentaires
Pour des informations détaillées sur les types d'interaction spécifiques, consultez les sous-pages.