회원가입

로그인

이메일 주소
비밀번호
ID/PW 찾기
아직 회원이 아니신가요? 회원가입 하기

전역 변수 사용시 유용한 트릭!

Profile
wysohn

전역변수 란?

말그대로 어느 트리거에서나 사용 가능하고 또 서버 종료 후에도 유지되는 변수를 말합니다.

{"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

별로 어렵지는 않았죠? 위의 코드를 실행하면 csome 이 출력 될 것 입니다. 그게 ab 의 하위 노드들 이기 때문이죠!

혹은 getKeys() 의 반환값이 List 이기 때문에

myNodeAb = {"ab"}
#MESSAGE myNodeAb.getKeys(false).size()

라고 하면 2 가 출력 되는걸 볼 수 있을겁니다.

---

참고로 이 방법은 버킷에서만 가능하며 스폰지에서는 조금 다를 수 있습니다.

Profile
wysohn
레벨 8
510/512
99%
서명이 없습니다.
작성자의 다른 글
댓글
1
댓글 쓰기
권한이 없습니다.

개인이 자유롭게 강좌를 업로드하는 게시판입니다.

로그인

이메일 주소
비밀번호
ID/PW 찾기
아직 회원이 아니신가요? 회원가입 하기