Files
Documentation/content/world/worldgen/prop-placement.fr.md
2026-01-20 20:33:59 +01:00

5.4 KiB

title, type, weight
title type weight
Placement de Props docs 10

Le placement de props gère la génération de végétation, de décorations et de petits objets sur les surfaces du terrain.

Package: com.hypixel.hytale.builtin.hytalegenerator.props

Système de Props

Les props sont de petites caractéristiques placées après la génération du terrain :

public interface PropPlacer {
    // Placer des props dans un chunk
    void place(GenerationContainer container, int chunkX, int chunkZ);
}

public class PropContext {
    private int x, y, z;
    private Biome biome;
    private BlockType surfaceBlock;
    private float slope;
    private boolean nearWater;
}

Définition de Prop

# props/oak_tree.yaml
Type: Prop
Id: oak_tree
Prefab: prefabs/trees/oak_medium
Density: 0.02
Placement:
  SurfaceTypes: [grass_block, dirt]
  MinSlope: 0
  MaxSlope: 30
  MinSpacing: 3
Requirements:
  ClearanceAbove: 10
  ClearanceRadius: 2
Variants:
  - prefabs/trees/oak_small
  - prefabs/trees/oak_medium
  - prefabs/trees/oak_large
VariantWeights: [0.3, 0.5, 0.2]

Fournisseurs de Position

Déterminent où les props peuvent être placés :

RandomPositionProvider

Positions de surface aléatoires :

Type: RandomPosition
Density: 0.1
GridSize: 4  # Une tentative par zone 4x4

GridPositionProvider

Grille régulière avec gigue :

Type: GridPosition
Spacing: 8
Jitter: 3

NoisePositionProvider

Regroupement basé sur le bruit :

Type: NoisePosition
NoiseScale: 0.05
Threshold: 0.3
Density: 0.5

Règles de Placement

public class PlacementRules {
    private Set<BlockType> validSurfaces;
    private float minSlope;
    private float maxSlope;
    private int minSpacing;
    private int clearanceAbove;

    public boolean canPlace(PropContext ctx) {
        // Vérifier le type de surface
        if (!validSurfaces.contains(ctx.surfaceBlock)) {
            return false;
        }

        // Vérifier la pente
        if (ctx.slope < minSlope || ctx.slope > maxSlope) {
            return false;
        }

        // Vérifier l'espacement des autres props
        if (!hasMinSpacing(ctx)) {
            return false;
        }

        // Vérifier le dégagement
        if (!hasClearance(ctx)) {
            return false;
        }

        return true;
    }
}

Props de Végétation

TreePlacer

Place des arbres avec variation par biome :

Type: TreePlacer
Biomes:
  forest:
    Density: 0.3
    Types: [oak, birch, maple]
  plains:
    Density: 0.02
    Types: [oak]
  jungle:
    Density: 0.5
    Types: [jungle_tree, palm]

GrassPlacer

Place de l'herbe et des fleurs :

Type: GrassPlacer
Density: 0.8
Variants:
  - Block: tall_grass
    Weight: 0.7
  - Block: fern
    Weight: 0.2
  - Block: flower_red
    Weight: 0.05
  - Block: flower_yellow
    Weight: 0.05

BushPlacer

Place des buissons et arbustes :

Type: BushPlacer
Density: 0.1
Prefabs: [bush_small, bush_medium]
NearTreesOnly: true
TreeDistance: 5

Props d'Objets

RockPlacer

Place des rochers et blocs :

Type: RockPlacer
Density: 0.05
Sizes:
  - Prefab: rock_small
    Weight: 0.6
  - Prefab: rock_medium
    Weight: 0.3
  - Prefab: rock_large
    Weight: 0.1
BiomeModifiers:
  mountains: 2.0
  plains: 0.5

DebrisPlacer

Place des troncs tombés, branches :

Type: DebrisPlacer
Density: 0.03
Items:
  - fallen_log
  - branch
  - leaf_pile
ForestOnly: true

Intégration des Biomes

public class BiomePropPlacer implements PropPlacer {
    private Map<String, List<PropConfig>> biomeProps;

    public void place(GenerationContainer container, int chunkX, int chunkZ) {
        for (int x = 0; x < 16; x++) {
            for (int z = 0; z < 16; z++) {
                int worldX = chunkX * 16 + x;
                int worldZ = chunkZ * 16 + z;

                Biome biome = container.getBiome(worldX, worldZ);
                List<PropConfig> props = biomeProps.get(biome.getId());

                for (PropConfig prop : props) {
                    if (shouldPlace(prop, worldX, worldZ)) {
                        placeProp(container, prop, worldX, worldZ);
                    }
                }
            }
        }
    }
}

Configuration

# props/config.yaml
PropPlacement:
  Enabled: true
  DensityMultiplier: 1.0
  Props:
    - Type: TreePlacer
      Priority: 1
    - Type: BushPlacer
      Priority: 2
    - Type: GrassPlacer
      Priority: 3
    - Type: RockPlacer
      Priority: 4

Prop Placer Personnalisé

public class MyPropPlacer implements PropPlacer {
    @Override
    public void place(GenerationContainer container, int chunkX, int chunkZ) {
        for (int x = 0; x < 16; x++) {
            for (int z = 0; z < 16; z++) {
                if (random.nextFloat() < 0.1f) {
                    int surfaceY = container.getHeight(x, z);
                    // Placer un prop personnalisé
                    placeMyProp(container, x, surfaceY + 1, z);
                }
            }
        }
    }
}

Bonnes Pratiques

{{< callout type="info" >}} Directives de Placement de Props :

  • Utilisez une densité appropriée pour l'ambiance du biome
  • Assurez-vous que les props ne se chevauchent pas
  • Ajoutez de la variété avec plusieurs variantes
  • Considérez les performances avec une haute densité
  • Testez la distribution visuelle sur le terrain {{< /callout >}}