생방송 보니까 데이터팩을 꺼려하는 사람들이 꽤 보이더라고? 사실 데이터팩이 그렇게 어려운 게 아니라서 나도 하루만에 입문해서 맵에 있던 커맨드 블록들을 전부 데이터팩으로 옮겨버린 전적이 있기 때문에 이 쉽고도 좋은 걸 알려주고자 이 글을 쓰게 되었음.


무현이 성기만지기 서버 오픈 - 마인크래프트 갤러리

20.09.5.23 무현이스킨을 않끼면 벤입니다

gall.dcinside.com


그리고 쓰려다가 알게 됐는데 이미 데이터팩 입문 글을 올린 게이가 있더라고?! 폴더 생성이나 함수 쪽은 저기에 더 잘 설명이 돼있기도 하고, 여기서 다룰 것들도 저 글과 많이 겹치니 웬만하면 저 글을 보는 게 도움이 더 될 거임!


이 글에선 무엇을 다루나!


0. 폴더 생성

1. 함수(function)

2. 발전과제(advancement)

3. 조합법(recipe)

* Ctrl+F(단어 찾기)로 쉽게 이동할 수 있음!


폴더 생성

일단 기본적인 구성은 마인크래프트의 data 폴더를 그대로 따름. 다른 점은 pack.mcmeta를 써야한다는 점과 몇몇 기능은 못 쓴다는 점? 그정도 말곤 없을 거임.


들어가기에 앞서서 먼저 내가 쓰는 데이터팩 템플릿을 주고 시작할게!


첨부파일
데팩 템플릿.zip
파일 다운로드


먼저 pack.mcmeta를 작성해야 하는데, 여기에도 사실 filter이라는 기능이 있거든? 근데 입문 글에 이런 거 쓰면 다 나갈 테니까 이건 패스하고, 단순하게 필수로 써야하는 것만 적으면 이거임.


{

"pack": {

"pack_format": 71,

"description": "데이터팩"

}

}



pack_format은 데이터팩의 버전을, description은 데이터팩 설명을 나타낸다. description은 별로 필요없고(?), pack_format은 버전마다 달라진다는 것만 알면 된다. 71은 1.21.5 버전 용이고 다른 버전들은 마인크래프트위키나 나무위키에 적혀있으니 그거 참고하면 된다.

사실 filter을 안 쓰면 pack.mcmeta는 별로 중요하지 않음. 대충 버전만 맞추면 되는 거니 다음으로 넘어가자!


이제 namespace를 정해야 하는데, 원래 기본 마크 data 폴더에서 minecraft 폴더가 있지? 그 minecraft도 namespace라고 보면 된다. 대충 아무 이름이나 적으면 되는데 대문자나 영어 알파벳이 아닌 문자는 쓸 수 없는 걸로 알고 있음.


a15714ab041eb360be3335622983746f17de87697c8bd88545d398e6302ea6c25850f80c08e05c4240a5e939


내가 준 폴더의 이 위치가 namespace의 위치임! 저 custom이 내가 임의로 설정한 namespace고!



함수(function)

함수는 여러 명령어 묶음을 한 번에 실행시켜주는 기능임! 물론 여러 업데이트를 거치면서 그 이상의 위상을 가지게 되긴 했는데, 일단 여기서는 함수의 기본적인 부분이랑 함수 태그만 다룰게!


함수를 쓰는 법은 되게 쉬움! 그냥 확장명이 mcfunction인 파일에 명령어를 '/' 없이 붙여넣기만 하면 됨! 간단한 예시를 보여주자면,


execute as @a at @s if block ~ ~-0.1 ~ minecraft:emerald_block run title @a title {text:"클리어 축하한다!",color:dark_aqua}

execute as @a[tag=!clear] at @s if block ~ ~-0.1 ~ minecraft:emerald_block run playsound minecraft:entity.firework_rocket.launch weather @a ~ ~ ~ 1 1

execute as @a[tag=!clear] at @s if block ~ ~-0.1 ~ minecraft:emerald_block run tag @a add clear

execute as @a[tag=clear] at @s unless block ~ ~-0.1 ~ minecraft:emerald_block run tag @a remove clear


이건 에메랄드 블록 위에 올라가면 클리어 메세지와 함께 폭죽 소리가 나오는 함수임.

확실히 커맨드 블록보다 만들도 편하고 수정하기도 편해 보이지?!


그럼 이제 함수 태그에 대해 설명하겠음. 경로는 minecraft > tags > function 이고, 여기에 tick과 load라는 태그를 추가할 수 있음.

tick은 설정한 함수가 매 틱마다 실행되도록 하는 태그고, load는 맵이 로드되거나 reload 명령어를 입력했을 때 실행되도록 하는 태그임.


{ "values": [


"custom:tick"


] }


이건 예시고, 저렇게 values 안에 원하는 함수 이름을 적으면 끝임! 쉽지? 이것만 알면 이제 인생에서 커맨드 블록을 영원히 다시 안 봐도 된다!



발전과제(advancement)

말 그대로 발전 과제임. 이건 스스로 만드는 건 개인적으로는 불가능하다 생각하고, 사이트에서 만드는 게 일반적임.

(발전 과제 만드는 사이트 :https://misode.github.io/advancement/)


꼭 알아야 하는 걸 알려주자면,

1. 하나의 업적 묶음에 root라는 이름의 업적 파일은 필수적이다.

2. 파일명이 root인 업적의 icon은 그 업적 묶음 전체의 대표 아이콘이 된다.

3. 파일명이 root인 업적은 background를 입력해 그 업적 묶음의 배경사진을 설정할 수 있다.

4. 연결되는 업적을 만들고 싶다면 연결할 업적을 parent에 입력해 연결할 수 있다.


나머지는 사이트 만지면서 차차 알아가실 수 있을 거임! 아니면 마인크래프트 기본 발전 과제 파일을 보면서 알아가실 수도 있고!



조합법(recipe)

말 그대로 아이템 조합법임. 제작대의 조합법 뿐만이 아니라 화로, 대장장이 작업대, 모닥불 등의 모든 조합(?)법이 다 있음.

아무튼 바로 본론으로 가자면, 먼저 예시로 피스톤의 조합법 파일을 보여줄게.


{

"type": "minecraft:crafting_shaped",

"category": "redstone",

"key": {

"#": "minecraft:cobblestone",

"R": "minecraft:redstone",

"T": "#minecraft:planks",

"X": "minecraft:iron_ingot"

},

"pattern": [

"TTT",

"#X#",

"#R#"

],

"result": {

"count": 1,

"id": "minecraft:piston"

}

}


백문이 불여일견이라고, 사실은 저것만 이해하면 다른 설명은 별로 필요가 없을 거임.

type이나 category는 위키에 있기도 하고, 사이트(https://misode.github.io/recipe/)에 선택형으로 있어서 설명할 필요는 없...을 것 같고,

key는 pattern에 쓸 기호에 아이템을 지정해주는 거, pattern은 key에서 지정한 기호로 조합법의 형태를 만들어주는 거라고 생각하면 된다. 그리고 result는 조합을 하고 나면 나오는 아이템이고, 여기에 components도 붙일 수 있음.






입문용이라 글이 짧고 내용이 많이 없음! 이건 데팩을 안 쓰는 편식쟁이들에게 이게 얼마나 좋은지 알려주려고 쓴 글이기 때문에 막상 이 글만 보고 만들려고 하면 못 쓰는 기능이 많을 거임. 그러니 이 글을 보고 흥미를 느꼈다면 이 글에서 얻은 배경지식으로 다른 글들을 보면서 지식을 쌓으면 데이터팩을 잘 쓸 수 있게 될 거임!