전역변수 란?
말그대로 어느 트리거에서나 사용 가능하고 또 서버 종료 후에도 유지되는 변수를 말합니다.
{"ab.c.d.e"} = "hello trg!"
전역변수의 저장 방법
전역변수는 버킷API의 Configuration 시스템을 따와서 만들었습니다. 이전에는 버킷API에 의존했지만 최근에 GSON으로 업데이트 하면서 트리거 자체적인 시스템이로 바뀌었습니다. 사용법은 같습니다!
그럼 왜 이 이야기를 하느냐? 이 부분을 이해하시면 전역변수를 더 다채롭게 사용 할 수 있습니다.
노드
전역변수에는 '노드' 라는 개념이 있는데 그리 어려운건 아닙니다.
예를들어 위의 예제 {"ab.c.d.e"} = "hello trg!"
에서는 ab
가 하나의 노드로 취급됩니다.
실제로 vars.yml을 확인하시면
ab:
c:
d:
e: 'hello trg!'
라고 나오는 걸 볼 수 있습니다.
이처럼 하나의 값을 넣을 수 있는 공간을 '노드' 라고 합니다. 여기서 중요한점은 노드 안에도 노드를 넣을 수 있습니다
!
예제에서는 'c' 노드가 'ab' 에 들어가고 'd' 노드가 'c' 에 들어가고 'e' 노드가 'd' 에 들어가며 "hello trg!' 라는 문자열이 'e' 에 맵핑되어 있습니다.
ConfigurationSection
갑자기 영어가 나와서 당황하셨나요? ConfigurationSection이 사실상 노드와 같은 말 입니다. 다만 버킷API 에서 사용하는 정확한 이름이 ConfigurationSection 입니다.
그럼 이 ConfigurationSection (노드) 로 무엇을 할 수 있느냐?
예를들어
vars.yml을 확인하시면
ab:
c:
d:
e: 'hello trg!'
some:
thing: 'hey there'
라고 저장되어 있다고 칩니다.
그럼 지금 'ab' 노드에는 총 몇개의 노드가 저장되어 있을까요? 맞습니다 2개가 저장되어 있습니다.
그럼 이상태로 사용하려면 {"ab.c.d.e"}
나 {"ab.some.thing"}
정도로 사용 할 수 있을건데... 이 노드에 저장된 노드들을 직접 동적으로 가져올 수는 없을까요?
ConfigurationSection을 이용하면 가능 합니다. 자바독: https://hub.spigotmc.org/javadocs/bukkit/org/bukkit/configuration/ConfigurationSection.html
getKeys(boolean deep)
ConfigurationSection 중에 가장 유용하다고 할 수 있는 메소드 입니다. 왜냐?
먼저
myNodeAb = {"ab"}
이 코드를 작성하면 myNodeAb에 무엇이 저장될까요? 바로 'ab' 라는 노드가 저장됩니다! 그리고 이 노드의 타입은 ConfigurationSection 입니다. 이제 무엇을 해야 할 지 감이오죠?
myNodeAb = {"ab"}
FOR key = myNodeAb.getKeys(false)
#MESSAGE key
ENDFOR
별로 어렵지는 않았죠? 위의 코드를 실행하면 c
와 some
이 출력 될 것 입니다. 그게 ab
의 하위 노드들 이기 때문이죠!
혹은 getKeys() 의 반환값이 List 이기 때문에
myNodeAb = {"ab"}
#MESSAGE myNodeAb.getKeys(false).size()
라고 하면 2
가 출력 되는걸 볼 수 있을겁니다.
---
참고로 이 방법은 버킷에서만 가능하며 스폰지에서는 조금 다를 수 있습니다.
항상 감사합니다