5.7 KiB
title, type, weight
| title | type | weight |
|---|---|---|
| Sélecteurs | docs | 2 |
Les sélecteurs déterminent quelles entités ou blocs sont ciblés par une interaction.
Package: com.hypixel.hytale.server.core.modules.interaction.interaction.config.selector
Types de Sélecteurs
RaycastSelector
Lance un rayon depuis la vue du joueur pour trouver des cibles :
Selector:
Type: Raycast
Range: 5.0
BlockCollision: true
EntityCollision: true
Propriétés :
Range- Distance maximaleBlockCollision- S'arrêter aux blocsEntityCollision- Détecter les entités
AOECircleSelector
Sélectionne toutes les cibles dans une zone circulaire :
Selector:
Type: AOECircle
Radius: 3.0
Height: 2.0
Propriétés :
Radius- Rayon du cercleHeight- Étendue verticale
AOECylinderSelector
Sélectionne les cibles dans une zone cylindrique :
Selector:
Type: AOECylinder
Radius: 4.0
Height: 3.0
HeightOffset: 0.0
StabSelector
Attaque vers l'avant à courte portée :
Selector:
Type: Stab
Range: 2.0
Width: 1.5
HorizontalSelector
Attaque en balayage horizontal :
Selector:
Type: Horizontal
Range: 3.0
Angle: 90.0
Interface Selector
L'interface Selector fournit des méthodes pour le ciblage :
import com.hypixel.hytale.component.CommandBuffer;
import com.hypixel.hytale.component.Ref;
import com.hypixel.hytale.function.consumer.TriIntConsumer;
import com.hypixel.hytale.math.vector.Vector4d;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import java.util.function.BiConsumer;
import java.util.function.Predicate;
public interface Selector {
// Sélectionner les entités cibles - le consumer reçoit la ref ET la position de frappe
void selectTargetEntities(
CommandBuffer<EntityStore> buffer,
Ref<EntityStore> attacker,
BiConsumer<Ref<EntityStore>, Vector4d> consumer,
Predicate<Ref<EntityStore>> filter
);
// Sélectionner les blocs cibles
void selectTargetBlocks(
CommandBuffer<EntityStore> buffer,
Ref<EntityStore> attacker,
TriIntConsumer consumer
);
// Mettre à jour l'état du sélecteur à chaque tick
void tick(
CommandBuffer<EntityStore> buffer,
Ref<EntityStore> entity,
float startTime,
float currentTime
);
}
{{< callout type="info" >}}
Note : La méthode d'instance selectTargetEntities() fournit la position de frappe via Vector4d, tandis que la méthode statique selectNearbyEntities() fournit uniquement les références d'entités.
{{< /callout >}}
Filtres d'Entités
Filtrer quelles entités peuvent être sélectionnées :
VulnerableMatcher
Sélectionner uniquement les entités pouvant subir des dégâts :
Matcher:
Type: Vulnerable
PlayerMatcher
Sélectionner uniquement les joueurs :
Matcher:
Type: Player
Utilitaires de Sélection Statique
L'interface Selector fournit des méthodes statiques pour les opérations courantes :
Sélectionner les Blocs Proches
Selector.selectNearbyBlocks(
commandBuffer,
attackerRef,
range,
(x, y, z) -> {
// Traiter chaque position de bloc
}
);
// Ou depuis une position
Selector.selectNearbyBlocks(
position,
range,
(x, y, z) -> {
// Traiter chaque position de bloc
}
);
Sélectionner les Entités Proches
import java.util.function.Consumer;
import java.util.function.Predicate;
Selector.selectNearbyEntities(
commandBuffer,
attackerRef,
range,
(Consumer<Ref<EntityStore>>) entityRef -> {
// Traiter chaque entité
},
(Predicate<Ref<EntityStore>>) entityRef -> {
// Prédicat de filtre - retourner true pour inclure
return true;
}
);
// Ou depuis une position avec ComponentAccessor
Selector.selectNearbyEntities(
componentAccessor,
position,
range,
entityRef -> {
// Traiter chaque entité
},
entityRef -> true // Filtre ou null
);
{{< callout type="info" >}}
Note : Le consumer reçoit uniquement Ref<EntityStore>. Pour les positions de frappe d'entité (comme Vector4d), utilisez plutôt selectTargetEntities() d'une instance de Selector.
{{< /callout >}}
Exemples Pratiques
Tranchant d'Épée
SwordSlash:
Type: DamageCalculator
Selector:
Type: Horizontal
Range: 2.5
Angle: 120.0
Matcher:
Type: Vulnerable
Damage:
Base: 10.0
Type: Physical
Aura de Soin
HealingAura:
Type: ChangeStatInteraction
Selector:
Type: AOECircle
Radius: 5.0
Height: 3.0
Matcher:
Type: Player
Stat: Health
Amount: 5.0
Minage
Mining:
Type: BreakBlock
Selector:
Type: Raycast
Range: 4.0
BlockCollision: true
EntityCollision: false
Bonnes Pratiques
{{< callout type="info" >}} Directives des Sélecteurs :
- Utilisez une portée appropriée pour le type d'interaction
- Appliquez des filtres pour éviter les cibles non voulues
- Considérez les performances avec les grands sélecteurs AOE
- Utilisez le raycast pour les attaques de précision
- Vérifiez toujours
entity.isValid()avant d'accéder aux composants d'entité {{< /callout >}}
{{< callout type="warning" >}} Validité des Entités : Avant d'interagir avec une entité, vérifiez qu'elle est toujours valide pour éviter les exceptions de pointeur null :
if (entityRef.isValid()) {
// Accès sécurisé aux composants de l'entité
// ... effectuer les opérations
}
Le serveur valide les références d'entité en interne, mais le code personnalisé doit toujours vérifier la validité avec Ref.isValid().
{{< /callout >}}