상위 문서: Skript/스크립트 작성 도움말
{{{#!wiki style="margin: -0px -10px -5px; min-height:calc(1.5em + 5px)" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -1px -11px; word-break:keep-all" | <colbgcolor=darkgreen><colcolor=#fff> 기본 플레이 | |
시스템 | 세계 (시드) · 게임 모드 · 난이도 · 게임 규칙 · 엔딩 · 죽음 메시지 · 스플래시 · 명령어 · NBT · 런처 | |
인게임 | 아이템 · 몹 (플레이어) · 개체 · 날씨 · 차원 · 생물군계 · 구조물 · 마법 부여 · 상태 효과 · 조작법 · 피해 · 업적 | |
도움말 | 튜토리얼 · 팁 (탐험 · 파밍 · 회로) · 재생 가능한 자원 · 브릿징 · PVP · 파쿠르 · 스피드런 · 건축 | |
시리즈 및 매체 | ||
출시 에디션 | 자바 에디션 (업데이트) · 베드락 에디션 (업데이트) · 포켓 에디션* · 콘솔 에디션* · 파이 에디션* | |
파생 게임 | 마인크래프트 던전스* · 마인크래프트 레전드* · 마인크래프트 에듀케이션 · 마인크래프트: 스토리 모드* · 마인크래프트 어스* | |
미디어 | OST · 관련 서적 · 레고 · 영화 · 애니메이션 · Minecraft Live · Minecraft Now · Minecraft Monthly | |
유저 콘텐츠 | ||
창작 요소 | 2차 창작 · 망토 · 맵 · 모드 (개발 · 팁 · 모드팩) · 애드온 · 팩 (리소스 팩 · 데이터 팩) · 외부 프로그램 · 핵 | |
멀티 콘텐츠 | 멀티플레이 · 서버 · 플러그인 · Realms · EULA | |
개발 | 개발 기초 · 모드 개발 · 플러그인 개발 | |
기타 | ||
이야깃거리 | 여담 · 커뮤니티 · 사건 사고 · 문제점 · 용어 · 지원 언어 · 머나먼 땅 · 이미테이션 게임 · 히로빈 | |
관련 문서 | 나무위키 마인크래프트 프로젝트 · 마인크래프트로 분류된 문서 · 마인크래프트의 하위 문서 | |
* 표시는 서비스가 종료되었거나 개발이 중단되었다는 표시이다. | }}}}}}}}} |
1. 개요
마인크래프트 Skript 작성 방법에 대한 문서이다.2. 작성 방법
#(주석)은 뒤에 붙이는 모든 말들을 프로그램에 영향을 끼치지 않게 해 준다.
주석은 코드를 더 쉽게 이해할 수 있게 해주며 협업을 할때 유용하게 사용된다.
예제:
command /kill [<offlineplayer>]:
trigger:
kill arg-1 #해당 글과 같이 적힌 것은 프로그램에 아무런 영향을 주지 않는다.
broadcast "&f%arg-1%님이 관리자에 의해 사망하였습니다."
이벤트 또는 조건문 등등 뒤에 : 가 붙을 경우 다음 줄을 시작할때 탭 또는 스페이스 4번 을 눌러줘야 한다.
한 스크립트에서 탭 또는 스페이스를 같이 사용할 수 없다.
indentation error: expected 2 tabs, but found '->____' [-> = tab, _ = space, ? = other whitespace]
탭 하고 스페이스를 같이 사용하게 되면 위와 같은 에러메시지를 볼 수 있다.
예제:
command /spawn:
trigger:
if player is op:
teleport {loc.spawn} to player
send "&c스폰으로 이동합니다."
else:
send "&c권한이 부족해 명령어를 사용할 수 없습니다."
여기서 {loc.spawn}는 변수이므로 해당 명령어를 사용할 거라면 따로 이 변수에 위치값을 넣어 주는 구문을 만들어서 넣어 줘야 한다.
{loc.spawn}에 위치값을 넣어 주는 구문은 아래와 같다.
예제:
command /setspawn:
trigger:
if player is op:
set {loc.spawn} to player's location
send "&c스폰 위치가 새롭게 갱신됐습니다."
else:
send "&c권한이 부족해 명령어를 사용할 수 없습니다."
3. 작성 환경
메모장같이 일반적인 텍스트 편집기를 사용해도 되지만 부가적인 기능이 들어있는 텍스트 편집기를 사용하게 되면 작업 능률을 높일 수 있다.Sublime Text, Atom, Notepad++, Visual Studio Code 정도가 많이 사용된다.
4. 구문 작성
만들고 싶은 구문에 따른 예제와 설명이 있는 문서다. 자신의 마음대로 응용해 보기 전에 먼저 예제를 따라서 써 적용해 본 후 응용해 보는 걸 추천한다.4.1. 커맨드
스크립트에서 가장 기초적인 구문이자 스크립트를 배우거나 할 때 가장 먼저 접하게 되는 '기본'이다.예제:
command /command:
trigger:
command와 trigger는 한 세트라고 볼 수 있다. trigger: 구문이 없다면 커맨드 구문이 작동하지 않는다.
위 예제와 같이 작성할 경우 /command 명령어를 입력했을 때 구문이 작동되도록 할 수 있다.
4.2. 텍스트 출력
인게임 채팅창으로 텍스트를 출력하는 기능이다.[1]send와 message로 출력할 수 있다.[2]
예제:
command /text:
trigger:
send "Hello."
위 예제처럼 구문을 작성하고 적용하면 /text 명령어를 쳤을 때 Hello.라는 텍스트가 출력되는 걸 볼 수 있을 것이다. 텍스트 출력은 주로 시스템 메시지로 많이 쓰인다.
예제:
command /pl:
trigger:
if player is not op:
send "[System] 권한이 없습니다."
exit
해당 예제를 적용시킬 경우 오피 권한이 없는 플레이어는 /pl 명령어를 입력 시 권한이 없다는 메시지가 뜨며 플러그인 목록을 확인할 수 없게 된다.
여기서 if player is not op는 플레이어가 오피 권한을 갖고 있는가?를 감지하는 구문이며, exit는 저 메시지를 출력한 뒤 플러그인 목록이 출력되지 않도록 구문을 강제 종료하는 기능이라고 보면 된다.
if에 대해서는 후술.
4.3. if / else
뒤에 어떤 조건이 오느냐에 따라 정말 광활하게 쓰이는 구문. 만약 이라는 뜻을 가진 영문과 같이 뒤에 오는 조건을 만족하냐 만족하지 못하느냐를 감지한다.else는 아니라면이라는 뜻을 가졌다. 위에서 사용된 if문과 반대의 상황이라면이라고 생각하면 편하다.
else를 사용하려면 같은 세로줄에 무조건 한 번은 if문이 쓰여야 하며, 이때 쓰인 else는 해당 if문과 반대의 상황일 때 구문이 작동되도록 한다.
텍스트로만 보면 이해하기 어려우니 아래 예제들을 보며 익혀 보자.
예제:
command /text:
trigger:
if player is op:
send "당신은 오피입니다."
else:
send "당신은 오피가 아닙니다."
구문을 이렇게 작성할 경우 /text 명령어를 쳤을 때, 그 사람이 오피라면 당신은 오피입니다.라는 텍스트가, 오피가 아니라면 당신은 오피가 아닙니다.라는 텍스트가 뜰 것이다.
if player is op. 영어에 대해 문외한이 아닌 한 대충 해석할 수 있을 것이다. 만약 플레이어가 오피라면?이라는 조건이다.
즉
if player is op:
send "당신은 오피입니다."
이 구문을 해석하면, 만약 플레이어가 오피라면 "당신은 오피입니다."라는 텍스트를 출력한다.라고 볼 수 있다.
else는 앞서 말했듯이 간단한 뜻을 가졌다. 아니라면이라는 조건이다.
앞서 쓰인 조건이 만약 플레이어가 오피라면이므로, 후에 쓰인 else는 아니라면. 즉, 플레이어가 오피가 아니라면이라는 뜻을 갖게 된다.
if player is op:
send "당신은 오피입니다."
else:
send "당신은 오피가 아닙니다.
만약 플레이어가 오피라면 "당신은 오피입니다."라는 텍스트를 출력한다.
아니라면(플레이어가 오피가 아니라면), "당신은 오피가 아닙니다."라는 텍스트를 출력한다.
if 뒤에 올 수 있는 조건은 정말 많다. player is op(플레이어가 오피인가), gamemode of player is survival(플레이어의 게임모드가 서바이벌 상태인가), player has 1 of diamond(플레이어가 1개의 다이아몬드를 보유하고 있는가)등과 같이 플레이어의 상태를 감지하는 조건부터 시작하여, {A} is 3(A라는 이름의 변숫값이 3인가), {A} > 5(A라는 이름의 변숫값이 5보다 큰가) 등 변수와도 많이 쓰인다. 변수의 자세한 쓰임은 후술.
아래는 위에서 언급된 예시 중 하나인 player has 1 of diamond(플레이어가 1개의 다이아몬드를 보유하고 있는가)를 응용한 예시 구문.
command /trade:
trigger:
if gamemode of player is survival:
if player has 1 of diamond:
remove 1 of diamond from inventory of player
give 10 of iron to player
send "거래 완료."
else:
send "&c다이아몬드를 갖고 있지 않습니다."
else:
send "&c게임모드가 서바이벌이 아닙니다."
(각주 추가)
command /trade: #/trade라는 명령어를 입력했을 때.
trigger:
if gamemode of player is survival: #만약 플레이어의 게임모드가 서바이벌이라면
if player has 1 of diamond: #만약 다이아몬드 1개를 보유하고 있다면
remove 1 of diamond from inventory of player #플레이어의 인벤토리로부터 다이아몬드 1개를 없앤다.
give 10 of iron to player #플레이어에게 철괴 10개를 지급한다.
send "거래 완료." #텍스트를 출력한다.
else: #아니라면(다이아몬드를 보유하고 있지 않다면)
send "&c다이아몬드를 갖고 있지 않습니다." #텍스트를 출력한다.
else: #아니라면 (플레이어의 게임모드가 서바이벌이 아니라면)
send "&c게임모드가 서바이벌이 아닙니다." #텍스트를 출력한다.
해당 예제와 같이 구문을 작성한다면,
/trade 명령어를 통해 다이아몬드를 보유하고 있는 서바이벌 모드의 유저만 철괴로 교환이 되도록할 수 있다.
해당 예제에서 쓰인 다른 구문들은 후술.
여담으로 구문을 보다 간편화하기 위해 else if 구문을 사용할 수 있다. 해당 예제와 같이 if문이 여러 번 쓰였을 경우 유용한 구문이다.[3]
else if 구문을 사용하여 위 예제를 보다 간편하게 바꿔보자.
예제:
command /trade:
trigger:
if gamemode of player is not survival:
send "&c게임모드가 서바이벌이 아닙니다.
else if player has not 1 of diamond:
send "&c다이아몬드를 갖고 있지 않습니다."
else:
remove 1 of diamond from inventory of player
give 10 of iron to player
send "거래 완료."
보다시피 else if는 구문을 보다 간결하게 만들어 준다.
다만 else if로 구문을 간결하게 줄이려면 구문을 조금 수정해야 할 필요가 있다. 예를 들어 위 예제에서도 원래는 만약 플레이어가 서바이벌 모드라면을 감지했던 if gamemode of player is survival 구문이 만약 플레이어가 서바이벌 모드가 아니라면을 감지하는 if gamemode of player is [not] survival로 바뀌었다. 아래 다이아몬드 보유 여부를 감지하는 has 역시 has [not]으로 바뀐 걸 볼 수 있다.