This commit is contained in:
2026-01-20 20:33:59 +01:00
commit b16a40e431
583 changed files with 87339 additions and 0 deletions

View File

@@ -0,0 +1,252 @@
---
title: Génération de Grottes
type: docs
weight: 2
---
Le système de génération de grottes crée des réseaux de grottes souterraines, des cavernes et des caractéristiques souterraines.
**Package:** `com.hypixel.hytale.server.worldgen.cave`
## Cave Generator
Le `CaveGenerator` creuse les espaces souterrains :
```java
public class CaveGenerator {
// Générer des grottes pour un chunk
public void generateCaves(GenerationContainer container, int chunkX, int chunkZ);
// Vérifier si une position est dans une grotte
public boolean isInCave(int x, int y, int z);
// Obtenir la densité de grotte à une position
public float getCaveDensity(int x, int y, int z);
}
```
## Types de Grottes
### Grottes Tunnel
Tunnels sinueux à travers le terrain :
```yaml
CaveType: Tunnel
Width: 3.0
Height: 4.0
Length: 50-200
Frequency: 0.02
MinY: 10
MaxY: 60
```
### Grottes Caverne
Grands espaces souterrains ouverts :
```yaml
CaveType: Cavern
MinRadius: 10
MaxRadius: 30
MinHeight: 8
MaxHeight: 20
Frequency: 0.005
MinY: 5
MaxY: 40
```
### Grottes Ravine
Formations de fissures verticales :
```yaml
CaveType: Ravine
Width: 5-15
Depth: 30-60
Length: 100-300
Frequency: 0.001
```
## Génération Basée sur le Bruit
Les grottes utilisent du bruit 3D pour des formes naturelles :
```java
public class CaveNoiseGenerator {
private SimplexNoise primaryNoise;
private SimplexNoise secondaryNoise;
private float threshold;
public boolean shouldCarve(int x, int y, int z) {
float noise1 = primaryNoise.noise3D(x * 0.05f, y * 0.1f, z * 0.05f);
float noise2 = secondaryNoise.noise3D(x * 0.02f, y * 0.05f, z * 0.02f);
float combined = (noise1 + noise2) / 2.0f;
return combined > threshold;
}
}
```
## Creusement de Grottes
```java
public class CaveCarver {
// Creuser une sphère à une position
public void carveSphere(GenerationContainer container, Vector3d center, float radius);
// Creuser un tunnel entre deux points
public void carveTunnel(
GenerationContainer container,
Vector3d start,
Vector3d end,
float radius
);
// Creuser avec du bruit
public void carveWithNoise(
GenerationContainer container,
Vector3d position,
NoiseGenerator noise,
float threshold
);
}
```
## Décoration de Grottes
Après le creusement, les grottes sont décorées :
```java
public class CaveDecorator {
// Ajouter stalactites/stalagmites
public void addStalactites(GenerationContainer container, int x, int y, int z);
// Ajouter des formations de cristaux
public void addCrystals(GenerationContainer container, int x, int y, int z);
// Ajouter des bassins d'eau/lave
public void addPool(GenerationContainer container, int x, int y, int z, FluidType type);
// Ajouter de la végétation de grotte
public void addMushrooms(GenerationContainer container, int x, int y, int z);
}
```
## Biomes de Grottes
Différents biomes de grottes avec des caractéristiques uniques :
```yaml
# cave_biomes/crystal_cave.yaml
Type: CaveBiome
Id: crystal_cave
Features:
- Type: CrystalCluster
Frequency: 0.1
MinSize: 2
MaxSize: 8
- Type: GlowingMushroom
Frequency: 0.05
AmbientLight: 0.2
Blocks:
Floor: crystal_stone
Ceiling: crystal_stone
Walls: smooth_stone
```
## Configuration des Grottes
```yaml
# worldgen/cave_config.yaml
CaveGeneration:
Enabled: true
Types:
- Type: Tunnel
Weight: 0.6
MinY: 10
MaxY: 60
- Type: Cavern
Weight: 0.3
MinY: 5
MaxY: 40
- Type: Ravine
Weight: 0.1
MinY: 0
MaxY: 64
Decoration:
Stalactites: true
Pools: true
Vegetation: true
NoiseSettings:
Octaves: 4
Persistence: 0.5
Scale: 0.05
```
## Systèmes de Grottes
Réseaux de grottes connectées :
```java
public class CaveSystem {
private List<CaveNode> nodes;
private List<CaveConnection> connections;
// Générer un système connecté
public void generate(GenerationContainer container) {
// Créer les nœuds
for (int i = 0; i < nodeCount; i++) {
nodes.add(createCaveNode());
}
// Connecter les nœuds
for (CaveNode node : nodes) {
CaveNode nearest = findNearest(node);
connections.add(new CaveConnection(node, nearest));
}
// Creuser les cavernes
for (CaveNode node : nodes) {
carver.carveCavern(container, node.position, node.radius);
}
// Creuser les tunnels
for (CaveConnection conn : connections) {
carver.carveTunnel(container, conn.start, conn.end, conn.radius);
}
}
}
```
## Intégration avec le Terrain
```java
public class TerrainCaveIntegration {
// Empêcher les grottes de percer la surface
public boolean shouldCarve(int x, int y, int z, int surfaceY) {
// Ne pas creuser à moins de 5 blocs de la surface
if (y > surfaceY - 5) {
return false;
}
// Ne pas creuser sous le niveau de bedrock
if (y < 5) {
return false;
}
return caveNoise.shouldCarve(x, y, z);
}
}
```
## Bonnes Pratiques
{{< callout type="info" >}}
**Directives des Grottes :**
- Équilibrez la fréquence des grottes avec la densité du monde
- Utilisez le bruit pour des formes naturelles
- Connectez les systèmes de grottes pour l'exploration
- Ajoutez de la décoration pour l'intérêt visuel
- Considérez les performances avec les grandes cavernes
{{< /callout >}}