> For the complete documentation index, see [llms.txt](https://docs.nursultan.fun/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nursultan.fun/scripting-api-ru/sobytiya/spisok-sobytii.md).

# Список событий

Отменяемые события помечены в колонке «Отмена». Как подписываться и что значит приоритет — в Подписке.

## Тики

| Событие              | Когда                             | Отмена |
| -------------------- | --------------------------------- | ------ |
| `ClientTickEvent`    | каждый тик клиента, даже без мира |        |
| `PrePlayerTickEvent` | перед тиком игрока                |        |
| `PlayerTickEvent`    | после тика игрока                 |        |

`ClientTickEvent` идёт всегда, поэтому в нём почти всегда нужна проверка `if (!inGame) return@on`. `PrePlayerTickEvent` удобен, когда надо успеть что-то сделать до того, как игрок посчитает своё движение за этот тик.

## Бой

| Событие              | Когда                                                                    | Отмена |
| -------------------- | ------------------------------------------------------------------------ | ------ |
| `AttackEvent`        | ты бьёшь сущность, `target()`                                            | да     |
| `AttackedEvent`      | удар прошёл, `target()`                                                  |        |
| `UseItemEvent`       | начинается использование предмета, `hand()`                              | да     |
| `StopUsingItemEvent` | клиент собирается отпустить ПКМ — отмени, чтобы доесть/допить/дозарядить | да     |
| `JumpEvent`          | игрок прыгнул                                                            |        |
| `SlowdownEvent`      | игра замедляет движение (еда, щит, лук); `multiplier()` можно переписать |        |

## Ввод

| Событие            | Когда                                              | Отмена |
| ------------------ | -------------------------------------------------- | ------ |
| `KeyEvent`         | нажата или отпущена клавиша или кнопка мыши        | да     |
| `CharEvent`        | введён символ                                      | да     |
| `MouseScrollEvent` | колесо мыши                                        | да     |
| `MoveInputEvent`   | собран ввод движения за тик, поля можно переписать | да     |
| `LookInputEvent`   | движение мыши, `deltaX`/`deltaY` можно переписать  | да     |

`KeyEvent` несёт `key()`, `mods()`, `action()`, плюс короткие `pressed()`, `released()`, `mouse()` и `matches(Key.G)`.

`MoveInputEvent` — это то, что игра собирается сделать: `forward()`, `backward()`, `left()`, `right()`, `jump()`, `sneak()`, `sprint()`. Каждое поле можно и прочитать, и записать:

```kotlin
on<MoveInputEvent>(priority = Priority.LAST) {
    it.sprint(true)
    it.jump(true)
}
```

## Мир и сущности

| Событие             | Когда                                                  | Отмена |
| ------------------- | ------------------------------------------------------ | ------ |
| `EntitySpawnEvent`  | сущность появилась, `entity()`                         |        |
| `EntityRemoveEvent` | сущность пропала, `entity()`                           |        |
| `WorldLoadEvent`    | загрузился мир — заходишь на сервер, меняешь измерение |        |
| `ScreenCloseEvent`  | закрылся экран (инвентарь, сундук, меню)               |        |

`WorldLoadEvent` — хорошее место, чтобы сбросить всё, что привязано к конкретному миру.

## Пакеты

| Событие              | Когда                                         | Отмена |
| -------------------- | --------------------------------------------- | ------ |
| `PacketReceiveEvent` | пришёл пакет от сервера, `packet()`           | да     |
| `PacketSendEvent`    | клиент собирается отправить пакет, `packet()` | да     |

Вызываются **на сетевом потоке**. Подробности и список пакетов — Пакеты.

## Отрисовка

| Событие         | Когда                 | Отмена |
| --------------- | --------------------- | ------ |
| `Render2DEvent` | каждый кадр, слой HUD |        |
| `Render3DEvent` | каждый кадр, в мире   |        |

`Render2DEvent` несёт `render()`, размер экрана `width()` × `height()` и `tickDelta()`. `Render3DEvent` несёт `render()`, `tickDelta()` и позицию камеры `camera()`. Смотри Рендер 2D и Рендер 3D.

## Модули

| Событие             | Когда                                             | Отмена |
| ------------------- | ------------------------------------------------- | ------ |
| `ModuleToggleEvent` | включили или выключили модуль клиента либо скрипт |        |

Несёт `name()`, `enabled()` и `fromScript()` — последнее показывает, это был скрипт или встроенный модуль.

## Что такое tickDelta

Игра думает 20 раз в секунду, а рисует гораздо чаще. `tickDelta` — это доля от 0 до 1, показывающая, насколько далеко кадр ушёл от последнего тика. Нужна, чтобы движение на экране было плавным, а не дёргалось 20 раз в секунду.
