개인 자료란 (JE)

  서버 커뮤니티

Profile windy_wind 대표칭호 없음
Profile

강좌 자바 에디션(JE) 플러그인 꿀팁

스크립트에서 reflect를 이용해 yaml(yml) 사용하기

2025.02.09 조회 수 281 추천 수 0
분야 플러그인 
장르 서버 관리자 툴, 개발자 툴, 재미, 정보전달 
게임버전 모든버전, 1.19.x, 1.20.x, 1.21.x 
API 페이퍼 

이전에는 skript-yaml 에드온을 사용하여 간편하게 yaml을 조작할 수 있었습니다.

하지만 고버전으로 올라오면서 이 에드온이 호환되지 않아 사용할 수 없었습니다.


하지만 skript-reflect 에드온을 이용하면 skript-yaml 에드온 없이 yaml을 조작할 수 있습니다! 

그 사용하는 방법을 돈 스크립트로 소개해 보겠습니다.

(yaml을 쓰는 이유는 아래에 있습니다)



일단 yaml을 쓰기전에 필요한 기능을 import를 해줍시다 (reflect 에드온 필요)

(JsonUtil은 import 안해도 상관없습니다)

위와 같이 따라하셨다면 이제 yaml 기능을 쓸 준비는 다 되었으니, 이제부터 본격적으로 사용하는 방법을 소개해보겠습니다.



 yaml을 쓸때에는 file이 필요합니다. file을 통해서 yaml에 저장할 값들을 넣어주고 저장하기 때문에 우선 저희는 file을 만들 필요가 있습니다. file은 경로(path)를 통해서 만들 수 있는데 밑에 있는 사진이 yaml에 필요한 file을 만들고 return하는 과정입니다. 아래는 폴더를 만들고 그 만든 폴더에서 yaml 파일을 생성해주는 function입니다. 

 위에서 {_path} 부분에 text 형식으로 파일 경로를 설정해주고 있습니다. 파일 경로는 여러분이 원하는대로 정할 수 있는데, 만약 경로를 'myfolder 폴더 → NiceSkript 폴더' 안에서 yaml을 생성하고 싶다면  저 {_path} 부분을 "myfolder\NiceSkript"로 작성하면 되는거죠. 하지만 저는 스크립트 플러그인 파일에서 yaml 파일을 만드는 것이 관리하기 효과적이라고 생각하여 위와 같이 작성하였습니다. 

 new File({_path})후 파일을 {_folder}.mkdirs()을 통해서 폴더를 생성을 해주면, yaml을 그 안에서 생성하기 위해 new File({_folder}, "yaml이름") 을 통해 원하는 이름으로 yaml을 만들어줍니다. 그 후 그 {_file}을 return 해주고 있습니다.



 그 다음으로 이렇게 만든 yaml 파일을 값을 저장해주기 위해 사용하는 function을 살펴보겠습니다. 

돈을 설정해주는 function인데요, 앞에서 만들었던 함수를 통해 file을 {_file} 변수에다가 가져와주고 처음에 import 해준 YamlConfiguration을 loadConfiguration() 메소드를 통해서 설정할 yaml을 {_yaml} 변수에다가 담아줍니다. 값을 저장할때는 {_yaml}.set("key", "value")로 저장할 수 있습니다. 이때 set() 안에서의 "key"와 "value"는 yaml에서 key: value 형식으로 저장됩니다. 예를 들어 set {돈::%uuid of player%} to 10을 yaml으로 저장한다고 할때  {_yaml}.set(uuid of player, 10)을 통해 저장할 수 있고 yaml에서 플레이어의 uuid: 10 이런 형식으로 값이 만들어집니다. (밑에서 자세히 설명합니당)
이때 value에는 웬만한 데이터 형식은 모두 저장됩니다.

set()을 통해서 값을 모두 저장했다면 {_yaml}.save({_file})을 통해서 yaml 파일을 저장해야지 값들이 설정된 것도 함께 저장됩니다. (값 설정한 yaml을 파일에 저장하는 것)  


 밑에는 위에서 설정된 값들을 호출하는 것입니다. yaml의 값을 가져올때는 {_yaml}.get("key")로 가져오는건데요, 위에서 uuid로 key를 설정했기 때문에 {_key}를 플레이어 uuid로 하고{_yaml}.get({_key})로 그 플레이어의 uuid로 저장된 값을 가져오는 function입니다. 

  

밑에는 실제로 커맨드로 앞서 살펴본 function들을 사용하는 구문입니다. 

밑에 명령어를 보면 먼저 초기값을 위에서 설정해주고

펑션들을 사용하고 있는 모습입니다. (스크립트 뜯어서 한번 보세용~)


 자 그럼 이제 인게임에서 명령어를 사용해서 동작하는 것을 실제로 볼까요?


(파일 잘 있다고 가정할때) 월래는 이렇게 yaml에 아무값도 안 적혀 있는데


/돈 set CodeName_Null 1000을 하였더니.


이런식으로 플레이어의 uuid형식으로 값이 저장되어 있는 것을 확인할 수 있습니다.  


사실 원래 파일이 생성되어 있지 않아서 처음에 확인하지 못할 것인데, 위에 명령어를 실행하면 파일이 생성되므로 yaml과 그 안에 값들을 확인할 수 있습니다. 경로는 다음과 같습니다.


 여기서 우리는 궁금증이 생깁니다. 이런식으로 yaml에다가 값들을 저장하고 쓸 수 있지만 구지 스크립트 변수를 안쓰는 이유는 무었일까요? 그 이유는 밑과 같습니다.

1. 스크립트 변수도 결국 위에 variables.csv에다가 저장됩니다. 따라서 저는 개인적인 생각이지만 yaml에다가 저장한 것과 차이가 별로 없을 것이라고 생각되어 성능상 별로 차이가 없다고 생각됩니다.


2. 여러가지 데이터 형식을 많이 사용할 수 있기 때문입니다. 이건 굉장히 중요한 이유인데요, 처음에 Json을 import 하는 이유가 {"key":"value"} 처럼 객체 형식이나 list 형식 등등을 써서 여러가지 값을 한번에 불러올 수 있기 때문입니다. 스크립트에서 {변수}에다가 이러한 데이터 형식을 저장할 수 없지만(서버 꺼지면 사라짐) yaml은 이런 용이한 변수를 쓰레기로 만들어 버리지 않죠. 


3. 이것도 굉장한 이점인데, 실시간으로 값을 수정할 수 있다는 점입니다. 더불어 값을 "직접" 수정할 수 있다는 점도 있는데, 밑에 사진을 한번 보면 1000원이 설정되어 있는 yaml에서    

이렇게 "직접" 10101로 값을 수정해주고

커맨드로 돈을 확인해주면

10101원으로 "직접" 수정한 내용이 "바로바로" 반영된다는 점입니다.



 이러한 이유들로 yaml을 사용하면 기존 스크립트에 있는 형식에 얽매이지 않고 더 효과적으로 변수를 관리 및 사용하여 효율적인 구문을 작성할 수 있습니다. 물론 단점도 있지만, 이런 기능도 한번 알아두고 쓰는 것도 스크립트 쓴느 당신의 코딩 실력에도 향상을 줄 수 있으니 한번씩 사용해보시길 바랍니다. 밑에 돈 스크립트를 첨부하였으니 한번 코드 뜯어보시고 사용해보세요. 궁금한 점에서는 댓글 부탁드립니다.  money.zip 


이 글은 우마공 자료를 참고하여 독학한 내용을 토대로 설명드려서 잘못된 내용이 포함될 수 있겠지만 거의 없을껄요?




Warning
댓글이 없습니다.

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

뉴스 및 창작물
/files/thumbnails/729/017/004/262x150.crop.jpg?20250326233109

업데이트

마인크래프트 자바 1.21.5 출시 (Minecraft Java 1.21.5 Released): 한국어 번역본

updater

2025-03-26

0

/files/thumbnails/202/016/004/262x150.crop.jpg?20250323230938

소식

Minecraft LIVE - 2025 March 내용 요약

노을넴

2025-03-23

1

/files/thumbnails/103/015/004/262x150.crop.jpg?20250321164817

업데이트

마인크래프트 1.21.5 릴리스 후보 (Minecraft 1.21.5 Release Candidate 1): 한국어 번역본

updater

2025-03-21

0

/files/thumbnails/612/009/004/262x150.crop.jpg?20250319182233

업데이트

마인크래프트 1.21.5 프리릴리스 (Minecraft 1.21.5 Pre-Releases): 한국어 번역본

updater

2025-03-12

0

/files/thumbnails/166/005/004/262x150.crop.jpg?20250306005107

업데이트

마인크래프트 스냅숏 25w10a (Minecraft Snapshot 25w10a): 한국어 번역본

updater

2025-03-06

0

/files/thumbnails/777/001/004/262x150.crop.jpg?20250301203925

모드

Create 6.0 업데이트 3

BMlight

2025-03-01

3

/files/thumbnails/378/000/004/262x150.crop.jpg?20250227221249

업데이트

마인크래프트 스냅숏 25w09b (Minecraft Snapshot 25w09b): 한국어 번역본

updater

2025-02-27

0