Files
Documentation/content/world/entities/spawning/spawn-suppression.fr.md
2026-01-20 20:33:59 +01:00

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