> For the complete documentation index, see [llms.txt](https://abyssblock.gitbook.io/abyssblock-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://abyssblock.gitbook.io/abyssblock-wiki/contents/player-world/world-command.md).

# 월드 명령어

## 월드 명령어

**월드 명령어**는 플레이어 월드 안에서 발사기를 이용해 장치를 만드는 기능입니다. 명령어를 적은 책을 발사기에 넣고 레드스톤 신호를 주면, 책에 적어 둔 명령어가 순서대로 실행됩니다.

월드의 소유자와 구성원이 사용할 수 있습니다.

## 📕 명령어 책 작성

책의 **첫 줄에 `#worldcmd`** 를 적고, 그 아래에 명령어를 한 줄에 하나씩 적습니다. 첫 줄이 `#worldcmd`가 아닌 책은 평범한 책으로 취급됩니다.

```
#worldcmd
// 주석은 이렇게 답니다
title @a[distance=..8] title "문이 열렸다"
playsound block.piston.extend @a[distance=..8]
```

* `//`로 시작하는 줄과 빈 줄은 건너뜁니다.
* 공백이 들어간 글은 따옴표로 묶습니다. `"`와 `'` 둘 다 쓸 수 있고, `\`로 따옴표 자체를 적을 수 있습니다.

작성한 책을 발사기에 넣고 레드스톤 신호를 주면 실행됩니다. 신호가 꺼졌다 켜지는 순간에만 발동하므로, 반복 실행하려면 신호를 끊었다 다시 주어야 합니다.

## 🎯 대상과 좌표

명령어의 대상은 지정자로 지정합니다.

| 지정자  | 대상            |
| ---- | ------------- |
| `@p` | 가장 가까운 플레이어   |
| `@a` | 월드 안의 모든 플레이어 |
| `@r` | 무작위 플레이어 한 명  |

지정자 뒤에 `[distance=..8]`처럼 거리 조건을 붙일 수 있습니다. 범위 표기는 마인크래프트와 같습니다.

| 표기     | 의미            |
| ------ | ------------- |
| `5`    | 정확히 5블록       |
| `3..`  | 3블록 이상        |
| `..8`  | 8블록 이하        |
| `3..8` | 3블록 이상 8블록 이하 |

좌표의 `~`는 **발사기를 기준으로 한 상대 좌표**입니다. `~ ~5 ~`는 발사기보다 5블록 위를 뜻합니다.

{% hint style="info" %}
엔티티 지정자 `@e`, 자기 자신 `@s`, 바라보는 방향 좌표 `^`는 사용할 수 없습니다.
{% endhint %}

## 📜 명령어 목록

### tp

```
tp <대상> <x> <y> <z>
tp <대상> <목적지>
```

대상을 좌표나 다른 플레이어에게로 옮깁니다. 좌표로 이동하면 보던 방향을 유지하고, 플레이어에게 이동하면 그 사람이 보는 방향을 따라갑니다.

목적지에는 플레이어 한 명을 가리키는 지정자(`@p`, `@r`)만 쓸 수 있습니다. 목적지는 월드 경계와 높이 한계 안으로 잘립니다.

### setvelocity

```
setvelocity <대상> <x> <y> <z>
```

대상을 그 방향으로 밀어냅니다. 값은 틱당 블록 수이며 축마다 -3.9 \~ 3.9까지 지정할 수 있습니다. `0 1 0`이면 위로 가볍게 뜹니다.

이 명령어로 떠 있는 동안에는 낙하 피해를 받지 않습니다.

### playsound / stopsound

```
playsound <소리> <대상> [<x> <y> <z>] [<볼륨>] [<음높이>]
stopsound <대상> [<소리>]
```

대상에게 소리를 들려주거나 멈춥니다. 좌표를 생략하면 발사기 자리에서 소리가 납니다. 볼륨은 0\~10(1을 넘으면 소리가 커지는 것이 아니라 들리는 거리가 늘어납니다), 음높이는 0\~2이며 둘 다 기본값은 1입니다.

`stopsound`에서 소리를 생략하면 그 장치가 낼 수 있는 소리를 전부 멈춥니다.

{% hint style="info" %}
마인크래프트 기본 소리만 사용할 수 있습니다. 서버가 추가한 소리와 음악(`music.*`, `music_disc.*`)은 사용할 수 없습니다.
{% endhint %}

### particle

```
particle <이름> [<x> <y> <z>] [<dx> <dy> <dz> <속도> <개수>]
```

파티클을 뿌립니다. 퍼지는 정도는 축마다 0\~32, 속도는 0\~10, 개수는 0\~200까지 지정할 수 있습니다.

{% hint style="info" %}
`block`, `item`, `dust`처럼 추가 정보가 필요한 파티클은 사용할 수 없습니다.
{% endhint %}

### title

```
title <대상> <항목> [...]
```

화면에 글을 띄웁니다.

| 항목          | 인자                    | 설명                              |
| ----------- | --------------------- | ------------------------------- |
| `title`     | `<글>`                 | 큰 제목을 띄웁니다. 부제와 표시 시간이 함께 적용됩니다 |
| `subtitle`  | `<글>`                 | 부제를 정해 둡니다. 바로 뜨지는 않습니다         |
| `actionbar` | `<글>`                 | 손 위쪽 줄에 띄웁니다                    |
| `times`     | `<페이드인> <유지> <페이드아웃>` | 틱 단위. 페이드 0\~100, 유지 0\~200     |
| `clear`     |                       | 띄운 것을 내립니다                      |
| `reset`     |                       | 내리고 부제와 표시 시간을 기본값으로 되돌립니다      |

글에 공백이 들어가면 따옴표로 묶습니다. `title @a title "문이 열렸다"`

## 🧪 명령어 시험하기

`/worldcmd <명령어>`로 책에 옮겨 적기 전에 한 줄씩 실행해 볼 수 있습니다. 문법은 책과 같고, 기준점만 발사기가 아니라 명령어를 실행한 플레이어입니다.

명령어 이름과 인자는 입력하는 중에 자동 완성으로 안내됩니다.

## ⚙️ 월드 규칙으로 끄기

`/worldrule`로 월드의 규칙을 확인하고 변경할 수 있습니다. 값을 바꾸는 것은 월드 주인만 할 수 있고, 확인은 구성원도 할 수 있습니다.

| 규칙                    | 설명                        |
| --------------------- | ------------------------- |
| `worldCommandEnabled` | 월드 명령어 사용 여부. 기본값은 `true` |

```
/worldrule worldCommandEnabled false
```

끄면 `/worldcmd`뿐 아니라 이미 놓아 둔 발사기 장치도 함께 멈춥니다.

## 📏 제한

한 사람이 한 틱에 받는 양에 상한이 있습니다. 상한을 넘으면 넘은 만큼만 표현되지 않을 뿐 장치가 멈추지는 않습니다.

| 대상    | 상한      |
| ----- | ------- |
| 소리    | 틱당 4회   |
| 파티클   | 틱당 512개 |
| 화면 표시 | 틱당 4회   |

표시 시간에도 상한이 있어 화면을 계속 가릴 수 없으며, 게임이 띄우는 안내가 있으면 그쪽이 먼저 표시됩니다.
