> 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/start/lifecycle.md).

# Как устроен скрипт

Колбэки, состояния скрипта и методы, доступные из класса.

Загруженный скрипт ещё не обязательно работает. Конструктор выполняется при загрузке jar, и в нём создаются настройки. Колбэки, подписки, команды и хоткеи работают, только пока скрипт включён. При выключении Quick сам снимает подписки, задачи и команды, а при следующем включении снова вызывает `activate()`.

```java
public class Pinger extends Script {

    @Override
    public void activate() {
        on("tick", event -> tick());
        command("ping").runs(context -> context.reply(client().ping() + " ms")).register();
    }

    @Override
    public void deactivate() {
        log().info("скрипт выключен");
    }

    private void tick() {
        if (client().ping() > 300) notifications().warning("пинг высокий: " + client().ping(), 1500L);
    }
}
```

## Как это работает

* В `activate()` скрипт подписывается на тик и регистрирует команду `ping`. После выключения скрипта пропадут и подписка, и команда.
* Каждый тик скрипт проверяет пинг и показывает уведомление, если он выше 300.
* `deactivate()` только пишет строку в консоль. Снимать подписки вручную не нужно.

## Колбэки

| Метод                  | Когда вызывается                                                                             |
| ---------------------- | -------------------------------------------------------------------------------------------- |
| конструктор            | один раз при загрузке jar; здесь создаются настройки, шрифты, шейдеры, меши                  |
| `activate()`           | при включении; здесь сбрасывается состояние и оформляются подписки через `on(…)` и `hook(…)` |
| `deactivate()`         | при выключении, перед перезагрузкой и при выходе; снимать подписки не нужно                  |
| `onTick()`             | игровой тик, 20 раз в секунду, пока скрипт включён                                           |
| `onRender2D(Render2D)` | каждый кадр поверх игры, см. [2D-рендер](/ui/render-2d.md)                                   |
| `onRender3D(Render3D)` | каждый кадр, пока игрок в мире, см. [3D-рендер](/ui/render-3d.md)                            |

Все колбэки вызываются в главном потоке игры. Долгие операции в них вызывают подвисания. Тяжёлые вычисления лучше выполнить заранее и сохранить результат в поле.

Если в колбэке возникло исключение, игра не падает. Скрипт выключается, а в консоли появляется строка «`<имя>` отключён: …». До следующей перезагрузки он помечен как упавший.

## Доступные методы

Все методы из таблицы ниже это защищённые методы `Script`, их можно вызывать просто по имени. Вне мира методы, связанные с миром, возвращают нули и пустые строки, а не бросают исключение.

| Метод             | Тип             | Что это                                                                                      |
| ----------------- | --------------- | -------------------------------------------------------------------------------------------- |
| `player()`        | `Player`        | собственный игрок, см. [Свой игрок](/game/player.md)                                         |
| `inventory()`     | `Inventory`     | инвентарь, см. [Инвентарь и предметы](/game/inventory.md)                                    |
| `world()`         | `World`         | блоки, погода, время, см. [Мир и блоки](/game/world.md)                                      |
| `entities()`      | `Entities`      | сущности, цель, прицел, см. [Сущности](/game/entities.md)                                    |
| `container()`     | `Container`     | открытый сундук или меню, см. [Контейнеры и экраны](/game/containers.md)                     |
| `tab()`           | `Tab`           | список игроков и команды, см. [Сервер, скорборд, таб](/game/server.md)                       |
| `scoreboard()`    | `Scoreboard`    | табло сбоку, там же                                                                          |
| `client()`        | `ClientInfo`    | fps, пинг, tps, ник, сервер, эффекты, экран, там же и на странице [Аккаунт](/extras/user.md) |
| `party()`         | `Party`         | группа в Quick, см. [Группа](/extras/party.md)                                               |
| `control()`       | `Control`       | бег, присед, прыжок, скорость, камера, см. [Движение](/actions/control.md)                   |
| `keys()`          | `Keys`          | какие клавиши сейчас зажаты, см. [Клавиши и бинды](/actions/keys.md)                         |
| `interaction()`   | `Interaction`   | удары, использование предметов, блоки, см. [Взаимодействие](/actions/interaction.md)         |
| `slots()`         | `Slots`         | слот в руке, броня, см. [Слоты и броня](/actions/slots.md)                                   |
| `rotations()`     | `Rotations`     | повороты головы, см. [Повороты](/actions/rotations.md)                                       |
| `prediction()`    | `Prediction`    | куда полетят игрок и снаряды, см. [Предсказание](/actions/prediction.md)                     |
| `packets()`       | `Packets`       | сборка и отправка пакетов, см. [Пакеты](/actions/packets.md)                                 |
| `fonts()`         | `FontRegistry`  | шрифты, см. [Оформленный текст](/ui/text.md)                                                 |
| `gpu()`           | `Gpu`           | свои меши, см. [Своя геометрия](/ui/gpu.md)                                                  |
| `shaders()`       | `Shaders`       | свои GLSL-шейдеры, см. [Шейдеры](/ui/shaders.md)                                             |
| `chat()`          | `Chat`          | сообщение себе в чат или отправка на сервер, см. [Сообщения](/ui/messages.md)                |
| `chat(String)`    | `void`          | быстрое сообщение себе в чат                                                                 |
| `log()`           | `Log`           | консоль скриптов, там же                                                                     |
| `notifications()` | `Notifications` | всплывающие уведомления, там же                                                              |
| `clipboard()`     | `Clipboard`     | буфер обмена, там же                                                                         |
| `sounds()`        | `Sounds`        | звуки, которые слышит только этот игрок, см. [Звуки и частицы](/extras/effects.md)           |
| `particles()`     | `Particles`     | частицы, которые видит только этот игрок, там же                                             |
| `waypoints()`     | `Waypoints`     | метки на карте, см. [Путевые точки](/extras/waypoints.md)                                    |
| `storage()`       | `Storage`       | конфиг скрипта, см. [Сохранение данных](/settings/storage.md)                                |
| `storage(name)`   | `Storage`       | конфиг с заданным именем                                                                     |
| `tasks()`         | `Tasks`         | таймеры, см. [Таймеры и задачи](/extras/tasks.md)                                            |
| `assets()`        | `Assets`        | файлы из `resources/`, см. [Папка ресурсов](/extras/assets.md)                               |
| `command(name)`   | `Command`       | своя команда, см. [Свои команды](/extras/commands.md)                                        |
| `hook(name, h)`   | `void`          | ответ на вызов из миксина, см. [Миксины и хуки](/extras/mixins.md)                           |
| `modules()`       | `ModuleInfo[]`  | модули Quick на момент вызова, см. [Модули клиента](/extras/modules.md)                      |
| `settings()`      | `List<Setting>` | все настройки скрипта в порядке создания                                                     |
| `eventNames()`    | `String[]`      | какие события знает текущая сборка Quick, см. [Список событий](/events/reference.md)         |
| `target()`        | `Object`        | устарел, используйте `entities().target()`                                                   |

## Включён, выключен, упал

* **Выключен:** код не выполняется, но настройки видны и их можно менять.
* **Включён:** работают колбэки, подписки, команды и хоткеи.
* **Упал:** в колбэке возникло исключение. Скрипт выключен до следующей перезагрузки, его строка в списке красная.
* **Нужен перезапуск:** миксины в jar отличаются от тех, что загрузились при запуске игры. Сам скрипт работает, но миксины пока старые.

Состояние сохраняется после перезагрузки скриптов и после перезапуска игры.

## Версия API

`Script.API_VERSION` показывает версию SDK, с которой собран скрипт. Если она не совпадает с версией в Quick, смотрите страницу [Версии API](/extras/api-versions.md).


---

# 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/start/lifecycle.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.
