Commands.yml
commands.yml은 CraftBukkit 서버에서 커스텀 명령어와 커맨드 블록 오버라이드를 정의하는 설정 파일이다.
커맨드 블록 오버라이드 시스템은 특정 커맨드 블록이 Mojang이 제공하는 명령어를 쓰도록 강제하고, 별칭(alias) 시스템은 관리자가 커스텀 명령어를 정의하거나 특정 버전의 명령어를 강제로 쓰게 한다.
명령어 오버라이드 시스템
섹션 제목: “명령어 오버라이드 시스템”Bukkit은 기본적으로 명령어 오버라이드 시스템을 제공한다.
우선순위
섹션 제목: “우선순위”Aliases(커스텀 명령어) > Plugin Commands(플러그인 명령어) > Bukkit Commands(Bukkit 명령어) > Mojang Commands(Mojang 명령어).
Aliases(커스텀 명령어): 우선순위가 가장 높아서 모든 명령어를 덮어쓴다. 어떤 명령어와 일치하는 별칭이 있으면 서버는 그 별칭에 정의된 명령어를 먼저 실행한다.
Plugin Commands(플러그인 명령어): 일치하는 명령어가 없으면 서버는 일치하는 플러그인 명령어를 찾아 사용한다.
Bukkit Commands(Bukkit 명령어): 일치하는 플러그인 명령어가 없으면 Bukkit이 제공하는 내장 명령어를 사용한다.
Mojang Commands(Mojang 명령어): 일치하는 Bukkit 명령어도 없으면 마지막 대안으로 Mojang이 제공하는 내장 명령어를 사용한다.
각 단계마다 권한이 있다. 플러그인 명령어를 제외하면, Bukkit 명령어의 권한은 bukkit.command.*, Mojang 명령어의 권한은 minecraft.command.*이다.
Commands.yml 내용
섹션 제목: “Commands.yml 내용”command-block-overrides: []
aliases: icanhasbukkit: - "version $1-"command-block-overrides 항목
섹션 제목: “command-block-overrides 항목”현재 커맨드 블록 오버라이드가 설정되어 있지 않다는 뜻이다. 이 항목은 커맨드 블록 오버라이드 기능을 제어한다. Bukkit은 예전에 Minecraft 원래 명령어와 다른 버전의 명령어를 제공한 적이 있다. 이 설정을 쓰면 커맨드 블록에서만 Mojang이 제공하는 버전의 명령어(바닐라 명령어)를 쓰도록 강제할 수 있다. 커맨드 블록 밖에서 쓰는 명령어는 평소대로 Bukkit(또는 플러그인) 버전을 쓴다.
명령어 오버라이드:
커맨드 블록이 플러그인이 덮어쓴 명령어 대신 Mojang 명령어(바닐라 명령어)를 실행하게 하려면, 그 명령어를 command-block-overrides에 추가하면 된다. give 명령어를 예로 들면 다음과 같다.
command-block-overrides: - "give"이러면 EssentialsX 플러그인이 로드되어 있어도 커맨드 블록에서는 essentials:give가 아니라 minecraft:give가 실행된다.
커맨드 블록에서 여러 Mojang 명령어(바닐라 명령어)를 플러그인 등에 덮어쓰이지 않게 하고 싶다면, 다음처럼 설정해 커맨드 블록의 모든 명령어가 바닐라 명령어를 쓰게 할 수 있다.
command-block-overrides: - "*"aliases 항목
섹션 제목: “aliases 항목”위 설정에서는 icanhasbukkit이라는 커스텀 명령어를 정의했다.
대응하는 명령어는 “version $1-”이다. 즉 플레이어가 icanhasbukkit을 입력하면 실제로는 version $1- 명령어가 실행된다.
커스텀 명령어:
이 항목에서는 서버 명령어에 대한 커스텀 명령어를 정의할 수 있다. 본질적으로 커스텀 명령어는 여러 기능을 한 번에 실행하는 명령어를 만들 수 있게 해 준다. 플레이어가 기억하기 쉬운 명령어를 만들어 줄 수 있는 강력한 도구다.
| 수식자 | 설명 | 예시 |
|---|---|---|
$<argument number> | 인자가 여러 개일 때, 주어진 번호의 인자 값을 가져온다. 예를 들어 say $1 $2 $3에서 $1은 첫 번째, $2는 두 번째, $3은 세 번째 인자다. say word1 word2 word3을 입력하면 $1은 word1, $2는 word2, $3은 word3으로 바뀐다. | say $1 $2 $3 |
$<argument number>- | 지정한 위치부터 그 뒤의 모든 인자 값을 가져온다. 예를 들어 say $1-에서 say phrase1 phrase2 phrase3을 입력하면 $1-은 phrase1 phrase2 phrase3 전체가 된다. | say $1- |
$$<argument number> | 명령어 설계에서 이 형태는 특정 위치 인자의 필요성을 강조한다. 예를 들어 say $1에서 명령어를 실행할 때 첫 번째 위치에 인자 값을 주지 않으면 명령어가 실행되지 않는다. say something처럼 첫 번째 위치에 대응하는 입력값이 있을 때만 $1이 something으로 바뀌어 명령어가 정상적으로 실행된다. | say $$1 |
$$<argument number>- | 앞의 설명과 비슷하지만 인자 범위에 적용된다. 예를 들어 say $1-에서 say onlyword를 입력하면, 인자가 하나뿐이고 그 인자가 첫 번째 위치에 해당하지만 여기서는 시작 인자에 값이 있고 그 뒤에도 다른 인자가 있어야 조건을 만족하므로 명령어가 실행되지 않는다. 반면 say start second third를 입력하면 첫 번째 인자 start부터 뒤의 인자까지 모두 값이 있어 조건을 만족하고, 이때 $1-은 start second third라는 인자 순서 전체가 된다. | say $$1- |
| \ | 일부 명령어 문법에서는 특정 문자에 특별한 기능이 부여되어 있다. 예를 들어 $는 보통 인자 참조에 쓰인다. 이 문자를 특수 기능 문자가 아니라 일반 문자로 쓰고 싶을 때 \로 이스케이프하면 된다. 예를 들어 say $100에서 $는 ““이 인자 참조라는 특별한 의미를 잃고 그냥 문자로 나타나게 한다. | say \$100 |
| 상황 | 설명 | 명령어 사용법 | 설정 예시 |
|---|---|---|---|
| /version 명령어를 실행하는 다른 방법 추가 | icanhasbukkit이라는 커스텀 명령어를 등록해, 이 명령어를 쓰면 version 명령어가 실행되게 한다. | /icanhasbukkit 입력 | aliases: icanhasbukkit: - “version” |
| 명령어 삭제 | summon이라는 커스텀 명령어를 등록하고 빈 목록에 매핑해, 서버가 이 명령어의 등록을 해제하게 한다. | 명령어를 삭제하는 것이 목적이므로 입력 예시 없음 | aliases: summon: - [] |
| /version 명령어 이름 바꾸기 | icanhasversion이라는 커스텀 명령어를 등록해 version 명령어를 실행하게 하고, “version”이라는 커스텀 명령어를 빈 목록에 매핑해 기존 /version 명령어를 삭제한다. | /icanhasversion 입력 | aliases: icanhasversion: - “bukkit:version” version: - [] |
| 인자 필수 | givedirt라는 커스텀 명령어를 만든다. 인자(여기서는 플레이어 이름)를 줘야만 실행된다. | /givedirt <player> 입력, <player>는 플레이어 이름 | aliases: givedirt: - “give $$1 minecraft:dirt` |
| 여러 명령어 실행 | givedirtmsg라는 커스텀 명령어를 만든다. 인자가 필요한 명령어 두 개를 실행한다. | /givedirtmsg <player> 입력, <player>는 플레이어 이름 | aliases: givedirtmsg: - “give $$1 minecraft:dirt” - “say Gave dirt to $$1” |
| 플러그인이 제공하는 명령어 사용 | 커스텀 명령어로 내장 /time 명령어를 덮어써서 ScrapBukkit 플러그인이 제공하는 버전을 쓴다. | /time <set|add> <value> 입력 | aliases: time: - “scrapbukkit:time $1-” |
| Mojang이 제공하는 명령어 사용 | 커스텀 명령어로 내장 /time 명령어를 덮어써서 Mojang이 제공하는 버전을 쓴다. | /time <set|add> <value> 입력 | aliases: time: - “minecraft:time $1-” |
| Bukkit이 제공하는 명령어 사용 | 커스텀 명령어로 내장 /time 명령어를 덮어써서 Bukkit이 제공하는 버전을 쓴다. | /time <set|add> <value> 입력 | aliases: time: - “bukkit:time $1-” |
| 모든 인자 받기 | broadcast라는 커스텀 명령어를 만든다. say 명령어를 실행하며 넘겨받은 모든 인자를 받는다. | /broadcast <message> 입력, <message>는 방송할 메시지 | aliases: broadcast: - “say $$1-” |
| 첫 번째 인자는 필수, 두 번째 인자는 선택 | 내장 ban 명령어를 덮어쓴다. 첫 번째 인자(플레이어 이름)는 필수이고, 차단 사유는 선택이다. 이 명령어를 쓰면 플레이어가 차단되고, 누군가 차단되었다는 메시지가 서버 전체에 방송된다. | /ban <player> [optional reason] 입력, <player>는 플레이어 이름, [optional reason]은 선택적 차단 사유 | aliases: ban: - “bukkit:ban $$1 $2-” - “say Banned $$1. Reason: $2-” |
| 명령어에 $ 기호 쓰기 | dollar라는 커스텀 명령어를 만든다. 서버에 “That will be 200,thanks!” 메시지를 방송한다. 문자는 인자를 나타내는 데 쓰이므로 커스텀 명령어를 만들 때는 백슬래시(\)로 이스케이프해야 한다. | /dollar 입력 | aliases: dollar: - “say That will be \$200, thanks!” |