201 lines
4.7 KiB
Markdown
201 lines
4.7 KiB
Markdown
---
|
|
title: Farming
|
|
type: docs
|
|
weight: 2
|
|
---
|
|
|
|
The farming system provides crop growth, harvesting, and animal coop mechanics.
|
|
|
|
**Package:** `com.hypixel.hytale.builtin.adventure.farming`
|
|
|
|
## Architecture
|
|
|
|
```
|
|
FarmingPlugin
|
|
├── Block Components (ChunkStore)
|
|
│ ├── TilledSoilBlock - Farmland state
|
|
│ ├── FarmingBlock - Crop growth tracking
|
|
│ ├── FarmingBlockState - Block growth state
|
|
│ └── CoopBlock - Animal coop state
|
|
├── Entity Components (EntityStore)
|
|
│ └── CoopResidentComponent - Animals in coops
|
|
├── Growth Modifiers
|
|
│ ├── FertilizerGrowthModifier
|
|
│ ├── WaterGrowthModifier
|
|
│ └── LightLevelGrowthModifier
|
|
└── Farming Stages
|
|
├── BlockTypeFarmingStageData
|
|
├── BlockStateFarmingStageData
|
|
├── PrefabFarmingStageData
|
|
└── SpreadFarmingStageData
|
|
```
|
|
|
|
## Block Components
|
|
|
|
### TilledSoilBlock
|
|
|
|
Tracks tilled soil state on ChunkStore:
|
|
|
|
```java
|
|
ComponentType<ChunkStore, TilledSoilBlock> type =
|
|
FarmingPlugin.get().getTiledSoilBlockComponentType();
|
|
```
|
|
|
|
### FarmingBlock
|
|
|
|
Tracks crop growth progress:
|
|
|
|
```java
|
|
public class FarmingBlock {
|
|
// Growth rate modifier (0 = no spread on newly generated)
|
|
public void setSpreadRate(float rate);
|
|
}
|
|
```
|
|
|
|
### FarmingBlockState
|
|
|
|
Current farming state for a block position.
|
|
|
|
### CoopBlock
|
|
|
|
Animal coop block state for housing creatures.
|
|
|
|
## Growth Modifiers
|
|
|
|
Growth modifiers affect crop growth rate:
|
|
|
|
| Modifier | Type ID | Description |
|
|
|----------|---------|-------------|
|
|
| `FertilizerGrowthModifierAsset` | `Fertilizer` | Boosts growth with fertilizer |
|
|
| `WaterGrowthModifierAsset` | `Water` | Water proximity bonus |
|
|
| `LightLevelGrowthModifierAsset` | `LightLevel` | Light-based growth |
|
|
|
|
### Asset Configuration
|
|
|
|
```yaml
|
|
# Farming/Modifiers/bone_meal.json
|
|
{
|
|
"Id": "bone_meal",
|
|
"Type": "Fertilizer",
|
|
"GrowthMultiplier": 2.0
|
|
}
|
|
```
|
|
|
|
## Farming Stages
|
|
|
|
Crops progress through stages defined as assets:
|
|
|
|
| Stage Type | Type ID | Description |
|
|
|------------|---------|-------------|
|
|
| `BlockTypeFarmingStageData` | `BlockType` | Changes block type |
|
|
| `BlockStateFarmingStageData` | `BlockState` | Changes block state |
|
|
| `PrefabFarmingStageData` | `Prefab` | Places a prefab structure |
|
|
| `SpreadFarmingStageData` | `Spread` | Spreads to adjacent blocks |
|
|
|
|
### Spread Growth Behavior
|
|
|
|
```java
|
|
public interface SpreadGrowthBehaviour {
|
|
// Directional growth (vines, etc.)
|
|
}
|
|
|
|
public class DirectionalGrowthBehaviour implements SpreadGrowthBehaviour {
|
|
// Grows in specified direction
|
|
}
|
|
```
|
|
|
|
## Interactions
|
|
|
|
Registered farming interactions:
|
|
|
|
| Interaction | Type ID | Description |
|
|
|-------------|---------|-------------|
|
|
| `HarvestCropInteraction` | `HarvestCrop` | Harvest mature crops |
|
|
| `FertilizeSoilInteraction` | `FertilizeSoil` | Apply fertilizer |
|
|
| `ChangeFarmingStageInteraction` | `ChangeFarmingStage` | Force stage change |
|
|
| `UseWateringCanInteraction` | `UseWateringCan` | Water crops |
|
|
| `UseCoopInteraction` | `UseCoop` | Interact with animal coop |
|
|
| `UseCaptureCrateInteraction` | `UseCaptureCrate` | Capture animals |
|
|
|
|
### Interaction Example
|
|
|
|
```yaml
|
|
# Item interaction definition
|
|
{
|
|
"Type": "HarvestCrop",
|
|
"DropTable": "wheat_drops"
|
|
}
|
|
```
|
|
|
|
## Animal Coops
|
|
|
|
### FarmingCoopAsset
|
|
|
|
Define coop configurations:
|
|
|
|
```yaml
|
|
# Farming/Coops/chicken_coop.json
|
|
{
|
|
"Id": "chicken_coop",
|
|
"Capacity": 4,
|
|
"NPCGroups": ["chickens"],
|
|
"Drops": "egg_drops"
|
|
}
|
|
```
|
|
|
|
### CoopResidentComponent
|
|
|
|
Entity component for animals living in coops:
|
|
|
|
```java
|
|
ComponentType<EntityStore, CoopResidentComponent> type =
|
|
FarmingPlugin.get().getCoopResidentComponentType();
|
|
```
|
|
|
|
## Systems
|
|
|
|
The farming plugin registers these ECS systems:
|
|
|
|
| System | Description |
|
|
|--------|-------------|
|
|
| `OnSoilAdded` | Initialize soil when tilled |
|
|
| `OnFarmBlockAdded` | Initialize crop when planted |
|
|
| `Ticking` | Process growth each tick |
|
|
| `MigrateFarming` | Migration for old data |
|
|
| `OnCoopAdded` | Initialize coop blocks |
|
|
| `CoopResidentEntitySystem` | Manage coop residents |
|
|
| `CoopResidentTicking` | Coop production ticking |
|
|
|
|
## Events
|
|
|
|
```java
|
|
// Prevent spread on newly generated chunks
|
|
getEventRegistry().registerGlobal(
|
|
EventPriority.LAST,
|
|
ChunkPreLoadProcessEvent.class,
|
|
FarmingPlugin::preventSpreadOnNew
|
|
);
|
|
```
|
|
|
|
## API Usage
|
|
|
|
```java
|
|
FarmingPlugin farming = FarmingPlugin.get();
|
|
|
|
// Get component types for queries
|
|
ComponentType<ChunkStore, FarmingBlock> farmingType =
|
|
farming.getFarmingBlockComponentType();
|
|
|
|
// Check farming state
|
|
FarmingBlock block = holder.getComponent(farmingType);
|
|
if (block != null) {
|
|
block.setSpreadRate(1.0f);
|
|
}
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Assets loaded from `Farming/` directory:
|
|
- `Farming/Modifiers/` - Growth modifier definitions
|
|
- `Farming/Coops/` - Animal coop definitions
|