--- title: Patterns de Génération type: docs weight: 11 --- Les patterns de génération fournissent des algorithmes réutilisables pour créer des caractéristiques de terrain, des structures et des décorations. **Packages:** - `com.hypixel.hytale.builtin.hytalegenerator.patterns` - `com.hypixel.hytale.builtin.hytalegenerator.fields` ## Système de Patterns Les patterns encapsulent la logique de génération : ```java public interface GenerationPattern { // Appliquer le pattern au conteneur void apply(GenerationContainer container, PatternContext context); } public class PatternContext { private Vector3i origin; private int size; private Random random; private Map parameters; } ``` ## Patterns Intégrés ### SpherePattern Crée des formations sphériques : ```yaml Type: SpherePattern Radius: 5 Block: stone Hollow: false ``` ```java public class SpherePattern implements GenerationPattern { private float radius; private BlockType block; private boolean hollow; public void apply(GenerationContainer container, PatternContext ctx) { int r = (int) radius; for (int dx = -r; dx <= r; dx++) { for (int dy = -r; dy <= r; dy++) { for (int dz = -r; dz <= r; dz++) { float dist = (float) Math.sqrt(dx*dx + dy*dy + dz*dz); if (dist <= radius && (!hollow || dist > radius - 1)) { container.setBlock( ctx.origin.x + dx, ctx.origin.y + dy, ctx.origin.z + dz, block ); } } } } } } ``` ### CylinderPattern Crée des formations cylindriques : ```yaml Type: CylinderPattern Radius: 4 Height: 10 Block: stone Hollow: true ``` ### ArchPattern Crée des formations d'arches : ```yaml Type: ArchPattern Width: 8 Height: 6 Thickness: 2 Block: stone ``` ### SpirePattern Crée des formes de flèche/stalagmite : ```yaml Type: SpirePattern BaseRadius: 3 Height: 15 TaperRate: 0.2 Block: stone ``` ## Génération par Champs Les champs génèrent des valeurs à travers l'espace 2D ou 3D : ### NoiseField ```java public class NoiseField implements Field2D { private SimplexNoise noise; private float scale; private int octaves; public float getValue(int x, int z) { return noise.noise2D(x * scale, z * scale); } } ``` ### GradientField ```java public class GradientField implements Field2D { private Vector2f direction; private float scale; public float getValue(int x, int z) { return (x * direction.x + z * direction.y) * scale; } } ``` ### VoronoiField ```java public class VoronoiField implements Field2D { private List points; public float getValue(int x, int z) { float minDist = Float.MAX_VALUE; for (Vector2i point : points) { float dist = (float) Math.sqrt( (x - point.x) * (x - point.x) + (z - point.y) * (z - point.y) ); minDist = Math.min(minDist, dist); } return minDist; } } ``` ## Patterns Composites ### RepeatPattern Répète un pattern dans une grille : ```yaml Type: RepeatPattern Pattern: pillar_pattern SpacingX: 10 SpacingZ: 10 Count: 16 ``` ### ScatterPattern Place des patterns à des positions aléatoires : ```yaml Type: ScatterPattern Pattern: boulder_pattern Density: 0.05 MinSpacing: 5 ``` ### ConditionalPattern Applique un pattern selon des conditions : ```yaml Type: ConditionalPattern Pattern: snow_cap Condition: Type: HeightAbove Height: 100 ``` ## Patterns de Terrain ### RiverPattern Creuse des canaux de rivière : ```java public class RiverPattern implements GenerationPattern { private List path; private float width; private float depth; public void apply(GenerationContainer container, PatternContext ctx) { for (Vector2f point : path) { carveRiverSection(container, point, width, depth); } } } ``` ### CliffPattern Crée des formations de falaises : ```yaml Type: CliffPattern Height: 20 Steepness: 0.9 NoiseScale: 0.1 ``` ### TerracePattern Crée un terrain en terrasses : ```yaml Type: TerracePattern TerraceHeight: 5 TerraceCount: 4 Smoothing: 0.3 ``` ## Patterns de Décoration ### ClusterPattern Crée des groupes de blocs : ```yaml Type: ClusterPattern Block: flower_red Size: 3-7 Density: 0.8 ``` ### VeinPattern Crée des veines de minerai : ```yaml Type: VeinPattern Block: iron_ore Length: 10-20 Branching: 0.3 ``` ### LayerPattern Crée des couches horizontales : ```yaml Type: LayerPattern Layers: - Block: grass_block Thickness: 1 - Block: dirt Thickness: 3 - Block: stone Thickness: -1 # Remplir le reste ``` ## Configuration ```yaml # patterns/config.yaml Patterns: boulder: Type: SpherePattern Radius: 2-4 Block: stone tree_trunk: Type: CylinderPattern Radius: 1 Height: 5-10 Block: oak_log crystal_cluster: Type: ClusterPattern Block: crystal Size: 3-8 ``` ## Pattern Personnalisé ```java public class MyPattern implements GenerationPattern { @Override public void apply(GenerationContainer container, PatternContext ctx) { // Logique de génération personnalisée int size = ctx.parameters.getInt("size", 5); for (int i = 0; i < size; i++) { int x = ctx.origin.x + ctx.random.nextInt(size); int z = ctx.origin.z + ctx.random.nextInt(size); int y = container.getHeight(x, z); container.setBlock(x, y + 1, z, BlockTypes.STONE); } } } // Enregistrer patternRegistry.register("my_pattern", new MyPattern()); ``` ## Bonnes Pratiques {{< callout type="info" >}} **Directives des Patterns :** - Utilisez les patterns pour une logique de génération réutilisable - Combinez les patterns avec les champs pour la variété - Testez les patterns à différentes échelles - Considérez les performances avec les patterns complexes - Documentez clairement les paramètres des patterns {{< /callout >}}