🌾 Sistema de Farming
Sistema extensible y basado en datos para el cultivo de plantas. Incluye etapas de crecimiento configurables, modificadores y soporte para gallineros.
📦 Componentes Principales
FarmingPlugin.java
Rol: Punto de entrada del módulo de farming
| Funcionalidad | Descripción |
|---|---|
| Registro de Assets | GrowthModifierAsset, FarmingCoopAsset |
| Interacciones | HarvestCrop, FertilizeSoil, UseWateringCan,
UseCoop |
| Modificadores | Fertilizer, LightLevel, Water |
| Tipos de Etapas | BlockType, BlockState, Prefab,
Spread |
| Componentes | TilledSoilBlock, FarmingBlock, CoopBlock |
FarmingBlock.java
Rol: Estado de un bloque en crecimiento
// Propiedades clave
String currentStageSet; // Set de etapas actual ("Default")
float growthProgress; // Progreso de crecimiento (0.0 - n.0)
Instant lastTickGameTime; // Último tick procesado
int generation; // Contador para aleatoriedad
float spreadRate; // Velocidad de propagación
TilledSoilBlock.java
Rol: Estado del suelo cultivado
// Estados del suelo
boolean planted; // ¿Tiene cultivo encima?
boolean fertilized; // ¿Fertilizado?
boolean externalWater; // ¿Agua externa (lluvia/bloque)?
Instant wateredUntil; // Tiempo hasta que se seque
Instant decayTime; // Tiempo hasta que decaiga
📈 Modificadores de Crecimiento
Los modificadores alteran la velocidad de crecimiento de los cultivos multiplicando el tiempo base:
| Modificador | Condición | Efecto |
|---|---|---|
| 💧 Water | Bloque de agua adyacente O lluvia | Multiplica velocidad |
| 🧪 Fertilizer | Suelo fertilizado | Multiplica velocidad |
| ☀️ LightLevel | Nivel de luz suficiente | Multiplica velocidad |
🔄 Flujo de Crecimiento
El método FarmingUtil.tickFarming() contiene la lógica principal:
// Flujo de crecimiento
1. Obtener tiempo transcurrido desde último tick
2. Obtener etapa actual del cultivo
3. Calcular duración base de la etapa (min + random * (max-min))
4. Aplicar multiplicadores de crecimiento
5. Si tiempo >= duración: avanzar a siguiente etapa
6. Programar próximo tick
Cálculo de Multiplicadores
Cada modificador activo multiplica el resultado del anterior. Por ejemplo: Water (1.5x) + Fertilizer (1.3x) = 1.95x velocidad total.
Cada modificador activo multiplica el resultado del anterior. Por ejemplo: Water (1.5x) + Fertilizer (1.3x) = 1.95x velocidad total.
📁 Archivos Clave
- FarmingPlugin.java 134 líneas - Registro del módulo
- FarmingSystems.java 542 líneas - Lógica de tick
- FarmingUtil.java 246 líneas - Utilidades de crecimiento
- FarmingData.java 105 líneas - Configuración
- FarmingBlock.java 126 líneas - Estado de cultivo
- TilledSoilBlock.java 136 líneas - Estado de suelo
- WaterGrowthModifierAsset.java 197 líneas - Modificador agua