--- title: Suppression de Spawn type: docs weight: 2 --- La suppression de spawn permet d'empecher le spawn de NPCs dans des zones definies, utile pour les zones sures, bases de joueurs et environnements controles. **Package:** `com.hypixel.hytale.server.spawning.suppression` ## Architecture ``` Suppression de Spawn ├── Assets │ └── SpawnSuppression - Definitions zones de suppression ├── Composants │ ├── SpawnSuppressionComponent - Suppression attachee entite │ ├── SpawnSuppressionController - Logique de suppression │ ├── ChunkSuppressionEntry - Donnees suppression chunk │ └── ChunkSuppressionQueue - Suppressions en attente ├── Systemes │ ├── SpawnSuppressionSystems - Logique suppression principale │ ├── ChunkSuppressionSystems - Traitement niveau chunk │ └── SpawnMarkerSuppressionSystem - Suppression marqueurs └── Utilitaires ├── SuppressionSpanHelper - Calculs d'etendue └── SpawnSuppressorEntry - Suivi suppresseurs ``` ## Asset SpawnSuppression ### Configuration Asset ```yaml # NPC/Spawn/Suppression/safe_zone.json { "Id": "safe_zone", "SuppressionRadius": 50.0, "SuppressedGroups": ["hostile", "neutral_aggressive"], "SuppressSpawnMarkers": true } ``` ### Champs Asset | Champ | Type | Description | |-------|------|-------------| | `Id` | String | Identifiant unique de suppression | | `SuppressionRadius` | Double | Rayon d'effet de suppression | | `SuppressedGroups` | String[] | IDs NPCGroup a supprimer | | `SuppressSpawnMarkers` | Boolean | Supprimer aussi les marqueurs | ### Acces Asset ```java // Obtenir asset de suppression SpawnSuppression suppression = SpawnSuppression.getAssetMap().getAsset("safe_zone"); // Obtenir proprietes double radius = suppression.getRadius(); int[] suppressedGroups = suppression.getSuppressedGroupIds(); boolean suppressMarkers = suppression.isSuppressSpawnMarkers(); ``` ## SpawnSuppressionComponent Attache le comportement de suppression aux entites: ```java public class SpawnSuppressionComponent implements Component { private String spawnSuppression; // Reference ID asset public String getSpawnSuppression(); public void setSpawnSuppression(String spawnSuppression); } ``` ### Utilisation du Composant ```java // Obtenir type de composant ComponentType type = SpawningPlugin.get().getSpawnSuppressorComponentType(); // Attacher a une entite SpawnSuppressionComponent comp = new SpawnSuppressionComponent("safe_zone"); store.setComponent(entityRef, type, comp); // Lire depuis entite SpawnSuppressionComponent existing = store.getComponent(entityRef, type); String suppressionId = existing.getSpawnSuppression(); ``` ### Codec du Composant ```java public static final BuilderCodec CODEC = BuilderCodec.builder(...) .append(new KeyedCodec<>("SpawnSuppression", Codec.STRING), ...) .build(); ``` ## Controleur de Suppression ### SpawnSuppressionController Gere les zones de suppression actives: ```java // Le controleur suit les suppressions actives // Calcule les chunks affectes // Met a jour l'etat de suppression ``` ## Suppression de Chunk ### ChunkSuppressionEntry Suit l'etat de suppression par chunk: ```java // Enregistre quelles suppressions affectent chaque chunk // Mis en cache pour verifications spawn efficaces ``` ### ChunkSuppressionQueue File d'attente de mises a jour de suppression: ```java // Gere les calculs de suppression async // Traite ajouts et suppressions ``` ### ChunkSuppressionSystems Traite la suppression niveau chunk: ```java getEntityStoreRegistry().registerSystem(new ChunkSuppressionSystems()); ``` ## Systemes de Suppression ### SpawnSuppressionSystems Logique de suppression principale: ```java // Traite les entites SpawnSuppressionComponent // Met a jour les donnees de chunk affectes // Declenche les changements d'etat de suppression ``` ### SpawnMarkerSuppressionSystem Gere la suppression des marqueurs de spawn: ```java // Desactive les marqueurs dans le rayon de suppression // Reactive quand suppression supprimee ``` ## Utilitaires de Suppression ### SuppressionSpanHelper Calcule les etendues de suppression: ```java SuppressionSpanHelper helper = new SuppressionSpanHelper(); // Calcule quels chunks tombent dans le rayon // Gere les cas limites aux frontieres de chunk ``` ### SpawnSuppressorEntry Suit les entites suppresseurs individuelles: ```java // Lie reference entite a config suppression // Permet lookup et nettoyage efficaces ``` ## Utilisation de l'API ### Creer une Zone de Suppression ```java // 1. Definir asset en JSON // NPC/Spawn/Suppression/player_base.json // 2. Attacher composant a entite SpawnSuppressionComponent comp = new SpawnSuppressionComponent("player_base"); store.setComponent(entityRef, SpawnSuppressionComponent.getComponentType(), comp); ``` ### Verifier si Position Supprimee ```java // La suppression est verifiee automatiquement lors des tentatives de spawn // Le systeme de spawn interroge l'etat de suppression par chunk ``` ### Supprimer une Suppression ```java // Retirer composant pour desactiver suppression store.removeComponent(entityRef, SpawnSuppressionComponent.getComponentType()); ``` ## Comportement de Suppression ### Calcul de Rayon La suppression utilise une distance 3D avec optimisation: - X/Z: Affecte des chunks entiers dans le rayon - Y: Utilise calcul de distance exact Cela permet aux NPCs de spawn dans les grottes en dessous ou le ciel au-dessus d'une zone de suppression. ### Filtrage par Groupe Seuls les groupes NPC specifies sont supprimes: ```yaml { "SuppressedGroups": ["hostile"] // NPCs hostiles bloques // NPCs amicaux/neutres peuvent toujours spawn } ``` ### Suppression de Marqueurs Quand `SuppressSpawnMarkers` est vrai: - Les marqueurs dans le rayon cessent de fonctionner - Ils reprennent quand suppression retiree - Ne supprime pas definitivement les marqueurs ## Commandes Acces via `/spawning suppression`: | Sous-commande | Description | |---------------|-------------| | `list` | Lister les suppressions actives | | `info ` | Afficher details suppression | | `clear ` | Retirer suppression |