마크 서버 데이터팩 적용 - makeu seobeo deiteopaeg jeog-yong

본론으로 돌아가서 이야기하자면, 데이터팩이라는 것은 대표적으로 Forge나 Rift같은 모드로더 없이도

마인크래프트에 없는 것들을 추가할 수 있게 해주는 아주 유용한 것인데, 1.13에 새로 추가된 기능입니다.

조합법을 추가하거나 추가할 수 있고, 새로운 아이템도 만들 수 있는 모드아닌 모드같은 파일인데,

이번엔 그 데이터팩을 적용하는 방법을 알려드리도록 할게요!

방법은 아주 간단합니다!

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

2. 제작[편집]

데이터 팩 파일은 .minecraft/saves/(월드)/datapacks에다 파일을 만들어야 한다. 폴더 이름은 라틴 문자로 지어야 한다. 그리고 data 폴더 안에 또

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
0에 해당하는 폴더를 만들어야 한다. 만약에
{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
1이라는 폴더를 만들었을 경우
{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
2로 예를 들자면
{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
3이다.

예를 들어,
world 라는 이름의 월드에 나만의 조합법을 만들어서 플레이하고 싶다면
.minecraft > saves > 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[편집]

데이터 팩 파일 안에는

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
4라는 파일을 만들어 주면 된다. 이 파일은 JSON 형식으로 되어있는데, 리소스팩 제작 때 필수로 넣어야 하는 것이다. 이 과정에서 오류가 발생하면 데이터 팩을 불러오지 못한다. 파일 확장자명이 안 보인다면 윈도우 기준으로 파일 탐색기에서 위에 있는 보기를 눌러준 다음에 파일 확장명을 체크 표시해주면 된다. 이 과정이 정상적으로 끝마치면 이 코드를 작성하면 된다.

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

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

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
5는 이 데이터 팩의 설명을 써놓는 곳이다.

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
6은 이 데이터 팩의 권장 버전이다. 값에 따라 권장 버전이 다르며, 그 값은 다음과 같다.

10

1.19 ~

9

1.18.2

8

1.18 ~ 1.18.1

7

1.17 ~ 1.17.1

6

1.16.2 ~ 1.16.5

5

1.15 ~ 1.16.1

4

1.13 ~ 1.14.4

2.3. functions[편집]

{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
2 폴더를
{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
0 폴더 안에다가 만든 후, 거기다가 파일을 만들어서 넣는다. 파일 확장명은
{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
9으로 해야한다.
{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    "XXX",
    " # ",
    " # "
  ],
  "key": {
    "#": {
      "item": "minecraft:stick"
    },
    "X": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:diamond_pickaxe"
  }
}
2를 다루지 못한다면 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 폴더에 만들면 된다.
주의사항! 여기있는 예시와 정보는 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%확률로 성공한다.


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을 만들면 된다.

추가된 차원을 가고 싶다면

파일 경로: .minecraft\saves\<맵 이름>\datapacks\<데이터 팩 이름>\data\<namespace>\predicates\<파일 이름>.json
  {
    "condition": "minecraft:entity_properties",
    "predicate": {
	"flags": {
		"is_sneaking": true
	}
    },
    "entity":"this"
}
1로 가면 된다.

완전한 평지 엔드 버전
{
      "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‌[편집]

차원 타입을 설정하는 곳 기본값은 차원마다 다르다.

설명

minecraft:overworld

minecraft:the_nether

minecraft: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

effects

overworld로 설정하면 구름, 태양, 별, 달이 생기며, the_nether로 설정하면 네더처럼 짙은 안개가 된다. the_end로 설정할 경우 엔드와 같이 어두운 하늘이 된다. 이외의 값을 설정한 경우 자동으로 "minecraft:overworld"로 설정된다.