256 lines
8.0 KiB
Markdown
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.
|