# Конфигурация

## config.json

### hitStep

Шаг проверки попаданий в блоки и мобов, чем меньше значение этого параметра, тем точнее будет подсчет попаданий, но при этом сильно низкое значение может отрицательно сказаться на производительности сервера.

**Значение по умолчанию: 0.1**

### traceStep

У вас есть возможность включить отображение следа от выстрела с помощью партиклов, этот параметр отвечает за растояние между партиклами следа. Рекомендуется, чтобы значение traceStep при делении на значение hitStep получалось целое число, иначе расстояние между частицами будет непредсказуемым.

Для того чтобы отключить отображение следа от выстрела установите значение 0.

**Значение по умолчанию: 1**

### traceParticle

Партикл, который будет использоваться в качестве партикла для следа от выстрела.

**Значение по умолчанию: FLAME**

### blockEdge

<figure><img src="/files/06R9zBp5XdQqYQmTP2yS" alt=""><figcaption></figcaption></figure>

Длина отрезока области (Оранжевая линия) от всех боковых граней блока до условной границей с центром (Красный квадрат). Этот параметр может помоь вам сделать двухступенченчетую систему простреливания блока c разным останавливающим фактором. (Для зеленого луча будет действовать останавливающий фактор границы(edge), а для синего останавливающий фактор центра(center))

**Значение по умолчанию: 0.3**

### hitEntityRadius

Радиус поражения сущностей лучем от оружия во все стороны

**Значение по умолчанию: 0.3**

### recoilType

Тип отдачи оружия. В BedrockGunEngine на данный момент есть всего 2 типа отдачи: **CAMERA** и **VECTOR**.

**CAMERA** — Отдача изменяет направление камеры

**VECTOR** — Отдача изменяет направление векторов выстрела

**Значение по умолчанию: CAMERA**

### defaultBlockPenetrability

Значение по умолчанию для останавливающего фактора для обоих ступений сопративления.

**Значение по умолчанию для edge: 1**

**Значение по умолчанию для center: 2**

### ignoreBlocks

Список блоков у которых нет останавливающего фактора вовсе. По умолчанию в нем находятся: воздух, трава, лианы, все виды листвы с деревьев верхнего мира.

### Пример

```json
{
    "hitStep": 0.1,
    "traceStep": 1,
    "traceParticle": "FLAME",
    "blockEdge": 0.3,
    "hitEntityRadius": 0.3,
    "recoilType": "VECTOR",
    "defaultBlockPenetrability": {
        "edge": 1,
        "center": 2
    },
    "ignoreBlocks": [
        "AIR",
        "TALL_GRASS",
        "SHORT_GRASS",
        "VINE",
        "ACACIA_LEAVES",
        "AZALEA_LEAVES",
        "BIRCH_LEAVES",
        "JUNGLE_LEAVES",
        "OAK_LEAVES",
        "DARK_OAK_LEAVES",
        "FLOWERING_AZALEA_LEAVES",
        "MANGROVE_LEAVES",
        "SPRUCE_LEAVES",
        "CHERRY_LEAVES",
        "COBWEB"
    ]
}
```

## Конфиг для оружия

Для того, чтобы сделать свое оружие в BedrockGunEngine нужно создать конфиг в папке guns, которая автоматически создается при запуске в папке плагина.

{% hint style="warning" %}
Название файла без расширения — это системное название этого оружия
{% endhint %}

### displayName

Отображаемое в инвенторе имя для оружия. Для форматирования используется [MiniMessage](https://docs.papermc.io/adventure/minimessage).

### material и customModelData

Эти 2 параметра нужны для того чтобы смогли установить свою модельку для оружия. Вы можете сделать это с помощью любых стороних плагинов, работающих с ресурспаком сервера, например с помощью Oraxen, ItemsAdder или моего плагина ResourceDispatcher.

{% hint style="success" %}
Если вы не хотите устанавливать кастомный customModelData, то в конфиге установите значение 0 или вовсе уберите параметр.
{% endhint %}

{% hint style="danger" %}
Если вы назначите на один материал два оружия, то будьте готовы к тому что при выстреле из одного кулдаун наложиться на все оружия обоих типов оружия, это обусловлено ванильными механиками майнкрафта.
{% endhint %}

### reloadDuration

Длительность перезарядки оружия в тиках.

### magazineSize

Количество патрон в магазине оружия.

### consumption

Расход патрон в магазине за один выстрел.

{% hint style="warning" %}
На количество лучей это никак не влияет
{% endhint %}

### shootCooldown

Кулдаун на оружие после каждого выстрела в тиках.

### penetrability

Необходимый суммарный останавливающий фактор для непробития блока этим оружием

### verticalRecoil

Максимальное вертикальное отклонение в результате отдачи в градусах.

### HorizontalRecoil

Максимальное горизонтальное отклонение в результате отдачи в градусах в обе стороны.

### shootMaxDistance

Максимальная дистанция, которую может пролететь луч.

### headshotMultiplier

Множетель урона при попадании в голову.

### inActionMultiplier

Множетель разброса при стрельбе в движении.

### shotType

Тип стрельбы. На данный момент существует 2 типа стрельбы: **STRAIGHT** и **PELLETS**.

**STRAIGHT** — обычная стрельба прямо, подходит для большиства видов огнестрельного оружия.

**PELLETS** — стрельба 30 лучами с максимальным отклонением 15 градусов, подходит для ружий с дробью.

### damage

Я вместо того, чтобы добавлять оружие с постоянным уроном не зависимо от растояния, решил сделать систему, где урон рассчитывается исходя из расстояния от стреляющего, и выглядит это так:

```json
"damage": {
    "<20": 7,
    "default": 4
}
```

В поле damage записывается следующая структура, в ключ условие по дистанции, в значение число урона, которое нанесется, если условие верно, если не одно условие не подходит, то будет использоваться значение из поля default.

{% hint style="success" %}
Если вы хотите установить один постаянный урон, не зависимый от расстояния, то просто укажите только поле default и в нем значение.
{% endhint %}

### sounds

Два параметра, отвеающие за звуки издаваеммые оружием, объединенные в один.

**shot** — звук стрельбы

**reload** — звук перезарядки

{% hint style="warning" %}
Для добавляения своих звуков, также придется использовать сторонний ресурс пак.
{% endhint %}

### Пример полной конфигурации оружия

```json
{
    "displayName": "<yellow>Пистолет",
    "material": "WOODEN_HOE",
    "customModelData": 10,
    "reloadDuration": 60,
    "magazineSize": 10,
    "consumption": 1,
    "shootCooldown": 20,
    "penetrability": 2,
    "verticalRecoil": 1.0,
    "horizontalRecoil": 2.0,
    "shootMaxDistance": 50,
    "headshotMultiplier": 3.0,
    "inActionMultiplier": 1.1,
    "shotType": "STRAIGHT",
    "damage": {
        "<20": 5,
        "default": 3
    },
    "sounds": {
        "shot": "ITEM_GOAT_HORN_SOUND_0",
        "reload": "ITEM_GOAT_HORN_SOUND_3"
    }
}
```

## blocks.json

Это конфиг останавливающего фактора для каждого блока отдельно. Это работает похожим образом в сранении с [defaultBlockPenetrability](#defaultblockpenetrability). Здесь просто нужно в качестве ключа указать материал и внутри фигурных скобок 2 поля: center и edge.

### Пример

```json
{
    "SNOW_BLOCK": {
        "edge": 1,
        "center": 1
    }
}
```


---

# Agent Instructions: 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:

```
GET https://mrbedrockpys-plugins.gitbook.io/mrbedrockpys-plugins-docs/bedrock-gun-engine/konfiguraciya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
