6.2 KiB
title, type, weight
| title | type | weight |
|---|---|---|
| Suppression de Spawn | docs | 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
# 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
// 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:
public class SpawnSuppressionComponent implements Component<EntityStore> {
private String spawnSuppression; // Reference ID asset
public String getSpawnSuppression();
public void setSpawnSuppression(String spawnSuppression);
}
Utilisation du Composant
// 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
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:
// 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:
// Enregistre quelles suppressions affectent chaque chunk
// Mis en cache pour verifications spawn efficaces
ChunkSuppressionQueue
File d'attente de mises a jour de suppression:
// Gere les calculs de suppression async
// Traite ajouts et suppressions
ChunkSuppressionSystems
Traite la suppression niveau chunk:
getEntityStoreRegistry().registerSystem(new ChunkSuppressionSystems());
Systemes de Suppression
SpawnSuppressionSystems
Logique de suppression principale:
// 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:
// Desactive les marqueurs dans le rayon de suppression
// Reactive quand suppression supprimee
Utilitaires de Suppression
SuppressionSpanHelper
Calcule les etendues de suppression:
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:
// Lie reference entite a config suppression
// Permet lookup et nettoyage efficaces
Utilisation de l'API
Creer une Zone de Suppression
// 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
// La suppression est verifiee automatiquement lors des tentatives de spawn
// Le systeme de spawn interroge l'etat de suppression par chunk
Supprimer une Suppression
// 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:
{
"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 |