Введение в команды

**Генерация мира...**

Данная статья в процессе работы, это значит, что она недоработаны и находится в процессе создания. Статью обслуживает BendySonic

Команды консоли - текст, который можно ввести в чат или командный блок для выполнения определенных вещей: установки блока, заполнения области блоками, спавна блока, выдачи себе предмета.

## Старт

Для ввода команды можно использовать чат. Каждая команда начинается с косой черты "/". После чего следует название команды, к примеру существует команда "say".

```
/say Hello World
```

Команда "say" может вывести в чат любое сообщение, само сообщение пишется после команды, это называется *аргументом команды*. У команды могут быть самые разнообразные аргументы, от 1 до 5 и более.

Мало что можно сделать только с одной командой. Если вы хотите побольше узнать о какой-либо команде, то используйте команду "help". Её аргумент - это название команды, о которой вы хотите узнать. К примеру введем в чат следующее:

```
/help difficulty
```

Нам вывелось в чат следующее сообщение.

```
/difficulty <difficulty: Difficulty>
/difficulty <difficulty: int>
```

Это синтаксис команды. Благодаря синтаксису можно легко понять то, что нужно вписывать в аргументы команды, к примеру команда "difficulty" изменяет сложность игры. Аргументов всего один, но можно написать его по-разному: в виде названия сложности(easy, normal, hard) или в виде числа сложности.

## Типы аргументов

Всего в игре два типа аргументов, о которых мы сейчас поговорим. Попробуем вписать в команду "help" какую-нибудь команду, например "gamemode". Это команда, изменяющая режим игры определенным игрокам(Творческий, выживание, приключение)

```
/gamemode <gameMode: GameMode> [player: target]
/gamemode <gameMode: int> [player: target]
```

В отличие от прошлого случая, где аргументы выделялись в виде <...>, Здесь некоторые аргументы выделены как [...]. Почему? Это обязательные и необязательные аргументы. Обязательно ли писать этот аргумент при написании команды, соответственно. Аргументы, который в синтаксисе указываются как <...> обязательно писать в команду, а [...] необязательно.

К примеру первый компонент команды "gamemode"(Это команда изменяет режим игры, если вы помните) отвечает за название или номер режима игры. К примеру: creative(Творческий), survival(Выживание), adventure(Приключение). Или же можно указать первую букву режима или его номер. Это **Обязательный** аргумент.

Второй аргумент указывает какому именно игроку изменить режим игры. К примеру:

```
/gamemode survival Steve
```

Здесь команда "gamemode" изменит режим игры игрока с именем Steve на "survival"(Выживание). Этот компонент **Необязательный**, так как если вы не напишете его, то команда выполнится.(Выполнится на того игрока, который написал команду.

## Буквальные аргументы

Кроме обязательных и необязательных аргументов команды есть и **буквальные** аргументы. Такие аргументы не могут быть заменены чем-либо и всегда имеют одно или несколько зафиксированных названий.

```
/time set <amount: int>
/time set <time: TimeSpec>
```

Первый аргумент в этих командах - буквальный, это "set". Сама команда "time" помогает установить время в мире, а "set" является аргументом. Буквальные аргументы могут нести за собой определенную группу компонентов. Это значит, что иногда, написав один буквальный компонент, вы сможете написать только определенные к нему аргументы. Давайте объясним это на практике.

```
/scoreboard objectives add <name: string> <type: string> <display_name:string>

/scoreboard players add <player: target> <name: string> <count: int>
```

Здесь представлена команда "scoreboard". Мы не будем вдаваться в её подробности. Самое главное это первый аргумент: "objectives" и "players". Таким образом, если вы после команды напишите "objectives", то вы не сможете написать следующие аргументы, как в примере ниже, а если напишите "players", то аргументы, следующие сверху после первого, не будут доступны. Можно сказать, что первый аргумент тянет остальные за собой. Это встречается не часто, но об этом стоит знать.

Иногда буквальный аргумент может иметь не только один вариант написания, но и 2-3.

```
/weather <clear|thunder|rain> [duration: int]

/weather rain 1000
/weather clear 6000
```

Команда "weather" отвечает за смену погоды. Сверху представлен синтаксис команды. Первый аргумент является буквальным, но имеет сразу три вариации. Можно вписать тип, на которую хочет сменить игрок погоду: "clear"(ясно), "thunder"(гром), "rain"(дождь).

Последний аргумент необязательный и обозначает продолжительность установленной погоды в тиках.(20 тиков = 1 секунда)

## Базовые селекторы

Вспомним прошлый пример команды "gamemode" для изменения режима игры.

```
/gamemode <gameMode: GameMode> [player: target]
/gamemode <gameMode: int> [player: target]
```

Последний аргумент - необязательный и здесь должно быть имя игрока, которому нужно изменить режим игры. Но иногда, когда мы не можем знать имя игрока, который взывает команду(например в командном блоке), мы можем использовать не имя игрока, а селектор или цель команды. Цель команды - игрок или диапазон игроков, на которых действует команда, к примеру команда может действовать на ближайшего игрока или игроков, у которых есть какой-либо закреплённый за ними тег.

**Базовые селекторы**
 @e | Все сущности - команда нацелена на всех сущностей и мобов (в том числе на игроков) в мире

Таким образом в команде "gamemode" вместо имени игрока мы можем написать селектор. К примеру:

```
/gamemode survival @a
```

Таким образом у всех(@a) игроков режим игры изменится на выживание. Однако этого мало. Возможно мы хотим совершить операцию не над всеми или ближайшим игроком, а над определенной группой игроков.

## Дополнительные селекторы

Кроме написания базового селектора, мы можем добавить к нему и **дополнительный**.

```
@a[x=25,y=87,z=25]
```

Дополнительные селекторы пишутся в квадратных скобках [...] и перечисляются там через запятую. В примере сверху мы использовали сразу три селектора: **x**, **y**, **z**. Таким образом базовым селектором мы выбираем как цель всех игроков, но затем с помощью дополнительного селектора ограничеваем круг целей. Теперь режим выживания получат не все игроки, а только игроки на координатах 25, 87, 25.

```
@a[x=25,y=87,z=25,r=2]
```

В этом примере мы добавили ещё один дополнительный селектор: **r**, который определяет радиус. Тоесть, теперь целью команды стали игроки на координатах 25, 87, 25 в радиусе 2 блоков от этой координаты.

**Дополнительные селекторы**
```
x, y, z
```

```
r, rm
```

```
dx, dy, dz
```

```
c
```

```
type
```

```
m
```

```
tag
```