> 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/first-script.md).

# Первый скрипт

Простой скрипт с настройками, его сборка и загрузка в Quick.

В этом уроке мы напишем скрипт, который сам прыгает через заданное число тиков. У него будут настройки, чтобы было видно, как они появляются в меню.

Любой скрипт это класс, который наследует `Script`. Все возможности Quick доступны прямо из него: `player()`, `chat()`, `control()` и другие. Импортировать менеджеры не нужно.

```java
package my;

import hex.script.api.CheckBox;
import hex.script.api.Render2D;
import hex.script.api.Script;
import hex.script.api.Slider;

public class AutoJump extends Script {

    private final CheckBox onlyOnGround = checkBox("Только с земли", true);
    private final Slider every = slider("Каждые N тиков", 10f, 1f, 40f, 1f).postfix("t");
    private int ticks;

    @Override
    public String description() {
        return "Прыгает автоматически";
    }

    @Override
    public void activate() {
        ticks = 0;
    }

    @Override
    public void onTick() {
        if (++ticks < every.intValue()) return;
        ticks = 0;
        if (!onlyOnGround.value() || player().onGround()) {
            control().jump();
        }
    }

    @Override
    public void onRender2D(Render2D render) {
        render.drawClientText("AutoJump: " + ticks, 5f, 5f, 7f, render.themeColor("text"));
    }
}
```

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

* Галка и ползунок объявлены полями класса. Quick сам покажет их в меню и сохранит значения.
* `activate()` вызывается при включении скрипта. Здесь сбрасывается счётчик.
* `onTick()` вызывается 20 раз в секунду, пока скрипт включён.
* `onRender2D` каждый кадр рисует текст в углу экрана.

## Сборка jar

Код кладётся в папку `java/` по пути, который соответствует пакету. Картинки и другие файлы, если они есть, кладутся в `resources/`:

```
AutoJump.jar
  java/my/AutoJump.java
  resources/icon.png
```

Jar это обычный zip-архив с другим расширением. Компилировать ничего не нужно, Quick сам соберёт исходники. Манифест тоже не нужен.

Положите `AutoJump.jar` в папку скриптов. Примерно через секунду он появится на вкладке Скрипты, после чего его можно включить.

В одном jar может лежать сколько угодно классов. Каждый наследник `Script` станет отдельным скриптом в меню.

Как настроить IDE, чтобы jar собирался автоматически, описано на странице [Подготовка](/start/ide.md).

## Если что-то не работает

Ошибки компиляции выводятся в консоль скриптов (кнопка в шапке вкладки Скрипты) и в чат. В сообщении указаны файл, строка и текст ошибки компилятора.

Если ошибка в одном файле, остальные скрипты всё равно загрузятся. В консоли появится строка «не собрано файлов: N, остальные загружены».

Если скрипт упал во время работы, Quick выключит его и запишет причину в консоль. Игра при этом не вылетает.

## Что происходит при загрузке

Порядок, в котором Quick обрабатывает jar:

| Шаг         | Что происходит                                                                            |
| ----------- | ----------------------------------------------------------------------------------------- |
| чтение      | jar читается целиком и сразу закрывается, поэтому его можно перезаписывать в любой момент |
| компиляция  | все `.java` из всех jar компилируются вместе                                              |
| проверка    | Quick проверяет код на ограничения песочницы, см. [Песочница и лимиты](/extras/limits.md) |
| ресурсы     | файлы из `resources/` становятся доступны игре                                            |
| миксины     | если `mixin/` изменился с момента запуска игры, появится «Нужен перезапуск»               |
| регистрация | скрипт появляется в меню, его настройки восстанавливаются                                 |

## Имя и описание

| Метод           | Тип      | Описание                                                         |
| --------------- | -------- | ---------------------------------------------------------------- |
| `name()`        | `String` | имя в меню; если метод не переопределён, используется имя класса |
| `description()` | `String` | описание, которое видно в меню и в `.script list`                |

## Перезагрузка на лету

Quick следит за папкой скриптов. Когда jar сохранён и файл перестал меняться, все скрипты перезагружаются. Настройки сохраняются, включённые скрипты остаются включёнными.

Перезагрузить скрипты вручную можно командой `.script reload` или пунктом «Перезагрузить» в меню «···».

Миксины так не перезагружаются, после их изменения нужен перезапуск игры. Подробнее на странице [Миксины и хуки](/extras/mixins.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/first-script.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.
