마인크래프트/팩/데이터팩

역사 raw
대문 랜덤 문서 최근 토론


1. 개요2. 제작
2.1. 폴더 구조2.2. pack.mcmeta2.3. functions
3. 기능
3.1. 구조물3.2. 드롭 아이템[anchor(loot_tables)]3.3. 발전 과제3.4. 조합법3.5. functions3.6. 술어3.7. 차원
3.7.1. dimension_type‌
3.8. 생물 군계3.9. 아이템 수정자
4. [[마인크래프트/데이터팩/목록|목록]]

1. 개요

데이터팩은 마인크래프트의 데이터들을 바꿀 수 있는 시스템이다. 스냅샷 17w43a부터 추가되었다. 모드 필요 없이 발전 과제, 함수, 드롭 아이템, 구조물, 조합법, 태그를 바꾸거나 추가할 수 있다. 맵 폴더 안에다가 data라는 이름의 폴더를 또 추가하여 폴더 형식의 데이터팩을 넣은 다음 /datapack 명령어로 활성화하면 된다.

2. 제작

데이터 팩 파일은 .minecraft/saves/(월드)/datapack에다 파일을 만들어야 한다. 폴더 이름은 라틴 문자로 지어야 한다. 그리고 data 폴더 안에 또 namespace라는 폴더를 만들어야 한다. 만약에 main이라는 폴더를 만들었을 경우 functions로 예를 들자면 function main/함수 이름이다.

예를 들어.
world 라는 이름의 세계에 나만의 조합법을 만들어서 플레이하고 싶다면
world > datapacks > (파일이름) > data > crafting > recipes > 원하는 조합법.json
이렇게 넣어야만 데이터팩을 사용할 수 있다.

2.1. 폴더 구조

【폴더 구조 열기】

  • (데이터팩 이름)
    • pack.mcmeta
    • pack.png
    • data
      • (namespace)
        • advancements
          • (advancement).json
        • functions
          • (function).mcfunction
        • loot_tables
          • (loot_table).json
        • predicates
          • (predicate).json
        • recipes
          • (recipe).json
        • structures
          • (structure).nbt
        • tags
          • blocks
            • (tag).json
          • entity_types
            • (tag).json
          • fluids
            • (tag).json
          • functions
            • (tag).json
          • items
            • (tag).json
        • dimension_type‌
          • (dimension type).json
        • dimension
          • (dimension).json
        • worldgen
          • biome
            • (biome).json
          • configured_carver
            • (configured_carver).json
          • configured_feature
            • (configured_feature).json
          • configured_structure_feature
            • (configured_structure_feature).json
          • configured_surface_builde
            • (configured_surface_builder).json
          • processor_list
            • (processor_list).json
          • template_pool
            • (template_pool).json
        • item_modifiers(1.17 JE)
          • (item_modifiers).json(1.17 JE)

2.2. pack.mcmeta

데이터팩 파일 안에는 pack.mcmeta라는 파일을 만들어 주면 된다. 이 파일은 JSON 형식으로 되어있는데, 리소스팩 제작 때 필수로 넣어야 하는 것이다. 이 과정에서 오류가 발생하면 데이터팩을 불러오지 못한다. 파일 확장자명이 안 보인다면 윈도우 기준으로 파일 탐색기에서 위에 있는 보기를 눌러준 다음에 파일 확장명을 체크 표시해주면 된다. 이 과정이 정상적으로 끝마치면 이 코드를 작성하면 된다.

{
    "pack": {
        "pack_format": 5,
        "description": "TEST Data pack"
    }
}

만약에 파일이 열리지 않는다면 연결 프로그램을 메모장 등으로 바꿔주어야 한다.

JE 1.13에서는 "pack_format"의 숫자를 3으로 설정해주어야 한다. 1.14는 4, 1.15는 5, 1.16.2는 6이다. 참고로 "description"는 이 데이터팩의 설명을 써놓는 곳이다.

2.3. functions

1.12 때 function 다뤄봤다면 간단하다. functions 폴더를 namespace 폴더 안에다가 만든 후, 거기다가 1.12때 function 만들 때와 같이 파일을 제작한다. 파일 확장명은 .mcfunction으로 해야한다. functions를 다루지 못한다면 function 도움말을 보자.


3. 기능

3.1. 구조물

이 구조물이 아니고 구조물 블록에 쓰이는 구조물이다.

3.2. 드롭 아이템

몹과 블록의 드롭 아이템과 구조물의 상자에 있는 아이템을 바꿀 수 있다. 또한 이것과 loot 명령어를 활용한다면 give 명령어 보다 더 많은 것을 구현 할 수 있다. 단, 일부 블록(기반암, 엔드 차원문 틀 등)의 경우 아이템을 얻을 수 없도록 하드코딩 되어 있으므로 드롭 아이템을 추가하더라도 아이템이 드롭되지 않는다.

  • 형식: Compound
    • type - 형식: String
    • pools - 형식: List
      • 형식: Compound
        • conditions - 형식: List
          • 형식: Compound
            • condition - 형식: String
        • functions - 형식: List
          • 형식: Compound
            • function - 형식: String
            • conditions - 형식: List
              • 형식: Compound
                • condition - 형식: String
        • rolls - 형식: Int
        • rolls - 형식: Compound
          • min - 형식: Int
          • max - 형식: Int
        • bonus_rolls - 형식: Float
        • bonus_rolls - 형식: Compound
          • min - 형식: Float
          • max - 형식: Float
        • entries - 형식: List
          • 형식: Compound
            • conditions - 형식: List
              • 형식: Compound
                • condition - 형식: List
          • type - 형식: String
          • name - 형식: String
          • children - 형식: List
          • expand - 형식: Boolean
          • functions - 형식: List
            • 형식: Compound
              • function - 형식: String
              • conditions - 형식: List
                • 형식: Compound
                  • condition - 형식: String
          • weight - 형식 - Int
          • quality - 형식 - Int

3.3. 발전 과제

발전과제를 추가하고 이름과 달성 목표, 경험치를 바꿀 수 있다.

이 사이트에서 쉽게 생성할 수 있다.

3.4. 조합법

조합법을 바꿀 수 있다. 키에 아이템을 설정해 놓고 패턴에서 그 키로 조합하는 것이다. 다만 아쉽게도 NBT는 지원 안한다.
NBT를 적용시킬 때에는 얻을 수 없는 아이템을 주고 그 아이템을 삭제한 뒤에 NBT가 적용된 아이템을 주는 방식으로 제작하면 된다.
예시를 들면 다이아몬드 곡괭이의 경우 ' '은 빈 공간, X는 다이아몬드, #은 막대기라고 했을 시 패턴에서
{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}

라고 쓰면 다이아몬드 곡괭이의 조합법이 완성되는 것이다.

원하는 조합법을 쉽게 만들 수 있는 외국 사이트가 있다. 사이트

3.5. functions

1.12에는 data 폴더에 있는 functions 폴더에다가 넣으면 되지만 1.13부터는 datapack을 사용해 함수를 제작해야 한다.

3.6. 술어

1.15부터 생겼으며 data 폴더에 있는 predicate 폴더에 만들면 된다.

시작 - 형식: Compound
condition - 형식: String - condition의 ID 이다.
condition의 다른 부분 (아래에)

alternative
  • terms - 형식: List
    • terms - 형식: Compound

block_state_property
  • block - 형식: String - 블록의 ID이다.
  • properties - 형식: Compound

damage_source_properties - 데미지의 속성을 확인한다.
  • is_explosion - 형식: Boolean - 폭발
  • is_projectile - 형식: Boolean - 발사체
  • is_fire - 형식: Boolean - 화염
  • is_lightning - 형식: Boolean - 번개
  • is_magic - 형식: Boolean - 마법
  • bypasses_magic - 형식: Boolean - 배고픔에만 해당.
  • bypasses_invulnerability - 형식: Boolean - 공허 피해에만 해당.
  • bypasses_armor - 형식: Boolean
  • source_entity - 형식: Compound
    • (모든 엔티티와 같다.)
  • direct_entity - 형식: Compound
    • (모든 엔티티와 같다.)

entity_properties
  • entity - 형식: String - 조건을 확인할 엔티티를 지정한다.
    • predicate - 형식: Compound
      • flags - 형식: Compound
        • is_on_fire - 형식: Boolean - 화염 여부 테스트.
        • is_sneaking - 형식: Boolean - 웅크리기 여부 테스트.
        • is_sprinting - 형식: Boolean - 달리기 여부 테스트.
        • is_swimming - 형식: Boolean - 수영 여부 테스트.
        • is_baby - 형식: Boolean - 아기 변형 여부 테스트.
    • (모든 엔티티와 같다.)

random_chance
  • chance - 형식: Float - 성공확률를 정한다. 1이 100%이다. 50%확률로 성공할려면 0.5.

weather_check
  • raining - 형식: Boolean - true이면 비가 올 때 성공한다.
  • thundering - 형식: Boolean - true이면 천둥이 올 때 성공한다.

예시:
플레이어 웅크리기 감지
파일 경로: .minecraft\saves\<맵 이름>\datapacks\<데이터팩 이름>\data\<namespace>\predicates\<파일 이름>.json
  {
    "condition": "minecraft:entity_properties",
    "predicate": {
	"flags": {
		"is_sneaking": true
	}
    },
    "entity":"this"
}
50% 확률로 명령어 실행
{
    "condition": "minecraft:random_chance",
    "chance": 0.5
}


3.7. 차원

1.16부터 생겼으며 data 폴더 안에 minecraft 폴더 안에 dimension , dimension_type 폴더 만들면 된다. 그 폴더 안에 영어 소문자 _ 로만 차원 이름을 적고 .json을 만들면 된다.

추가된 차원을 가고 싶다면 execute in <추가된 차원> run tp @s ~ ~ ~로 가면 된다.

완전한 평지 엔드 버전
{
      "generator": {
        "settings": {
          "structures": {
            "stronghold": {
              "distance": 32,
              "spread": 3,
              "count": 128
            },
            "structures": {}
          },
          "layers": [
            {
              "height": 1,
              "block": "minecraft:bedrock"
            },
            {
              "height": 3,
              "block": "minecraft:end_stone"
            }
          ],
          "biome": "minecraft:the_end"
        },
        "type": "minecraft:flat"
      },
      "type": {
    "ultrawarm": false,
    "natural": true,
    "coordinate_scale": 1.0,
    "piglin_safe": false,
    "respawn_anchor_works": false,
    "bed_works": false,
    "has_raids": true,
    "has_skylight": false,
    "has_ceiling": false,
    "ambient_light": 0.0,
    "fixed_time": 6000,
    "logical_height": 256,
    "infiniburn": "minecraft:infiniburn_end"
  }
}

3.7.1. dimension_type‌

차원 타입을 설정하는 곳 기본값은 차원마다 다르다.
설명
overworld
the_nether
the_end
ambient_light
빛의 양
0.0
0.1
0.0
bed_works
플레이어가 침대에 누을 수 있을지 여부, false일 시 폭발
true
false
false
coordinate_scale
각 월드 당 좌표 스케일. 오버월드 1블록 움직임은 네더에서 8블록 움직인 것과 같다.
1.0
8.0
1.0
fixed_time
선택 사항 0에서 24000사이 정수이다. 오버월드 처럼 하루를 만들고 싶다면 이것을 제거하면 된다.
(비어있음)
18000
6000
has_ceiling
기반암 천장이 있는지 여부
false
true
false
has_raids
습격을 일으킬 수 있는지 여부
true
false
true
has_skylight
오버월드처럼 낮에 하늘에 광원이 있는지 여부
true
false
false
height(1.17 예정)
설치 가능한 높이를 정한다. 256부터? 2032 사이 정수값이다.
256
256
256
infiniburn
무한히 불을 태울 수 있는 블록 태그
minecraft:infiniburn_overworld
minecraft:infiniburn_nether
minecraft:infiniburn_end
logical_height
블록 높이 제한, has_celling이 true면 해당 값의 y좌표에 기반암 천장이 생긴다.
256
128
256
natural
false이면 나침반이 무작위로 회전, true이면 네더 차원문이 좀비화 피글린 생성한다.
true
false
false
piglin_safe
피글린이 좀비화 피글린으로 변하지 않는 여부 true이면 생존.
false
true
false
respawn_anchor_works
플레이어가 리스폰 정박기를 사용할 수 있을지 여부, false인 상태로 사용시 폭발
false
true
false
ultrawarm
차원이 네더처럼 작동[2]하는지 여부
false
true
false


3.8. 생물 군계


1.16.2부터 추가된 기능. 모드에만 있을줄 알았던...

3.9. 아이템 수정자

1.17부터 추가된 기능. /Item ... modifier 명령어를 사용할 때 쓰인다.

더 많은 내용은 마인크래프트 영어 위키로 가면 된다.

시작 - 형식: Compound
function - 형식: String - function의 ID 이다.
function의 다른 부분 (아래에)

limit_count
  • limit: 사용할 정확한 제한을 지정한다.

looting_enchant
  • count: 약탈 레벨당 추가 아이템 수를 지정한다. 숫자는 소수점 일 수 있으며 약탈 레벨을 곱한 후 반올림된다.
  • limit: 약탈 계산 후 스택에 있는 최대 아이템 수를 정한다. 값이 0이면 제한이 적용되지 않는다.

set_damage - 도구의 내구도를 수정한다.
  • damage: Number provider. 설정할 내구도 비율을 지정한다 (1.0은 손상되지 않음, 0.0은 내구도 없음).
  • add(JE 1.17) :선택 사항. 만약 true이면 현재 내구도에 비례하여 변경된다.

set_lore - 아이템에 설명을 추가한다.
  • lore

set_name - 아이템의 이름을 설정한다.
  • name
예시:
아이템 10개로 쌓기
파일 경로: .minecraft\saves\<맵 이름>\datapacks\<데이터팩 이름>\data\<namespace>\item_modifiers\<파일 이름>.json
[
{
  "function": "limit_count",
  "limit": 10
}
]
도구의 내구도가 절반으로 깎이며 이름이 NamuWiki인 아이템으로 변경
[{
"function": "set_damage",
"damage" : 0.5
},
{
"function": "set_name",
"name" : "NamuWiki"
}]
아이템의 이름과 설명, 무기 피해량은 무한으로 설정한다.
[{
"function": "set_name",
"name" : "Sword of the Universe"
},
{
"function": "set_lore",
"lore" : [
	{"text":"Oi you! Yes you."},
	{"text":"What are you looking at?"},
	{"text":"Yes this sword has ∞ damage."},
	{"text":"Kinda overkill? I'm lazy ok. (╯°□°)╯︵ ┻━┻"}
	]
},
{
"function": "set_attributes",
"modifiers" : [{
	"attribute": "minecraft:generic.attack_damage",
	"name": "",
	"amount": 9e99,
	"operation": "addition",
	"slot": "mainhand"
	}]
}]


4. 목록

[1] 물이 증발하거나 스펀지가 증발[2] 물이 증발하거나 스펀지가 증발