8.0 KiB
title, type, weight
| title | type | weight |
|---|---|---|
| Système d'Interactions | docs | 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 :
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
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 :
# 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 à jouerWaitForAnimationToFinish- 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 :
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 :
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.