# Creating & Using Containers

Containers are shared, slot-based inventories that can be created dynamically or pre-defined for vehicles, world drops, fridges, etc. They support the same clean method API as player inventories.

***

## Creating a Container

Use the `create_container` export **from the server** to create any container:

```lua
local data, err = exports.list_inventory:create_container("world", "fridge", {
    owner = "house_7",
    coords = vector3(123.4, 456.7, 789.0),
    persist = true
})
```

#### Params

| Name       | Type     | Description                                  |
| ---------- | -------- | -------------------------------------------- |
| `category` | `string` | Logical group (`world`, `vehicle`, etc.)     |
| `subtype`  | `string` | Container type (`fridge`, `drop`, etc.)      |
| `options`  | `table`  | Metadata: `owner`, `coords`, `persist`, etc. |

***

## Getting a Container

Use `get_container(id)` to retrieve an active container object:

```lua
local container = exports.list_inventory:get_container("trunk:ABC123")
if not container then return end
```

Once retrieved, you can use any container method:

```lua
container:add_item("bandage", 2)
```

***

## Container Methods

All container objects support these public methods:

* `add_item(id, amount, metadata)`
* `remove_item(lookup, amount)`
* `split_item(slot, amount)`
* `get_items()` / `get_item(lookup)`
* `has_item(lookup, amount)`
* `clear_items()`
* `save()` / `sync()`
* `get_data(key)` / `set_data(key, value)`

***

## Default Container Types

Container types and defaults are defined in `data/containers.lua`. You can modify these or add your own.

#### Vehicles

| Type       | Default Slots | Category  |
| ---------- | ------------- | --------- |
| `trunk`    | 100           | `vehicle` |
| `glovebox` | 10            | `vehicle` |
| `trailer`  | 120           | `vehicle` |

#### Loot & Drops

| Type      | Default Slots | Category | Extras                    |
| --------- | ------------- | -------- | ------------------------- |
| `drop`    | 200           | `loot`   | Bag prop, outlines red    |
| `airdrop` | 50            | `loot`   | Crate prop, outlines blue |

#### Storage Containers

| Type          | Default Slots | Category  | Notes                       |
| ------------- | ------------- | --------- | --------------------------- |
| `desk_fridge` | 5             | `storage` | quality\_preservation = 1.5 |
| `mini_fridge` | 40            | `storage` | quality\_preservation = 2.0 |
| `fridge`      | 40            | `storage` | prevent\_spoil = true       |

You can define props, outline styles, and special logic like spoilage blocking or preservation multipliers.

***

## Temporary Drops

Drop containers (category `loot`, subtype `drop`) are temporary. When emptied, they are:

* Deleted from server memory
* Removed from the client UI

These are handled internally when a player drops an item however you could make one if you want too, why not? Who said you cant.

```lua
local coords = GetEntityCoords(GetPlayerPed(source))
exports.list_inventory:create_container("loot", "drop", {
    owner = "drop_" .. source,
    coords = coords,
    persist = false
})
```

***

## Notes

* Containers use **slot limits**, not weights
* Some types (like fridges) can prevent degradation or slow it if enabled
* If a persistent container already exists for an `owner`, it will be loaded instead of recreated
* You can define **your own** container types freely, provided ones are purely example

Stay slotted, stay chill.™


---

# Agent Instructions: 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/list-inventory/guides/creating-and-using-containers.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.
