This commit is contained in:
2026-01-20 20:33:59 +01:00
commit b16a40e431
583 changed files with 87339 additions and 0 deletions

View File

@@ -0,0 +1,249 @@
---
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 |