213 lines
5.4 KiB
Markdown
213 lines
5.4 KiB
Markdown
---
|
|
title: Hytale Generator
|
|
type: docs
|
|
weight: 7
|
|
---
|
|
|
|
Le Hytale Generator est le générateur de monde procédural par défaut qui crée le terrain, les structures et les caractéristiques de Hytale.
|
|
|
|
**Package:** `com.hypixel.hytale.builtin.hytalegenerator`
|
|
|
|
## Vue d'Ensemble
|
|
|
|
Le Hytale Generator combine plusieurs systèmes :
|
|
|
|
```
|
|
Hytale Generator
|
|
├── Fonctions de Densité (forme du terrain)
|
|
├── Material Providers (sélection de blocs)
|
|
├── Placement de Props (végétation/objets)
|
|
├── Génération de Grottes
|
|
├── Placement de Structures
|
|
└── Caractéristiques spécifiques aux biomes
|
|
```
|
|
|
|
## Structure du Générateur
|
|
|
|
```java
|
|
public class HytaleGenerator implements WorldGenerator {
|
|
private DensityFunctionRegistry densityFunctions;
|
|
private MaterialProviderRegistry materialProviders;
|
|
private PropPlacementRegistry propPlacement;
|
|
private CaveGenerator caveGenerator;
|
|
private StructureGenerator structureGenerator;
|
|
|
|
@Override
|
|
public void generate(GenerationContainer container, int chunkX, int chunkZ) {
|
|
// 1. Générer le terrain de base
|
|
generateTerrain(container, chunkX, chunkZ);
|
|
|
|
// 2. Creuser les grottes
|
|
caveGenerator.generate(container, chunkX, chunkZ);
|
|
|
|
// 3. Placer les structures
|
|
structureGenerator.generate(container, chunkX, chunkZ);
|
|
|
|
// 4. Placer les props
|
|
propPlacement.generate(container, chunkX, chunkZ);
|
|
|
|
// 5. Finaliser
|
|
finalize(container);
|
|
}
|
|
}
|
|
```
|
|
|
|
## Configuration d'Assets
|
|
|
|
Les assets du générateur définissent les paramètres de génération :
|
|
|
|
```yaml
|
|
# hytalegenerator/world_generator.yaml
|
|
Type: HytaleGenerator
|
|
Id: default_generator
|
|
Seed: 0 # 0 = aléatoire
|
|
TerrainDensity:
|
|
Function: terrain_combined
|
|
Scale: 1.0
|
|
Materials:
|
|
Provider: biome_materials
|
|
Caves:
|
|
Enabled: true
|
|
Frequency: 0.5
|
|
Structures:
|
|
Enabled: true
|
|
Spacing: 32
|
|
Props:
|
|
Density: 1.0
|
|
```
|
|
|
|
## Composants du Framework
|
|
|
|
Le framework du générateur fournit des utilitaires de base :
|
|
|
|
```java
|
|
// Contexte de génération
|
|
public class GenerationContext {
|
|
private long seed;
|
|
private int chunkX, chunkZ;
|
|
private Biome biome;
|
|
private Random random;
|
|
|
|
public float noise2D(float x, float z, float scale);
|
|
public float noise3D(float x, float y, float z, float scale);
|
|
}
|
|
|
|
// Phase de génération
|
|
public enum GenerationPhase {
|
|
TERRAIN,
|
|
CARVING,
|
|
STRUCTURES,
|
|
DECORATION,
|
|
FINALIZATION
|
|
}
|
|
```
|
|
|
|
## Structures de Données
|
|
|
|
Structures de données spécialisées pour la génération :
|
|
|
|
```java
|
|
// Stockage de carte de hauteur
|
|
public class HeightMap2D {
|
|
private float[] data;
|
|
private int width, height;
|
|
|
|
public float get(int x, int z);
|
|
public void set(int x, int z, float value);
|
|
}
|
|
|
|
// Stockage de densité 3D
|
|
public class DensityField3D {
|
|
private float[] data;
|
|
private int sizeX, sizeY, sizeZ;
|
|
|
|
public float get(int x, int y, int z);
|
|
public float sample(float x, float y, float z); // Interpolé
|
|
}
|
|
```
|
|
|
|
## Intégration Nouveau Système
|
|
|
|
Le générateur intègre les systèmes plus récents :
|
|
|
|
```java
|
|
public class NewSystemIntegration {
|
|
// Enregistrer une fonction de densité personnalisée
|
|
public void registerDensityFunction(String id, DensityFunction function);
|
|
|
|
// Enregistrer un material provider personnalisé
|
|
public void registerMaterialProvider(String id, MaterialProvider provider);
|
|
|
|
// Enregistrer un placeur de props personnalisé
|
|
public void registerPropPlacer(String id, PropPlacer placer);
|
|
}
|
|
```
|
|
|
|
## Sous-packages
|
|
|
|
| Package | Fichiers | Description |
|
|
|---------|----------|-------------|
|
|
| `assets/` | 232 | Définitions d'assets pour la génération |
|
|
| `density/` | 76 | Implémentations de fonctions de densité |
|
|
| `newsystem/` | 29 | Nouveau système de génération |
|
|
| `materialproviders/` | 29 | Sélection de matériaux |
|
|
| `framework/` | 29 | Framework de base |
|
|
| `props/` | 24 | Placement de props |
|
|
| `datastructures/` | 16 | Structures de données |
|
|
| `positionproviders/` | 14 | Calcul de positions |
|
|
| `patterns/` | 13 | Patterns de génération |
|
|
| `fields/` | 8 | Génération par champs |
|
|
|
|
## Générateur Personnalisé
|
|
|
|
Créer un générateur personnalisé :
|
|
|
|
```java
|
|
public class MyGenerator extends HytaleGenerator {
|
|
@Override
|
|
protected void generateTerrain(GenerationContainer container, int chunkX, int chunkZ) {
|
|
// Génération de terrain personnalisée
|
|
for (int x = 0; x < 16; x++) {
|
|
for (int z = 0; z < 16; z++) {
|
|
int worldX = chunkX * 16 + x;
|
|
int worldZ = chunkZ * 16 + z;
|
|
|
|
float density = getCustomDensity(worldX, worldZ);
|
|
int height = (int) (density * 64) + 64;
|
|
|
|
fillColumn(container, x, z, height);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Configuration
|
|
|
|
```yaml
|
|
# hytalegenerator/config.yaml
|
|
HytaleGenerator:
|
|
WorldType: normal
|
|
SeaLevel: 64
|
|
TerrainAmplitude: 1.0
|
|
CaveFrequency: 0.5
|
|
StructureSpacing: 32
|
|
BiomeScale: 256
|
|
Features:
|
|
Caves: true
|
|
Structures: true
|
|
Props: true
|
|
Ores: true
|
|
```
|
|
|
|
## Bonnes Pratiques
|
|
|
|
{{< callout type="info" >}}
|
|
**Directives du Générateur :**
|
|
- Étendez HytaleGenerator pour des mondes personnalisés
|
|
- Utilisez le système d'assets pour la configuration
|
|
- Enregistrez les composants personnalisés dans la phase setup
|
|
- Testez la génération avec différentes seeds
|
|
- Profilez les performances des fonctions personnalisées
|
|
{{< /callout >}}
|