--- title: IA NPC type: docs weight: 3 --- Le système d'IA NPC fournit une prise de décision intelligente via les blackboards, decision makers, capteurs et instructions. **Packages:** - `com.hypixel.hytale.server.npc.blackboard` - `com.hypixel.hytale.server.npc.decisionmaker` - `com.hypixel.hytale.server.npc.sensorinfo` - `com.hypixel.hytale.server.npc.instructions` ## Système Blackboard Le Blackboard est un espace mémoire partagé où les composants NPC communiquent via des paires clé-valeur. ### Classe Blackboard ```java public class Blackboard { private Map, Object> data; // Stocker une valeur public void set(BlackboardKey key, T value); // Récupérer une valeur public T get(BlackboardKey key); public T getOrDefault(BlackboardKey key, T defaultValue); // Vérifier l'existence public boolean has(BlackboardKey key); // Supprimer une valeur public void remove(BlackboardKey key); // Tout effacer public void clear(); } ``` ### BlackboardKey Clés typées pour l'accès au blackboard : ```java // Clés prédéfinies public class BlackboardKeys { public static final BlackboardKey TARGET = new BlackboardKey<>("target", Entity.class); public static final BlackboardKey HOME_POSITION = new BlackboardKey<>("home_position", Vector3d.class); public static final BlackboardKey ALERT_LEVEL = new BlackboardKey<>("alert_level", Float.class); public static final BlackboardKey IN_COMBAT = new BlackboardKey<>("in_combat", Boolean.class); } // Clés personnalisées BlackboardKey CUSTOM_KEY = new BlackboardKey<>("custom_data", String.class); ``` ### Utiliser le Blackboard ```java NPCEntity npc = // obtenir le NPC Blackboard bb = npc.getBlackboard(); // Définir la cible bb.set(BlackboardKeys.TARGET, targetEntity); // Obtenir la position d'origine Vector3d home = bb.getOrDefault(BlackboardKeys.HOME_POSITION, npc.getPosition()); // Vérifier le statut de combat if (bb.getOrDefault(BlackboardKeys.IN_COMBAT, false)) { // Gérer le combat } ``` ## Système Decision Maker Le Decision Maker évalue les options et sélectionne la meilleure action pour le NPC. ### Interface DecisionMaker ```java public interface DecisionMaker { // Évaluer et sélectionner la meilleure option Option evaluate(NPCEntity npc, Blackboard blackboard); // Obtenir toutes les options disponibles List