> For the complete documentation index, see [llms.txt](https://docs.quickclient.cc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.quickclient.cc/game/containers.md).

# Контейнеры и экраны

Чтение и клики в открытом контейнере и проверка текущего экрана.

`container()` нужен, когда открыт сундук, эндер-сундук, печка или меню сервера: через него можно посмотреть содержимое и кликать по слотам. Собственный инвентарь игрока контейнером не считается, для него `open()` вернёт `false`.

```java
if (container().open() && container().title().contains("Сундук")) {
    int slot = container().find("ender_pearl");
    if (slot >= 0) container().shiftClick(slot);
}
```

Здесь скрипт проверяет, что открыт сундук, ищет в нём жемчуг и перекладывает его в инвентарь шифт-кликом.

Слоты в окне нумеруются так: сначала идут слоты самого контейнера, `0..size()-1`, а за ними в том же окне идёт инвентарь игрока. `slot(index)` инвентарь игрока не показывает, но кликать по нему можно. Поэтому переложить предмет в сундук просто: достаточно шифт-клика по его номеру в окне.

## Чтение

| Метод           | Тип       | Описание                                                                                |
| --------------- | --------- | --------------------------------------------------------------------------------------- |
| `open()`        | `boolean` | открыт контейнер, а не собственный инвентарь                                            |
| `id()`          | `int`     | номер окна, под которым его знает сервер; `0`, если ничего не открыто                   |
| `size()`        | `int`     | сколько слотов у самого контейнера, без инвентаря игрока                                |
| `title()`       | `String`  | заголовок без форматирования                                                            |
| `type()`        | `String`  | тип меню, например `"minecraft:generic_9x6"`                                            |
| `slot(index)`   | `Item`    | предмет в слоте контейнера; для пустого или неверного слота возвращается пустой предмет |
| `find(itemId)`  | `int`     | первый слот с таким предметом или `-1`                                                  |
| `count(itemId)` | `int`     | сколько таких предметов всего                                                           |

## Клики

Клики выполняются не мгновенно, а встают в общую очередь Quick, поэтому не мешают другим модулям. Каждый метод возвращает `true`, если клик добавлен в очередь.

| Метод                 | Тип       | Описание                                                             |
| --------------------- | --------- | -------------------------------------------------------------------- |
| `click(slot, button)` | `boolean` | обычный клик: `0` левой кнопкой, `1` правой                          |
| `shiftClick(slot)`    | `boolean` | переложить стопку из контейнера в инвентарь или обратно              |
| `swap(slot, hotbar)`  | `boolean` | поменять местами со слотом хотбара `0..8` или с `Container.OFFHAND`  |
| `drop(slot)`          | `boolean` | выбросить стопку                                                     |
| `close()`             | `boolean` | закрыть окно после того, как выполнятся клики, уже стоящие в очереди |

Чтобы кликнуть по своему инвентарю внутри окна, используйте номер `size() + индекс`. Проще всего найти предмет через `inventory().find(id)` и прибавить к результату это смещение.

Готовый скрипт целиком есть в примере [Сундук в инвентарь](/examples/chest-taker.md).

## Экраны

Экран это всё, что открыто поверх игры: чат, инвентарь, контейнер, меню Quick и любое другое окно. В событиях ввода экран доступен через `event.screen()`, в остальных местах через `client().screen()`.

| Метод                                            | Тип       | Описание                                                         |
| ------------------------------------------------ | --------- | ---------------------------------------------------------------- |
| `open()`                                         | `boolean` | открыт ли какой-либо экран                                       |
| `kind()`                                         | `int`     | `Screen.NONE`, `CHAT`, `INVENTORY`, `CONTAINER`, `MENU`, `OTHER` |
| `chat()`, `inventory()`, `container()`, `menu()` | `boolean` | быстрые проверки                                                 |
| `type()`                                         | `String`  | короткое имя класса, например `"ChatScreen"`                     |
| `title()`                                        | `String`  | заголовок без форматирования                                     |
| `is(name)`                                       | `boolean` | есть ли строка в имени класса, без учёта регистра                |

При открытии и закрытии экрана приходит событие `ScreenEvent`, подписка на него описана на странице [Подписка на события](/events/basics.md). Чтобы узнать, печатает ли игрок сейчас в чат или в текстовое поле, используйте `keys().inputBlocked()`.


---

# 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, and the optional `goal` query parameter:

```
GET https://docs.quickclient.cc/game/containers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
