데이터팩 입문 (이전이전 글)
https://gall.dcinside.com/minecraft/167112%2526referrerAllArticles%3Dtrue
데이터팩 입문 2 (이전 글)
https://gall.dcinside.com/minecraft/167137%2526referrerAllArticles%3Dtrue
이전 글에서 이어지는 내용임!(정확히는, 접점은 없는데 이전 글을 안 보면 이해가 어려울 내용들이 있을 수 있음!)
이 글에선 무엇을 다루나!
1. 그림(painting_variant)
2. 함수 매크로(macro)
3. 술어(predicate)
* Ctrl+F(단어 찾기)로 쉽게 이동할 수 있음!
그림(painting_variant)
말 그대로 그림 추가임! 사실 이건 너무 쉬워서 설명할 게 많이 없음. 대신 이건 데이터팩만으로는 할 수 없고, 리소스팩의 도움이 좀 필요함.
우선 resources > assets > minecraft > textures > painting 경로에 사진 하나를 추가함. 이때 사진의 가로세로 비는 웬만하면 가장 단순한 정수비로 표현했을 때 한 쪽이 10을 넘지 않는 게 나음.("나는 큰 그림이 만들고 싶다!"하면 해도 괜찮음)

위 사진은 예시인데, 보다시피 가로세로의 비가 2:1인 것을 알 수 있음.
이제 사진은 넣었고, 이걸 그림으로 만들어야 하겠지? 리소스팩 쪽은 이제 딱히 만질 건 없고, 데이터팩으로 넘어와서 painting_variant 폴더에 아래 코드가 들어간 json 파일을 넣어주면 된다.
{
"asset_id": "minecraft:<사진의 파일명>",
"author": {
"color": "gray",
"translate": "<작가 이름>"
},
"height": <세로 높이>,
"title": {
"color": "yellow",
"translate": "<그림 이름>"
},
"width": <가로 넓이>
}
위 코드는 마인크래프트 기본 painting_variant 파일의 템플릿인데, asset_id에는 아까 리소스팩에 추가한 사진 파일의 파일명이, height과 width에는 마크 내에서 그림이 몇 블록의 크기일지가 들어간다.
title은 마크 내에서 그 그림의 이름이 무엇일지, author은 작가가 누구인지에 대한 값인데 이 둘은 딱히 중요하진 않음.
아래는 예시임.

아까 그 주기율표 사진에 대한 파일이고, author 값이 이상할 텐데 그건 그냥 다른 그림(pond)의 코드를 복붙한 뒤에 조금만 수정해서 만든 코드이기 때문임(?)
함수 매크로(macro)
커맨드 블록이 함수를 뛰어넘을 수 없는 가장 큰 이유라고도 할 수 있는 기능이지!
이건 함수(function)의 기능인데, 쓰는 법이 굉장히 쉬움! 그냥 명령어 앞에 $를 붙이고 원하는 부분을 $(<변수>)로 바꿔주기만 하면 된다!
/function custom:ex {gg:"hello"}
===== custom:ex =====
$say $(gg)
위에 있는 예시처럼 custom:ex라는 함수에 저 코드를 넣고 위 명령어를 실핼시키면면
[@] hello
가 출력될거임! 그러니까, say hello라는 명령어에서 앞에 $를 붙이고 뒤에 hello 부분을 $(<변수>)로 바꾼 뒤에 그 변수값을 hello로 지정해주고 실행시키게 되면 똑같은 결과가 나온다는 거지!
게다가 변수에는 엔티티, 블록, 스토리지의 데이터도 넣을 수 있대! (중괄호 대신 with를 써서 입력 가능)
이걸로 여러가지를 만들 수 있겠지? 스테이지마다 다른 보상을 준다던가, 스토리지에 데이터들을 넣어서 execute if 노가다를 하지 않는다던가...
술어(predicate)
술어는 특정 명령어를 실행시킬 때의 조건임. 얘는 어떤 일을 하냐면, execute if predicate 할 때 그 predicate 값에 여기서 미리 설정한 값을 겋을 수 있음. 예를 하나 들어서 보여주자면,
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"type_specific": {
"type": "minecraft:player",
"input": {
"sneak": true
}
}
}
}
이건 플레이어가 웅크리고 있는지를 확인하는 술어임. 저 술어가 custom:sneak라고 하면,
execute as @a if predicate custom:sneak run say "웅크리기"
와 같이 쓸 수 있고, 이는
execute as @a if predicate {"condition": "minecraft:entity_properties","entity": "this","predicate": {"type_specific": {"type": "minecraft:player","input": {"sneak": true}}}} run say "웅크리기"
와 완전히 같음. 그러니까, 명령어에 하나하나 쓰기 귀찮으니 미리 데이터팩에 저장해놨다가 나중에 꺼내쓰는 개념이라 생각하면 된다!
그리고 보다시피 사람 손으로 직접 만들기는 되게 불편해 보이지?! 이것도 사이트 통해서 만드는 걸 추천함. https://misode.github.io/predicate/
condition에 대해서 설명을 해보자면, 일단 condition은 위의 예시 코드에서 가장 위에 있는 거거든? 예시에서는 저기에 entity_properties라는 값이 들어가 있는데, 이게 술어를 어떤 목적으로 쓸 지를 결정하는 거라고 생각하면 된다.
condition들 중에 몇 가지에 대해 설명을 하면,
· all of : AND 게이트. 이걸 선택하면 다른 condition들을 또 여러 개 선택할 수 있는데, 이 condition들이 모두 참이어야만 참을 출력한다.
· any of : OR 게이트. all of처럼 다른 condition들을 선택해서, 그 중에 하나만 참이어도 참을 출력한다.
· entity properties : 엔티티의 정보가 이것과 일치하면 참을 출력한다.
· random chance : chance 값의 확률로 참을 출력한다.
사실 다룰 줄 아는 술어가 저것밖에 없어서 저것만 설명했음(?) 어차피 이건 입문용이니 자세히 설명할 필요는 없지(??) 마인크래프트에서 직접 실행하면서 알아가시면 누구나 쉽게 쓸 수 있을 거임!
乃
최근에 맵을 못 만드니 심심해서 그냥 없는 지식으로라도 [커맨드 자료] 게시판에 글을 많이 올렸는데, 이제 맵 제작할 때 데이터팩 쓸 만한 건 다 다뤄버려서 다룰 게 없노(인챈트 추가는 맵 제작에 잘 안 쓰이고, worldgen 쪽은 좀 복잡해서 나도 잘 몰라서 + 다이얼로그는 지금 마크 못 들어가서 안 다뤘음).
어쨌든 이 글을 보고 데이터팩을 쓰는 사람들이 많아졌으면 좋겠노 :)

다이얼로그 (입문자가 할 건 절대 아님) 어디갓냐
:(
아니 어차피 선생님은 이미 잘 쓰시잖음 ㅋㅋㅋㅋ
:< 난 과대평가임..
에이 뭐 다이얼로그는 다른 사람이 따로 다뤄주겠지(?)
다이얼로그 대신 똥맵 강의는 어떠냐
그건 이미 이 분야 GOAT가 하나 올렸던데 https://gall.dcinside.com/minecraft/80680
링크가 연결이 안 되는데 설마 그 "전문가"이냐
어... 왜 연결이 안 되지... 아무튼 생각하는 그 게이가 맞을 거임
그게이 벤당한거 아님?
아! 생각한 그 게이가 아닐 거임(?)
데이터팩 살짝 해봤는데 어렵드라구 ㅎ
허억! 내 노력이.....
글 잘적어줘서 이해가 잘되었음 ㅎ
고맙다!