---
title: Agriculture
type: docs
weight: 2
---

Le systeme d'agriculture fournit la croissance des cultures, la recolte et les mecaniques de poulaillers.

**Package:** `com.hypixel.hytale.builtin.adventure.farming`

## Architecture

```
FarmingPlugin
├── Composants de Bloc (ChunkStore)
│   ├── TilledSoilBlock - Etat de la terre labouree
│   ├── FarmingBlock - Suivi de croissance
│   ├── FarmingBlockState - Etat de croissance du bloc
│   └── CoopBlock - Etat du poulailler
├── Composants d'Entite (EntityStore)
│   └── CoopResidentComponent - Animaux dans les poulaillers
├── Modificateurs de Croissance
│   ├── FertilizerGrowthModifier
│   ├── WaterGrowthModifier
│   └── LightLevelGrowthModifier
└── Etapes d'Agriculture
    ├── BlockTypeFarmingStageData
    ├── BlockStateFarmingStageData
    ├── PrefabFarmingStageData
    └── SpreadFarmingStageData
```

## Composants de Bloc

### TilledSoilBlock

Suit l'etat du sol laboure sur ChunkStore:

```java
ComponentType<ChunkStore, TilledSoilBlock> type =
    FarmingPlugin.get().getTiledSoilBlockComponentType();
```

### FarmingBlock

Suit la progression de croissance des cultures:

```java
public class FarmingBlock {
    // Modificateur de taux de croissance (0 = pas de propagation sur nouveau)
    public void setSpreadRate(float rate);
}
```

### FarmingBlockState

Etat actuel d'agriculture pour une position de bloc.

### CoopBlock

Etat du bloc poulailler pour heberger des creatures.

## Modificateurs de Croissance

Les modificateurs de croissance affectent le taux de croissance:

| Modificateur | ID Type | Description |
|--------------|---------|-------------|
| `FertilizerGrowthModifierAsset` | `Fertilizer` | Boost avec engrais |
| `WaterGrowthModifierAsset` | `Water` | Bonus proximite eau |
| `LightLevelGrowthModifierAsset` | `LightLevel` | Croissance basee sur lumiere |

### Configuration d'Asset

```yaml
# Farming/Modifiers/bone_meal.json
{
  "Id": "bone_meal",
  "Type": "Fertilizer",
  "GrowthMultiplier": 2.0
}
```

## Etapes d'Agriculture

Les cultures progressent a travers des etapes definies comme assets:

| Type d'Etape | ID Type | Description |
|--------------|---------|-------------|
| `BlockTypeFarmingStageData` | `BlockType` | Change le type de bloc |
| `BlockStateFarmingStageData` | `BlockState` | Change l'etat du bloc |
| `PrefabFarmingStageData` | `Prefab` | Place une structure prefab |
| `SpreadFarmingStageData` | `Spread` | Se propage aux blocs adjacents |

### Comportement de Propagation

```java
public interface SpreadGrowthBehaviour {
    // Croissance directionnelle (vignes, etc.)
}

public class DirectionalGrowthBehaviour implements SpreadGrowthBehaviour {
    // Pousse dans la direction specifiee
}
```

## Interactions

Interactions d'agriculture enregistrees:

| Interaction | ID Type | Description |
|-------------|---------|-------------|
| `HarvestCropInteraction` | `HarvestCrop` | Recolter les cultures matures |
| `FertilizeSoilInteraction` | `FertilizeSoil` | Appliquer de l'engrais |
| `ChangeFarmingStageInteraction` | `ChangeFarmingStage` | Forcer changement d'etape |
| `UseWateringCanInteraction` | `UseWateringCan` | Arroser les cultures |
| `UseCoopInteraction` | `UseCoop` | Interagir avec le poulailler |
| `UseCaptureCrateInteraction` | `UseCaptureCrate` | Capturer des animaux |

### Exemple d'Interaction

```yaml
# Definition d'interaction d'item
{
  "Type": "HarvestCrop",
  "DropTable": "wheat_drops"
}
```

## Poulaillers

### FarmingCoopAsset

Definir les configurations de poulailler:

```yaml
# Farming/Coops/chicken_coop.json
{
  "Id": "chicken_coop",
  "Capacity": 4,
  "NPCGroups": ["chickens"],
  "Drops": "egg_drops"
}
```

### CoopResidentComponent

Composant d'entite pour les animaux vivant dans les poulaillers:

```java
ComponentType<EntityStore, CoopResidentComponent> type =
    FarmingPlugin.get().getCoopResidentComponentType();
```

## Systemes

Le plugin d'agriculture enregistre ces systemes ECS:

| Systeme | Description |
|---------|-------------|
| `OnSoilAdded` | Initialiser le sol quand laboure |
| `OnFarmBlockAdded` | Initialiser la culture quand plantee |
| `Ticking` | Traiter la croissance chaque tick |
| `MigrateFarming` | Migration pour anciennes donnees |
| `OnCoopAdded` | Initialiser les blocs poulailler |
| `CoopResidentEntitySystem` | Gerer les residents du poulailler |
| `CoopResidentTicking` | Ticking de production du poulailler |

## Evenements

```java
// Empecher la propagation sur les chunks nouvellement generes
getEventRegistry().registerGlobal(
    EventPriority.LAST,
    ChunkPreLoadProcessEvent.class,
    FarmingPlugin::preventSpreadOnNew
);
```

## Utilisation de l'API

```java
FarmingPlugin farming = FarmingPlugin.get();

// Obtenir les types de composants pour les requetes
ComponentType<ChunkStore, FarmingBlock> farmingType =
    farming.getFarmingBlockComponentType();

// Verifier l'etat d'agriculture
FarmingBlock block = holder.getComponent(farmingType);
if (block != null) {
    block.setSpreadRate(1.0f);
}
```

## Configuration

Assets charges depuis le repertoire `Farming/`:
- `Farming/Modifiers/` - Definitions des modificateurs de croissance
- `Farming/Coops/` - Definitions des poulaillers
