Skip to content
wysohn edited this page Nov 13, 2023 · 16 revisions

Placeholders(플레이스 홀더)

Placeholder는 서버 내의 변수를 참조하는 데 사용됩니다. 예를 들어, 원하는 경우 구문에서 트리거를 실행한 플레이어의 이름을 얻으려면 $playername 자리 표시자를 사용할 수 있습니다.


[긴급 공지] 이제 문자열 내부에 있는 플레이스 홀더도 플레이스 홀더로서 취급됩니다. (Coming in 3.0.0)

이전에는, $placeholder 를 두 개의 쌍따옴표 가운데, 즉 문자열 내부에 적으면 그냥 $placeholder라는 문자열로 인식했습니다.

그러나, 현재 Beta테스트중인 3.0.0 부터는 문자열 내부에 있는 플레이스 홀더가 플레이스 홀더로서 취급되며, 더이상 String으로서 취급되지 않습니다.

사용 규칙

  • $로 시작해서 문자열 마지막(쌍따옴표) 와 만나거나, 띄어쓰기와 만나는 경우, 플레이스 홀더로 변환
    • "my name is $playername" "hey $playername !"
    • `"no way to escape, $playername"
  • ${로 시작하여 }로 끝날 경우 플레이스 홀더로 변환
    • "hey ${playername}!"
    • }가 없을 경우 오류 발생

주의!: 만약 $을 플레이스 홀더의 목적이 아닌 단지 하나의 달러 표시로서 사용하고 싶다면, 모두 이스케이프 시켜주어야 합니다. e.g. "Your currency: "+$money+" \$" (아시다시피 , '\' 는 이스케이프 문자입니다.


실습 해보기:

/trg run #MESSAGE "Hello " + $playername + "."

만약 내 닉네임이 MidnightSugar라면, 이것은 "Hello MidnightSugar."라고 하는 메세지를 반출할것입니다.

Placeholder 목록

이것은 현재 트리거 리액터에서 사용할 수있는 플레이스 홀더의 전체 목록입니다. 자리 표시자가 여기에 표시되지 않은 경우, javadocs에서 직접 내부 메서드와 변수에 액세스 할 수 있습니다!

https://github.com/wysohn/TriggerReactor/wiki/Accessing-Methods

최신 버전의 트리거 리액터를 사용하고 있는지 확인하십시오. 그렇지 않으면 작동하지 않을 일부 Placeholder가 있습니다!

Player(플레이어)

Placeholder 반출 타입 참고
$playername 문자열 현재 플레이어 이름
$playeruuid 문자열 현재 플레이어 UUID. 플레이어가 이름을 바꿔도 UUID는 유지됩니다.
$ip 문자열 현재 플레이어의 IP
$gamemode 문자열 반출내용 : SURVIVAL, CREATIVE, ADVENTURE, SPECTATOR
$health 실수 현재 플레이어의 체력
$maxhealth 실수 현재 플레이어의 최대 체력
$food 실수 현재 플레이어의 배고픔
$air 실수 현재 플레이어의 숨(물방울)
$exp 실수 현재 플레이어의 experience point(경험치) 바가 차오른 정도 (0.3은 30%)
$explevel 정수 현재 플레이어의 경험치 레벨
$isop 불 대수(Boolean) 플레이어가 오피인지의 여부
$isflying 불 대수(Boolean) 플레이어가 날 수 있는 상태인지의 여부
$issprinting 불 대수(Boolean) 플레이어가 달리고 있는지의 여부
$isburning 불 대수(Boolean) 플레이어가 불에 타고 있는지의 여부
$issneaking 불 대수(Boolean) 플레이어가 웅크리고 있는지의 여부
$haseffect:{문자열} 불 대수(Boolean) IF $haseffect:"LUCK" Bukkit, Sponge
$emptyslot 정수 첫번째로 빈 슬롯을 찾아내 슬롯번호를 숫자로 반환함. 모든 인벤이 꽉차있을 경우, -1이 반환됨.
$emptyslots 정수 빈 슬롯 개수를 반환
$iscooldown 불 대수(Boolean) #COOLDOWN Executor 의해 현재 플레이어가 쿨다운 중이면 true를 반환합니다. (TRG 3.5 부터 사용 가능)
$cooldownuntil 정수 #COOLDOWN Executor에 의해 발생한 쿨다운이 끝날 때까지 남은 시간(밀리초). (TRG 3.5 부터 사용)
$cooldownuntil:{unit} 정수 #COOLDOWN Executor에 의해 발생한 쿨다운이 끝날 때까지 남은 시간을 반환합니다. (TRG 3.5 부터 사용 가능) 사용 가능한 'unit': "milliseconds", "seconds", "minutes", "hours", "days". 나머지는 버려집니다.

위치(Location)

Placeholder 타입 참고
$playerloc 문자열 플레이어의 위치를 SimpleLocation 형태로 반환함. 예시 반출 내용) world@100,10,100
$playerlocexact 문자열 플레이어의 위치를 정확하게 반환함. 예시 반출 내용) world@100.5,10.34,233.55
$x 정수 플레이어의 위치에서 x좌표값을 반환. 소수점이 없음
$y 정수 플레이어의 위치에서 y좌표값을 반환. 소수점이 없음
$z 정수 플레이어의 위치에서 z좌표값을 반환. 소수점이 없음
$biome 문자열 플레이어가 위치한 곳의 바이옴 이름을 반환.

월드(World)

Placeholder 타입 참고
$time 정수 현재 플레이어가 있는 월드의 시간을 반환함(틱단위, 하루는 24000틱)
$worldname 문자열 현재 플레이어가 있는 월드의 이름을 반환함
$blockname:{월드이름}:{x}:{y}:{z} 문자열 {월드이름}의 이름을 가진 월드의 {x}, {y}, {z} 위치에 있는 블럭의 타입 이름을 반환함

서버(Server)

Placeholder 타입 Remark
$onlineplayers 정수 현재 동시접속자의 수를 반환함
$tps 실수 현재 tps(Tick Per Second) 를 반환함 0 ~ 20.0 사잇값 반환

아이템(Items)

Placeholder 타입 참고
$helditemname 문자열 들고 있는 아이템의 타입 이름을 반환 예:("IRON_INGOT")
$helditemdisplayname 문자열 들고 있는 아이템의 표시된 이름을 반환 (있을 경우)
$helditemid 정수 들고 있는 아이템의 아이디를 반환 (상위 버전(1.13+) 에서는 @Deprecated 되었습니다.)
$helditemlore:{정수} 문자열 아이템의 {정수} 번째의 lore에 적힌 내용을 반환. index 기준IF $helditemlore:0 == "+100 damage"
$helditemhasenchant:{문자열} 불 대수(Boolean) {문자열}에 적힌 인첸트가 들고있는 아이템에 적용되어 있는지의 여부를 반환함 IF $helditemhasenchant:"LUCK"
$helditemhasenchant:{문자열}:{정수} 불 대수(Boolean) {문자열}에 적힌 인첸트의 {정수} 레벨의 인첸트가 들고있는 아이템에 적용되어 있는지의 여부를 반환함IF $helditemhasenchant:"LUCK":1

1 미만의 레벨을 가진 $helditemhasenchant는 무시됨

Vault

Placeholder 타입 참고
$group String[] 플레이어의 펄미션 그룹 목록을 문자열 배열로써 반환.Array 참고
$firstgroup String 플레이어의 펄미션 그룹을 반환.
$haspermission:{문자열} 불 대수(Boolean) 플레이어가 {문자열}에 입력한 펄미션을 가지고 있는지의 여부를 반환함.IF $haspermission:"some.per.mission"
$money 실수 현재 플레이어가 소유하고 있는 돈의 액수를 반환함.#MESSAGE "you have "+$money+" dollars!"
$prefix 문자열 플레이어의 prefix를 반환함
$suffix 문자열 플레이어의 suffix를 반환함

Mysql

Placeholder 타입 참고
$mysql:{문자열} *Depends 제공된 키와 관련된 mysql에서 값을 가져와 반환함

*반환되는 값은 #MYSQL에서 Executor의 사용에 따라 달라질 수 있음.

  • 고급 기술:
    • TR에서 풀링된 것을 사용하더라도, MYSQL는 비동기(Async)로 설정된 트리거에서 사용하는것이 가장 정확함.

특수

Placeholder 타입 참고
$random:{숫자} 정수 0부터 {숫자}-1 까지 중에서 랜덤으로 정수를 반환함.#MESSAGE "0~5. 뭘까요?: "+$random:6
$random:{숫자A}:{숫자B} 정수 {숫자A}부터 {숫자B}까지 중에서 랜덤으로 정수를 반환함.#MESSAGE "1~7. 뭘까요?: "+$random:1:7
$currenttimeseconds 정수 현재 시각을 1970.01.01 이후부터 초단위로 얼마나 흘렀는지 반환합니다. 예) 2018년 11월 2일 2시 30분 : 1541136600
$round:{실수}:{소숫점 아래 자리} 실수 {실수}에 적은 값을 {소숫점 아래 자리}까지 반올림하여 반환함. 예) $round:1.3449:2 = 1.35
$packlist:{값 형식}:{값}:{값}:.....:{값} List {값 형식}을 따르는 List를 생성하여 index 0부터 {값}을 차례대로 넣어 List 자체를 반환함. {값}에 아무것도 적지 않으면 빈 배열이 생성됨. 주의: 값 형식과 맞는 값을 입력해야 함
$isnumber:{문자열} 불 대수(Boolean) [ Coming in 3.0.0 ]해당 문자열이 Number로써 파싱될 수 있는지 여부, 즉 숫자로만 구성되어 있는지 반환.

TRG 3.0.0 에서 추가 예정

Placeholder 타입 참고
$helditem ItemStack 현재 플레이어가 들고있는 아이템. 아무것도 들고있지않다면 AIR 형 아이템이 반환됩니다.
$id:{ItemStack} Number 아이템의 정수형 값을 가져옵니다 (@최신버전(1.13+) 에서는 마인크래프트 자체적인 시스템 변화로 지원되지 않습니다.)
$cmdline:{from}:{to} String 명령어를 문자열로써 가져옵니다. (Command 트리거나 onCommand Custom 트리거에서만 사용 가능).
$entityname String 현재 엔티티의 표시명을 가져옵니다.

추가예정(Planned)

현재 지원하지 않는 기능으로 추가 예정중에 있는 플레이스 홀더 목록

Placeholder 타입
$server_name:{문자열} 불 대수(Boolean)
$server_motd:{문자열} 불 대수(Boolean)
$server_online_player:{문자열} 불 대수(Boolean)
$server_max_player:{문자열} 불 대수(Boolean)

PlaceholderAPI

Trigger Reactor는 PlaceholderAPI를 지원합니다. 다운로드는 여기서!: PlaceHolderAPI.

PlaceholderAPI로 플레이스홀더 구문 분석

#MESSAGE#BROADCAST 실행자는 자동으로 PlaceholderAPI 를 구문 분석합니다. 단순히 일반 텍스트처럼 플레이스 홀더를 넣으면됩니다.

`#MESSAGE "안녕하세요, %playername%님!"`

다른 Executor의 경우 컴파일러에서 Placeholder를 분석하도록 해야합니다. 다음과 같이 할 수 있습니다.

#MESSAGE placeholder.parse(player, "Hi %playername%")
  • Placeholder는 문자열 안에 있음을 알 수 있습니다. TR의 Placeholder와 달리 Placeholderapi의 자리 표시자는 문자열로 작동합니다. 그러니 혼동하지 마십시오.
    • TR 플레이스 홀더 : #MESSAGE "Hi "+$playername
    • PlaceholderAPI : #MESSAGE "Hi %playername%"
    • 왜 이러한 차이점이 다음 장에서 발생하는지 배우게 됩니다 : 변수(Variable)

트리거 문맥 (고오급)

Placeholder가 작동하지 않으면 유효하지 않은 트리거 문맥(또는 구문)이 원인 일 수 있습니다. 이는 액세스하려는 이벤트에서 사용할 수 없는 정보를 참조하려고 할 때 발생합니다.

예를 들어, $playername은 항상 트리거를 클릭해야(Click Trigger와는 조금 다릅니다) 작동합니다. 플레이어가 구문을 실행하려면 트리거를 클릭해야 하므로 이 이벤트에서 참조 할 수 있는 플레이어 정보를 항상 갖게됩니다. 그러나, PluginReloadEvent(플러그인이 리로드될때 발생하는 이벤트)에 후킹하는 커스텀 트리거를 사용한다면,$playername은 실패 할 것입니다. 이 이벤트의 구문에는 플레이어 정보가 없으므로 빈 문자열이나 오류가 표시됩니다.

다른 플러그인 이벤트에 연결할 때 특히 고려해야합니다. 이벤트가 PlayerEvent를 상속받지 않으면$playername과 같은 자리 표시자가 실패 할 가능성이 99.9%입니다.

Plugin Description / 목차

1. Getting Started () (рус)

S.L. In-game Editor () (рус)

2. Triggers () (рус)

List and usage of Triggers / 트리거 목록과 사용 방법:

  • List of Executors / 실행자(Executor) 목록

4. Placeholders () (рус)

  • Using PlaceholderAPI / PlaceholderAPI 사용법
  • List of Placeholders / 플레이스 홀더(Placeholder) 목록

5. Conditions () (рус)

  • Creating Conditions / 조건식 만들기
    • Boolean Expressions / 부울 (Boolean) 표현 방법
  • Logical Operators / 연산자 사용법
  • IF statement / IF 조건문
  • Null Checking / Null 검사법
  • Switch Case / Switch Case 조건

6. Variables () (рус)

  • Local Variables / 지역 변수
  • Global Variables / 전역 변수

Advanced

Timings () (рус)

7. Methods () (рус)

  • Using Methods / 메소드 사용법
  • Special Data Types / 특수한 데이터 형식
  • Reading Javadocs / Javadoc 읽기
  • Handling Enum / Enum 데이터 처리
  • Lambda Expresion / Lambda(람다) 식 사용법

8. Array () (рус)

  • Creating an empty array / 빈 배열 만들기
  • Storing data into array / 배열에 데이터값 저장하기
  • Read data from array / 배열에서 데이터 읽기(불러오기)

9. Loops () (рус)

  • WHILE loop / WHILE 반복문
  • FOR loop / FOR 반복문
    • Iterating Collection / Collection 형식의 변수 순회법
    • #BREAK executor / #BREAK 실행자
    • #CONTINUE executor / #CONTINUE 실행자

10. Sync Mode () (рус)

  • #CANCELEVENT executor / #CANCELEVENT 실행자
  • Setting Sync/Async Mode / 동기, 비동기 모드 전환
    • Custom Trigger
    • Area Trigger

11. Custom Executors () (рус)

12. Plugin Access () (рус)

  • Check And Use / 플러그인 존재여부 확인
    • Get Third Party Plugin / 제 3자 플러그인 불러오기
    • Check Eligibility / 호환성 확인하기
    • Use the Plugin / 플러그인 사용하기

13. IMPORT Statement () (рус)

  • Creating new instance / 새 인스턴스 생성하기
  • Accessing static method / 종속 메소드 불러오기
  • Accessing static field / 종속 Enum 불러오기

14. IS Statement () (рус)

  • Understanding / 이해하기
    • Understanding Instance / 인스턴스 이해하기
    • Understanding Superclass / 부모클래스 이해하기
    • Understanding Subclass / 자식클래스 이해하기
  • Using IS Statement / IS조건연산자 사용하기

15. TRY-CATCH Statement () (рус)

  • Understanding TRY-CATCH Exception Handling / TRY-CATCH 예외처리 이해하기

Misc

16. Interface Casting () (рус)

module x.x does not "opens x.x" problem

  • List of Custom Events

Examples

Trigger

Trigger Example () (рус)

More Examples: Bukkit, Sponge

Case Specific

Clone this wiki locally