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

6.6 KiB

title, type, weight
title type weight
Assets Spawner docs 4

Les assets spawner definissent comment et ou les NPCs apparaissent, incluant les marqueurs pour points de spawn statiques et les beacons pour spawning dynamique.

Package: com.hypixel.hytale.server.spawning.assets

Marqueurs de Spawn

Asset SpawnMarker

Les marqueurs sont des points de spawn statiques qui font apparaitre des NPCs avec timing de reapparition configurable.

Emplacement Asset: NPC/Spawn/Markers/

# NPC/Spawn/Markers/village_guard.json
{
  "Id": "village_guard",
  "Model": "spawn_marker_hostile",
  "ExclusionRadius": 15.0,
  "MaxDropHeight": 2.0,
  "RealtimeRespawn": true,
  "ManualTrigger": false,
  "DeactivationDistance": 40.0,
  "DeactivationTime": 5.0,
  "NPCs": [
    {
      "Name": "guard_soldier",
      "Weight": 70.0,
      "RealtimeRespawnTime": 120.0
    },
    {
      "Name": "guard_captain",
      "Weight": 30.0,
      "RealtimeRespawnTime": 300.0
    }
  ]
}

Champs SpawnMarker

Champ Type Defaut Description
Id String Requis Identifiant unique marqueur
Model String Defaut config Modele visuel en mode creatif
NPCs SpawnConfiguration[] Requis Liste NPC ponderee
ExclusionRadius Double 0 Rayon exclusion joueur
MaxDropHeight Double 2.0 Offset hauteur spawn max
RealtimeRespawn Boolean false Temps reel vs temps jeu
ManualTrigger Boolean false Necessiter activation manuelle
DeactivationDistance Double 40.0 Distance de desactivation
DeactivationTime Double 5.0 Secondes avant desactivation

SpawnConfiguration

Entree spawn NPC individuelle dans pool pondere:

public class SpawnConfiguration implements IWeightedElement {
    protected String npc;                    // Nom role NPC
    protected double weight;                 // Poids de spawn
    protected double realtimeRespawnTime;    // Secondes (temps reel)
    protected Duration spawnAfterGameTime;   // Duree (temps jeu)
    protected String flockDefinitionId;      // Flock optionnel
}
{
  "Name": "forest_deer",
  "Weight": 50.0,
  "RealtimeRespawnTime": 60.0,
  "SpawnAfterGameTime": "PT1H",
  "Flock": "deer_herd"
}

Timing de Reapparition

Choisir entre reapparition temps reel ou temps de jeu:

Temps Reel: Utilise RealtimeRespawnTime (secondes)

{
  "RealtimeRespawn": true,
  "NPCs": [{ "RealtimeRespawnTime": 120.0 }]
}

Temps de Jeu: Utilise SpawnAfterGameTime (duree ISO 8601)

{
  "RealtimeRespawn": false,
  "NPCs": [{ "SpawnAfterGameTime": "P1DT6H" }]
}

Format duree: P[jours]DT[heures]H[minutes]M[secondes]S

Spawning de Flock

Faire apparaitre un groupe de NPCs autour du spawn principal:

{
  "Name": "wolf_alpha",
  "Flock": "wolf_pack"
}

La definition flock specifie les NPCs additionnels a spawn autour du principal.

Beacons de Spawn

BeaconNPCSpawn

Points de spawn dynamiques qui font apparaitre des NPCs dans un rayon.

Emplacement Asset: NPC/Spawn/Beacons/

# NPC/Spawn/Beacons/dungeon_spawner.json
{
  "Id": "dungeon_spawner",
  "NPCRole": "skeleton_warrior",
  "SpawnWeight": 10,
  "MinGroupSize": 2,
  "MaxGroupSize": 5,
  "Environments": ["dungeon_dark"]
}

Composant SpawnBeacon

Entites avec comportement beacon de spawn:

public class SpawnBeacon {
    // Configuration pour spawning beacon
    // Declenche spawning dans un rayon
}

Systemes Beacon

// SpawnBeaconSystems traite les beacons actifs
getEntityStoreRegistry().registerSystem(new SpawnBeaconSystems());

// BeaconSpatialSystem gere les requetes spatiales
getEntityStoreRegistry().registerSystem(new BeaconSpatialSystem());

Configuration Spawn Mondial

WorldNPCSpawn

Spawning ambiant base sur l'environnement.

Emplacement Asset: NPC/Spawn/World/

# NPC/Spawn/World/forest_fauna.json
{
  "Id": "forest_fauna",
  "NPCRole": "rabbit",
  "SpawnWeight": 20,
  "MinGroupSize": 1,
  "MaxGroupSize": 3,
  "Environments": ["forest", "grassland"],
  "LightType": "Day",
  "MinLightLevel": 8
}

Champs de Base NPCSpawn

Champ Type Description
NPCRole String Role NPC a spawner
SpawnWeight Integer Poids probabilite spawn
MinGroupSize Integer Minimum NPCs a spawner
MaxGroupSize Integer Maximum NPCs a spawner

Filtrage par Environnement

Restreindre spawning a des environnements specifiques:

{
  "Environments": ["cave_dark", "dungeon"]
}

Filtrage par Niveau de Lumiere

{
  "LightType": "Night",
  "MinLightLevel": 0,
  "MaxLightLevel": 7
}

Types de lumiere: Any, Day, Night

Entite Marqueur de Spawn

Composant SpawnMarkerEntity

Entite representant un marqueur de spawn dans le monde:

ComponentType<EntityStore, SpawnMarkerEntity> type =
    SpawningPlugin.get().getSpawnMarkerEntityComponentType();

Etat Bloc Marqueur

Les marqueurs de spawn peuvent etre places comme blocs:

public class SpawnMarkerBlockState {
    // Marqueur de spawn base bloc
}

public class SpawnMarkerBlockReference {
    // Reference au bloc marqueur
}

Interactions

TriggerSpawnMarkersInteraction

Declencher manuellement des marqueurs de spawn via interaction:

# Interaction item ou bloc
{
  "Type": "TriggerSpawnMarkers",
  "MarkerIds": ["ambush_1", "ambush_2"],
  "Radius": 50.0
}

Enregistre comme:

getCodecRegistry(Interaction.CODEC).register(
    "TriggerSpawnMarkers",
    TriggerSpawnMarkersInteraction.class,
    TriggerSpawnMarkersInteraction.CODEC
);

Utilisation de l'API

Acceder aux Assets Marqueur de Spawn

// Obtenir asset marqueur
SpawnMarker marker = SpawnMarker.getAssetMap().getAsset("village_guard");

// Obtenir configurations ponderees
IWeightedMap<SpawnConfiguration> npcs = marker.getWeightedConfigurations();

// Obtenir NPC aleatoire depuis pool
SpawnConfiguration selected = npcs.getRandom(random);
String npcRole = selected.getNpc();

Acceder a la Suppression de Spawn

SpawnSuppression suppression = SpawnSuppression.getAssetMap().getAsset("safe_zone");
double radius = suppression.getRadius();

Valider Asset Marqueur

// La validation se fait au demarrage du plugin
// Avertit sur:
// - Temps de reapparition manquants
// - Parametres temps reel/jeu conflictuels
// - Roles NPC invalides

Ordre de Chargement Assets

Les assets spawn ont des dependances:

// Les marqueurs chargent apres modeles et roles NPC
HytaleAssetStore.builder(...)
    .loadsAfter(ModelAsset.class)
    .loadsAfter(NPCRole.class)
    .build();