---
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<EntityStore> {
    private String spawnSuppression;  // Reference ID asset

    public String getSpawnSuppression();
    public void setSpawnSuppression(String spawnSuppression);
}
```

### Utilisation du Composant

```java
// Obtenir type de composant
ComponentType<EntityStore, SpawnSuppressionComponent> 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<SpawnSuppressionComponent> 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 <id>` | Afficher details suppression |
| `clear <id>` | Retirer suppression |
