개인 자료란 (JE)

  서버 커뮤니티

Profile ENCE 대표칭호 없음

I3396 83afcc84f84f44ed811e268863d53eb3

Profile

트리거리엑터 강좌

마인크래프트 트리거리엑터 표시자(Placeholder)

2020.09.15 조회 수 1486 추천 수 0
해당 강의는 HK 강좌팀 도토리님이 작성해주셨습니다.

이번 강의는 Placeholder(표시자)에 대한 것입니다.
표시자란, 서버 내에서 사용되고 있는 변수를 참조하는 데 사용됩니다. 
플레이어의 이름, 위치, 어떤 좌표에 어떤 블럭이 있는지까지 서버 내에서 사용되는 모든 정보를 가져올 수 있습니다. 
TR에서 제공되는 Placeholder는 기본적인 수준입니다. 

그러나 개요에서도 말했듯 TR은 버킷에서 제공하는 모든 API를 사용할 수 있고, 
PlaceholderAPI나, 다른 플러그인의 API도 불러와 사용할 수 있기에 제공되는 서버의 모든 정보를 참조할 수 있습니다. 
하지만 이번 시간에는 TR에서 제공되는 기본적인 표시자 몇 가지와, 
PlaceholderAPI를 사용하는 법, 예외에 대해 설명하겠습니다. 
TR에서 제공하는 모든 Placeholder는 다음 위키에 수록되어 있습니다. https://github.com/TriggerReactor/TriggerReactor/wiki/Placeholders_kr#placeholder-%EB%AA%A9%EB%A1%9D 
위키 참조@!

GitHub
Contribute to TriggerReactor/TriggerReactor development by creating an account on GitHub.



표시자 사용 방법
표시자는 문자열로 처리되는 것이 아닌, 변수로서 처리되기 때문에 큰따옴표 안에 들어가면 안 됩니다. 다음 예제는 Hi <닉네임>을 출력해서 실행한 유저의 닉네임을 출력하게 하는 것이 목표입니다. #MESSAGE "Hi " + $playername여기서 $playername 은 트리거를 발동시킨 플레이어의 닉네임을 불러오는 표시자입니다. 다음과 같이 문자열인 "Hi " 에만 큰따옴표가 붙었고, 표시자인 $playername은 붙지 않았습니다. 또한, 두 문자열을 합쳐서 하나로 출력할 때는 중간에 + 를 붙여 주어야 합니다. + 를 사이에 둔 문자열은 하나로 합쳐지게 되며, 사이에 공백이 없으니 공백이 필요할 때는 공백을 따로 넣어줘야 합니다. 이 구문에서는 Hi 뒤에 공백을 하나 넣어주어 원하는 형식으로 출력되게 하였습니다.

Player 관련 표시자
이 표시자들은 플레이어의 정보를 받아옵니다. 대표적으로 $playername, $playeruuid 등이 있습니다. 플레이어가 오피인지, 날고 있는지, 달리고 있는지, 웅크리고 있는지의 정보도 받아올 수 있으며, 인벤토리의 정보도 받아올 수 있습니다. 다음 예제를 보겠습니다. 플레이어의 정보를 받아와 출력하는 트리거입니다.
#MESSAGE $playername + " 님, 안녕하세요!"
#MESSAGE "당신의 UUID는 " + $playeruuid + " 입니다."
#MESSAGE "당신은 현재 " + $gamemode + " 상태시네요."
#MESSAGE "당신의 체력은 " + $health + " / " + $maxhealth + " 입니다."
D0TORI라는 유저가 서바이벌 상태에서 체력이 하트 3칸 남은 상태로 저 명령어를 입력하면,
D0TORI 님, 안녕하세요!
당신의 UUID는 (D0TORI의 UUID) 입니다.
당신은 현재 SURVIVAL 상태시네요.
당신의 체력은 6 / 20 입니다.
라는 출력 결과가 나오게 될 것입니다. 표시자가 반환하는 값의 타입도 중요합니다. 플레이어가 지금까지 깎인 체력이 몇인지 출력하는 예제를 보겠습니다.
#MESSAGE $playername + "님, 당신은 현재 " + ($maxhealth - $health) + "의 체력을 잃으셨군요!"
이 예제에서 중요한 점은, 같은 타입의 표시자끼리 연산을 하였다는 점입니다. $maxhealth는 플레이어의 최대 체력을 정수 형태로 출력하고, $health는 플레이어의 현재 체력을 정수 형태로 출력합니다. 그러므로, 똑같은 정수 타입인 두 표시자는 서로 연산이 가능합니다. 괄호를 쳐준 이유는, 괄호 안을 먼저 계산하여 플레이어가 잃은 체력을 계산한 다음 출력하게 하기 위해서입니다.
[오후 10:39]

위치 관련 표시자
위치 관련 표시자는 몇 개 없습니다. $x, $y, $z를 이용해서 플레이어의 현재 좌표를 알거나, $playerloc, $playerlocexact가 사용자의 월드까지 반환하여 문자열 형식이라는 것만 알면 충분합니다.

아이템 관련 표시자
아이템 표시자는 아주 중요한 표시자 중 하나입니다. 먼저, $helditemname과 $helditemdisplayname의 차이를 알아야 합니다. 둘 다 위키에서는 들고 있는 아이템의 이름을 반환한다고 되어 있는데 타입 이름인지, 표시된 이름인지만 다릅니다. 다음 예제를 보면서 설명하겠습니다. 이 구문은 플레이어가 들고 있는 아이템의 $helditemname과, $helditemdisplayname을 반환합니다.
#MESSAGE "당신이 들고 있는 아이템은 " + $helditemname + " 이네요!"
#MESSAGE "그 아이템의 이름은 " + $helditemdisplayname + " &f입니다!"
그냥 나무 검을 들고 저 명령어를 입력하면 다음과 같은 출력 결과가 나옵니다.
당신이 들고 있는 아이템은 WOOD_SWORD 이네요!
그 아이템의 이름은  입니다!
반면 나무 검에 모루나 nbt로 목검이라고 이름 붙인 다음, 저 명령어를 쓰면
당신이 들고 있는 아이템은 WOOD_SWORD 이네요!
그 아이템의 이름은 목검 입니다!
라는 출력 결과가 나오게 됩니다. 이제 감이 오시나요? $helditemname은 들고 있는 아이템의 타입을 반환합니다. 그 아이템에 어떤 이름을 붙였든 상관없이 같은 결과가 나옵니다. 손에 아무것도 들고 있지 않아도 AIR 이라는 출력 결과를 반환합니다. 그러나 데이터 태그까지는 반환하지 않기 때문에, 가스트 스폰 알을 들던, 좀비 스폰 알을 들던, 상관없이 MONSTER_EGG라는 출력 결과가 나옵니다. $helditemdisplayname은 아이템에 이름을 붙였을 경우에만 출력값이 나오게 됩니다. 색깔 코드를 써서 붙였다면 색깔 코드까지 반영되어 출력됩니다. 이 차이를 알았다면, 아이템 관련 표시자에는 헷갈릴 만한 것이 없으니 위키를 보면서 실험하면 됩니다.

Vault 관련 표시자
여기서는 한 가지만 알면 됩니다. 바로 $haspermission 이라는 표시자인데, 플레이어가 펄미션을 가지고 있는지 여부를 반환합니다. 만약 가지고 있으면 true, 아니라면 false를 반환하게 됩니다.
#MESSAGE $haspermission:"*"
위 예제에서 *은 와일드 카드, 즉 모든 권한을 의미합니다. 플레이어가 모든 권한(오피)이 있으면 ture를 출력하고, 아니면 false를 출력합니다.  이 표시자는 나중에 조건문과 같이 사용해서 지정 권한이 있어야만 실행 가능한 구문을 만드는 데 주로 사용됩니다.

PlaceholderAPI
TR은 PlaceholderAPI(이하 PAPI)를 지원합니다. PAPI는 표시자 플러그인으로, 기본 제공되는 표시자 말고도 더 많은 표시자들을 사용할 수 있게 해 줍니다.  하지만 TR에서 PAPI의 표시자를 사용하려면 먼저 분석해야 합니다. 예외적으로 #MESSAGE 실행자는 PAPI의 표시자를 분석하므로, 문자열 안에 넣고 그대로 사용해도 됩니다. #MESSAGE "Hi, %playername%" 이렇게 작성해도 아무런 문제가 일어나지 않습니다. 그러나, 다른 실행자에서는 오류가 일어납니다. 그래서 다음과 같이 분석해 주어야 합니다. placeholder.parse(player, "%playername%") 이제 이 구문을 #MESSAGE 실행자에 넣어서 만들어 보겠습니다. #MESSAGE placeholder.parse(player, "Hi, %playername%")이렇게 PAPI의 표시자들을 사용할 수 있습니다. 변수에 PAPI의 표시자가 출력하는 값을 넣을 때도 꼭 분석해 주어야만 합니다.

예외 사항 (심화 과정)
표시자들은 모든 트리거에서 사용 가능합니다. 그러나, 특정 예외 상황에는 작동하지 않는 표시자들이 있습니다. 예를 들어, 플레이어가 발동시키는 것이 아닌, 서버가 켜졌을 때 발동하는 트리거가 있다고 칩시다. 이 때, 이 트리거에서 $playername이라는 실행자를 사용하면 오류가 납니다. 그 이유는 플레이어의 정보가 없기 때문입니다. 표시자를 사용할 때는 이런 예외 사항이 발생할 수 있는 여지를 남겨두면 안 됩니다. 그러나 기초를 다루는 지금은 이런 예외 사항에 대해 신경쓰지 않아도 됩니다. 아직은 그저 이런 것도 있구나 하고 넘기시면 됩니다.

이번 강의를 마치며
지금까지 $placeholder, 표시자에 대해 알아보았습니다. 더 많은 표시자들을 위키에서 확인하시고, 꼭 트리거 구문을 짜보세요. 간단한 구문이라도 짜면서 손으로 익히면 원하는 기능을 구현할 때 많은 도움이 될 겁니다. 그럼 다음 강의, 변수 편에서 뵙겠습니다.

Warning
댓글이 없습니다.

새로운 댓글을 등록해 주세요!

뉴스 및 창작물
/files/thumbnails/762/770/003/262x150.crop.jpg?20240418073724

레드스톤

T.B.H (고민중독) | 노트블럭 버전 | NoteBlock Cover [한국어 영어 중국어 가사 추가]

노트블럭전문가

2024-04-18

0

/files/thumbnails/218/767/003/262x150.crop.jpg?20240412130213

레드스톤

우리의 꿈 - 원피스 오프닝

노트블럭전문가

2024-04-12

0

/files/thumbnails/505/766/003/262x150.crop.jpg?20240411122306

레드스톤

기동전사 건담 수성의 마녀 | 노트블럭 커버 1

노트블럭전문가

2024-04-11

1

/files/thumbnails/932/765/003/262x150.crop.jpg?20240410124459

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

노트블럭전문가

2024-04-10

0

/files/thumbnails/403/765/003/262x150.crop.jpg?20240409190538

레드스톤

마인크래프트 노트블록으로 만든 『 밤양갱 (Bam Yang Gang) 』

Sonttukk

2024-04-09

4