> For the complete documentation index, see [llms.txt](https://docs.boii.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.boii.dev/fivem-paid-resources/planting-system/guides/adding-plants.md).

# Adding Plants

This guide covers how to define new plant types in the `data/plants.lua` static configuration file.&#x20;

Each plant entry defines how that plant behaves in the growing system covering growth stages, item requirements, XP rewards, environmental resistances, and yield.

***

## Default Values

The `defaults` table defines shared values that are inherited by all plants unless explicitly overridden.

#### Example: `defaults`

```lua
plants.defaults = {
    image = "plant_icon.png",
    should_outline = true,
    outline_colour = { r = 100, g = 200, b = 100 },
    preferred_altitude = { min = 0, max = 2000 },

    stages = {
        { stage = 1, model = "prop_veg_crop_03_cab", threshold = 0 },
        { stage = 2, model = "prop_veg_crop_03_cab", threshold = 25 },
        { stage = 3, model = "prop_veg_crop_03_cab", threshold = 50 },
        { stage = 4, model = "prop_veg_crop_03_cab", threshold = 75 },
        { stage = 5, model = "prop_veg_crop_03_cab", threshold = 100 }
    },

    resistances = {
        altitude = 1,
        disease = 1,
        pest = 1,
        soil = 1,
        weather = 1
    },

    yield = {
        min = 2,
        max = 6,
        seed_chance = 0.2,
        seed_factor = 0.2
    },

    xp = {
        water = { min = 2, max = 6 },
        fertilize = { min = 2, max = 6 },
        harvest = { min = 3, max = 9 },
        plant = { min = 1, max = 4 },
        cure = { min = 1, max = 4 }
    },

    water_item = { id = "watering_can_full", label = "Watering Can (Full)", min = 10, max = 20 },
    fertilizer_item = { id = "fertilizer", label = "Basic Fertilizer", min = 5, max = 10 },
    harvest_item = { id = "trimming_shears", label = "Trimming Shears" }
}
```

***

## Adding a New Plant

Each plant is defined as a key in the returned table. All properties are optional and will fall back to `defaults` if omitted.

#### Example: Cabbage

```lua
plants.cabbage = {
    label = "Cabbage",
    image = "cabbage.png",
    xp = {
        water = { min = 2, max = 5 },
        fertilize = { min = 2, max = 5 },
        harvest = { min = 4, max = 8 },
        plant = { min = 2, max = 4 },
        cure = { min = 1, max = 3 }
    }
}
```

Only XP values and image are overridden. All other values will use the shared `defaults`.

#### Example: Tomato with Custom Stages

```lua
plants.tomato = {
    label = "Tomato",
    image = "tomato.png",
    stages = {
        { stage = 1, model = "prop_veg_crop_01", threshold = 0 },
        { stage = 2, model = "prop_veg_crop_01", threshold = 25 },
        { stage = 3, model = "prop_veg_crop_01", threshold = 50 },
        { stage = 4, model = "prop_veg_crop_01", threshold = 75 },
        { stage = 5, model = "prop_veg_crop_01", threshold = 100 }
    }
}
```

This overrides the stage models but inherits everything else.

***

## Automatic Rewards

Each plant automatically generates two reward items unless manually defined:

* A crop item: `{id = "<plant>_crop", label = "<Label>"}`
* A seed item: `{id = "<plant>_seed", label = "<Label> Seed"}`

These are stored in the `rewards` field per plant:

```lua
plants.tomato.rewards = {
    crop = { id = "tomato_crop", label = "Tomato" },
    seed = { id = "tomato_seed", label = "Tomato Seed" }
}
```

This is handled automatically at the bottom of the file:

```lua
for crop_name, def in pairs(plants) do
    if crop_name ~= "defaults" then
        def.rewards = def.rewards or {}
        def.rewards.crop = { id = crop_name .. "_crop", label = def.label }
        def.rewards.seed = { id = crop_name .. "_seed", label = def.label .. " Seed" }
    end
end
```

You can override this if needed by providing your own `rewards` table.

***

## Plant Definition Reference

| Field                | Description                                                             |
| -------------------- | ----------------------------------------------------------------------- |
| `label`              | Display name of the plant.                                              |
| `image`              | Icon filename shown in the UI.                                          |
| `stages`             | Table of `{ stage, model, threshold }` entries defining growth visuals. |
| `resistances`        | Environmental tolerance scores (1 = average).                           |
| `yield`              | Harvest quantity and seed drop logic.                                   |
| `xp`                 | XP rewards granted for various interactions.                            |
| `water_item`         | Item used to water the plant (requires `id`, `label`, `min`, `max`).    |
| `fertilizer_item`    | Item used to fertilize the plant.                                       |
| `harvest_item`       | Required item to harvest the crop.                                      |
| `preferred_altitude` | Optional altitude range the plant prefers to grow in.                   |
| `should_outline`     | If true, highlights the plant with an outline in DUI-based UIs.         |
| `outline_colour`     | RGB values used for the outline color.                                  |
| `rewards`            | Custom crop and seed item definitions (optional).                       |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.boii.dev/fivem-paid-resources/planting-system/guides/adding-plants.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
