InvRef

## Описание

Ссылка на инвентарь. Может быть получена с помощью get\_inventory().

## Методы

```
boolean = inv:is_empty(string list_name)

```

Возвращает `true`, если раздел `list_name` инвентаря `inv` пуст (в том числе, если такой раздел не существует).

```
number = inv:get_size(string list_name)

```

Возвращает количество слотов в разделе `list_name` инвентаря `inv` (если такой раздел не существует, возвращает 0).

```
boolean = inv:set_size(string list_name, number size)

```

Задаёт количество слотов в разделе `list_name` инвентаря `inv` (если такой раздел не существовал, он создаётся); возвращает `true`, если успешно, и `false` — если использован неверный формат аргументов.

```
number = inv:get_width(string list_name)

```

Возвращает ширину (в слотах) раздела `list_name` инвентаря `inv`.

```
nil = inv:set_width(string list_name, number width)

```

Задаёт ширину (в слотах) раздела `list_name` инвентаря `inv`; раздел должен существовать, т.е. количество слотов в нём должно быть больше нуля.

```
ItemStack = inv:get_stack(string list_name, number i)

```

Возвращает стак, находящийся в слоте `i` раздела `list_name` инвентаря `inv`.

```
boolean = inv:set_stack(string list_name, number i, ItemStack | ItemTable | ItemString | nil stack)

```

Задаёт содержимое слота `i` раздела `list_name` инвентаря `inv`; возвращает `true`, если успешно, и `false` — если указанного слота не существует или содержимое стака не зарегистрировано.

```
table = inv:get_list(string list_name)

```

Возвращает содержимое раздела `list_name` инвентаря `inv` в виде списка, содержащего стаки в формате ItemStack.

```
nil = inv:set_list(string list_name, table list)

```

Задаёт содержимое раздела `list_name` инвентаря `inv`; таблица `list` может содержать элементы ItemStack, ItemTable, ItemString или nil; размер раздела при этом не изменяется, лишние элементы таблицы просто игнорируются.

```
table = inv:get_lists()

```

Возвращает таблицу, полями которой являются наименования разделов инвентаря `inv`, а элементами — таблицы с содержимым этих разделов в формате ItemStack.

```
nil = inv:set_lists(table lists)

```

Задаёт содержимое инвентаря `inv`; формат аргумента аналогичен возврату `get_lists`, однако стаки могут быть не только ItemStack, но и ItemTable, ItemString или nil.

```
ItemStack = inv:add_item(string list_name, ItemStack | ItemTable | ItemString | nil stack)

```

Пытается добавить в раздел `list_name` инвентаря `inv` стак `stack`; возвращает остаток (то, что не поместилось).

```
boolean = inv:room_for_item(string list_name, ItemStack | ItemTable | ItemString | nil stack)

```

Возвращает `true`, если стак `stack` помещается в раздела `list_name` инвентаря `inv`.

```
boolean = inv:contains_item(string list_name, ItemStack | ItemTable | ItemString | nil stack)

```

Возвращает `true`, если стак `stack` можно взять из раздела `list_name` инвентаря `inv`.

```
ItemStack = inv:remove_item(string list_name, ItemStack | ItemTable | ItemString | nil stack)

```

Пытается удалить из раздела `list_name` инвентаря `inv` стак `stack`; возвращает стак, который реально удалён

```
table = inv:get_location()

```

Возвращает таблицу, описывающую принадлежность инвентаря, подробнее см. get\_inventory(); возвращает `{type = "undefined"}`, если принадлежность не известна.

## Примечания

1. ↑ TODO: судя по всему, имя раздела не должно содержать пробелов, а число слотов не должно быть отрицательным — уточнить.
2. ↑ TODO: изначально ширина раздела равна нулю; судя по всему, само понятие ширины значимо только для таблиц крафта, требуется уточнение.
3. ↑ Метаданные при этом игнорируются, так что для изъятия уникального объекта необходимо создать копию, переписать в неё метаданные, а после удалить оригинал.
4. ↑ TODO: вероятно, заменить ссылкой на основную статью по теме.