250 lines
6.2 KiB
Markdown
250 lines
6.2 KiB
Markdown
---
|
|
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 |
|