Init
This commit is contained in:
249
content/world/entities/spawning/spawn-suppression.fr.md
Normal file
249
content/world/entities/spawning/spawn-suppression.fr.md
Normal 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 |
|
||||
Reference in New Issue
Block a user