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

마인크래프트 데이터팩 강좌 [8] - 아이템 수정자 (Item modifier)

Potan 2021. 6. 25. 19:07
반응형

안녕하세요 Potan입니다.

 

 

이번시간에는 아이템 수정자에 대해 알아보겠습니다.

마인크래프트 1.17을 바탕으로 제작되었습니다.

 

1. 아이템 수정자란?

데이터팩이 있어야만 존재하는 json파일로 loot table의 아이템 함수를 사용합니다.

따라서 훗날 loot table에서 아이템 함수 내용은 이 강좌로 대체하겠습니다.

전 predicate 강좌와 마찬가지로
아이템 수정자에선 사용할 수 없는 함수가 존재합니다.

 

이 아이템 수정자는 /item 명령어를 통해 아이템에 적용할 수 있습니다.

/item modify (block <좌표> | entity <대상>) <슬롯> <수정자>
/item replace (block <좌표> | entity <대상>) <슬롯> from (block <좌표> | entity <대상>) <슬롯> <수정자>

 

 

2. 만들기

item_modifiers 폴더의 .json 파일입니다.

정리용 폴더를 만들 수 있습니다.

총 23가지의 함수가 있으며 여러가지 함수를 동시에 작성할 수 있습니다.

다만 loot table에서만 적용되는 듯한 함수들이 몇개 있는데 이런 것들은 제가 잘 모르겠습니다.

이러한 함수들은 함수 이름에 ?를 적어놓겠습니다.

아이템 수정자를 만들기 위해 이 강좌를 보신다면 ? 붙은 함수는 넘어가셔도 무방합니다.

 

기본 구조

  • function - 적용할 함수의 namespaced ID 입니다.
  • 함수의 나머지 요소들
  • conditions - 적용될 대상의 조건입니다. predicate 강좌를 확인해주세요.

여러 함수 적용, conditions 예시

더보기

코드 블록을 사용하면 계속해서 튕겨가지고 이미지로 대체합니다.

 

이름을 ???로 설정하는 함수와 대상인 엔티티가 잔디 블록위에 있다면 아이템 개수를 50개로 설정하는 아이템 수정자입니다. 

이후 함수의 예시에서 conditions는 스킵하겠습니다.

 

1. apply_bonus ? - 미리 설정된 보너스 공식을 적용합니다.

  • enchantment - 레벨 계산에 사용될 마법 부여의 ID입니다. (level)
  • formula - 적용될 공식을 정합니다.
    • binomial_with_bonus_count - n = level + extra, p = probability인 이항분포입니다.
    • uniform_bonus_count - 0 ~ level * bonusMultiplier 인 균일분포입니다.
    • ore_drops - 마인크래프트의 행운 공식을 적용합니다. (Count * (max(0; random(0..Level + 2) - 1) + 1)
  • parameters - ore_drops를 제외한 나머지 두개의 공식에 들어갈 수치를 정하는 곳입니다.
    • extra - binomial_with_bonus_count일 때 작성하는 추가 수치입니다.
    • probability - binomial_with_bonus_count일 때 작성하는 확률입니다.
    • bonusMultiplier - uniform_bonus_count일 때 작성하는 배수입니다.

예시

 

2. copy_name ?

- loot table의 block 유형일 경우 블록 엔티티의 CustomName 태그를 아이템의 display.Name 태그에 복제합니다.

  • "source" : "block_entity" - "block_entity"로 설정되어야 합니다.

예시

 

3. copy_nbt ? - 아이템의 tag 태그에서 nbt 태그를 복제합니다.

  • source - nbt를 제공할 대상입니다.
    • type - nbt를 제공할 대상의 타입을 정합니다.
      • context - 기본값으로 type 태그가 없을경우 이 태그로 설정됩니다.
        • target - type 태그가 없을 경우 이 태그도 스킵하고 밑의 내용으로 넘어갑니다.
          • block_entity - 부숴진 블록의 블록 엔티티입니다.
          • this - 죽은 엔티티 또는 발전과제를 달성하거나 상자를 열거나, 블록 부순 플레이어입니다.
          • killer - 죽인 엔티티
          • killer_player - 죽인 플레이어
      • storage
        • source - 대상의 Namespaced ID입니다.
  • ops - 복제 작업 리스트입니다. ( [] )
    • 한 작업 ( {} )
      • source - 복사할 nbt 경로입니다.
      • target - 붙여넣기할 nbt 경로입니다. 아이템의 tag 태그에서 시작합니다.
      • op - 작업의 유형입니다.
        • replace - target의 nbt를 대체합니다.
        • append - 리스트에 추가합니다
        • merge - 기존 내용에 합칩니다.

저도 예시를 어떻게 해야할지 감이 안잡혀서 예시를 적지 않겠습니다.

 

4. copy_state ? - 부숴진 블록의 상태를 아이템의 BlockStateTag에 복제합니다.

  • block - 블록 ID로 일치하지 않으면 함수는 실패합니다.
  • properties - 복제할 블록의 상태 리스트입니다.
    • 복제할 상태 이름

예시

 

5. enchant_randomly - 무작위 마법 부여를 부여합니다. 레벨은 랜덤입니다.

  • enchantments
    - 마법 부여 ID의 리스트로 이 리스트에 있는 마법 부여 중 무작위로 부여됩니다.
    - 비워둘 경우 적용되는 아이템에 가능한 모든 마법 부여 중 무작위로 부여됩니다.

예시

 

6. enchant_with_levels - 마법 부여대를 사용한 것처럼 마법 부여합니다.

  • treasure - true일 경우 보물 마법 부여가 부여될 수 있습니다. (ex: 수선, 저주)
  • levels - 어떤 레벨에서 마법 부여할지 정합니다. number provider를 사용합니다.

 

예시

 

7. exploration_map - 빈 지도를 탐험 지도로 변환합니다.

  • destination - 목적지 구조물의 유형으로 /locate 명령어에 쓰이는 StructureType을 받습니다. (대소문자 구분X)
  • decoration - 목적지의 아이콘입니다. 맵 아이콘 텍스트 ID (대소문자 구분X)를 사용합니다.
    • mansion이나 monument가 아이콘이 될 경우 아이템의 텍스쳐가 이에 맞추어 변경됩니다.
  • zoom - 지도의 축소 레벨입니다. (기본값 2)
  • search_radius - 구조물을 찾는 범위입니다. 범위는 정사각형으로 기본값은 50입니다.
    • 범위 0 : 현재 청크에서 구조물 검색
    • 범위 1 : 현재 청크 + 주변 8청크에서 구조물 검색
  • skip_existing_chuncks - true일 경우 이미 생성된 청크에서 구조물을 찾지 않습니다. (기본값 true)

예시 + 지도 아이템 구분

더보기

 

바다 신전은 구분되는데 맨션(2번째)은 기본이랑 구분이 잘 안되네요

 

 

8. explosion_decay ?

- loot table의 block 유형의 경우 폭발로 부숴질 경우 스택에서 일부 아이템이 삭제됩니다.

- 각 아이템의 경우 1 / 폭발 범위의 없어질 확률을 가집니다.

- 어떠한 요소도 없이 function만 존재합니다.

예시는 넘어가겠습니다.

 

9. furnace_smelt - 화로에 구운 것처럼 아이템을 바꿉니다.

- 조건과 연계해 불타 죽은 동물이 구운 고기를 떨굴 때 사용합니다.

- 어떠한 요소도 없이 function만 존재합니다.

예시는 넘어가겠습니다.

 

10. fill_player_head - 플레이어 머리 아이템에 태그를 추가합니다.

  • entity - 플레이어 머리에 넣을 엔티티를 정합니다.
    • this - 죽은 엔티티, 발전과제를 달성하거나 상자를 열거나 블록을 부순 플레이어
    • killer - 죽인 엔티티
    • killer_player - 죽인 플레이어

예시

더보기

execute as를 이용하면 이 아이템 수정자로 해당 플레이어의 머리를 만들 수 있습니다.

무조건 플레이어 머리에 부여해야합니다.

 

11. limit_count - 아이템 개수를 정해진 범위 안으로 맞춥니다.

엔더 진주처럼 64개가 아니라 limit 내로 아이템을 못합치게 하는 것은 아니고

해당 범위내로 아이템 개수를 조정합니다.

예시 + 설명

더보기

아이템이 10개일 경우 - 20개로 조정

아이템이 40개일 경우 - 30개로 조정

아이템이 25개일 경우 - 변화X

추가로 검, 엔더진주같은 아이템들도 20개로 바뀝니다.

 

12. looting_enchant ? - killer 엔티티의 약탈 레벨에 비례해 추가 아이템을 부여합니다.

  • count - 약탈 레벨당 추가되는 양입니다. 소수도 가능하며 약탈 레벨에 곱해진 후 반올림됩니다.
  • limit - 나올 수 있는 최대치입니다. 0일 경우 제한이 없습니다.

예시

 

13. set_attributes - 아이템의 속성(attributes)에 수정자를 적용합니다.

  • modifiers - 변경할 수정자의 리스트입니다. ( [] )
    • 수정자 ( {} )
      • name - 수정자의 이름
      • attribute - 수정자를 적용할 속성입니다.
      • operation
        • addition - 더하기
        • multiply_base - 기본값에 곱하기
        • multiply_total - 총 값에 곱하기
      • amount - 수정자의 양을 정합니다. number provider를 사용합니다.
      • slot - 수정자의 효과를 받기위해 아이템이 있어야하는 슬롯입니다.
        • mainhand, offhand, feet, legs, chest, head 중에 하나입니다.
        • 여러 슬롯을 넣을 경우 그 중 무작위로 설정됩니다.
      • id - 수정자의 UUID로 적지 않을 경우 새롭게 생성됩니다.

예시

 

14. set_banner_pattern - 현수막 무늬의 태그를 설정합니다.

  • patterns - 적용할 무늬의 리스트입니다. ( [] )
    • 무늬 ( {} )
      • pattern - 무늬의 유형입니다. (ex: square_bottom_left)
      • color - 무늬의 색입니다. 마인크래프트의 기본 16가지 색을 지원합니다.
    • append - 적용되는 무늬가 기존의 무늬를 대체할지 여부입니다. true일 경우 대체하지 않습니다.

예시

 

15. set_contents ?

- loot table의 block 유형일 경우 블록 아이템의 내용물을 엔트리 목록으로 설정합니다.

  • entries - 내용물이 될 엔트리 목록입니다.

엔트리는 loot table의 요소로 다음에 다루겠습니다.

예시는 생략하겠습니다.

 

16. set_counts - 아이템의 개수를 설정합니다.

  • count - 설정될 개수입니다. number provider를 사용합니다.
  • add - true일 경우 아이템의 개수를 설정하는 것이 아닌 더하는 것으로 바꿉니다. (선택사항)
    • 64개를 넘어도 새로운 스택이 되지 않습니다.

예시

 

17. set_damage - 도구의 내구도를 설정합니다.

  • damage - 설정할 내구도의 비율입니다. (1.0 ~ 0.0) number provider를 사용합니다.
  • add - true일 경우 내구도를 설정하는 것이 아닌 더하는 것으로 바꿉니다. (선택사항)

예시

 

18. set_enchantments - 아이템의 마법 부여를 설정합니다.

  • enchantments - 추가할 마법 부여입니다.
    • <마법 부여 ID> : <레벨>
      • <레벨>의 경우 number provider를 사용합니다.
  • add - true일 경우 설정하는 것이 아닌 마법 부여의 레벨에 더해집니다. (선택사항)

enchantments에 존재하지 않는 마법 부여의 경우 바꾸지 않습니다.

예시

 

19. set_loot_table - 아이템의 loot table을 설정합니다. (상자 등)

  • name - 설정할 loot table의 namespaced ID입니다.
  • seed - loot table의 시드를 설정합니다. 없거나 0일 경우 랜덤 시드가 사용됩니다. (선택사항)

예시

더보기

상자에 적용할 경우 상자 안에 무작위 개수의 레드스톤이 여러 칸에 나누어 들어갑니다.

(레드스톤 광석 캐면 나오는 아이템)

seed를 0 또는 생략할 경우 놓을때마다 위치가 바뀌며 특정 숫자를 적으면 한 슬롯에 고정됩니다.

loot table의 경우 나중에 다루겠습니다.

 

20. set_lore - lore를 추가합니다.

  • lore - JSON 텍스트 구성요소 리스트입니다. 한 요소당 lore의 한 줄을 표현합니다.
  • entity - JSON 텍스트 구성요소의 @s에 담당하는 구성요소입니다. (선택사항)
    • this - 죽은 엔티티, 발전과제 달성하거나 던전 상자를 열거나 블록을 부순 플레이어
    • killer - 죽인 엔티티
    • killer_player - 죽인 플레이어
  • replace - true일 경우 모든 lore를 대체합니다. false일경우 lore에 추가합니다. (기본값 false)

예시

 

21. set_name - 아이템의 이름을 설정합니다.

  • name - JSON 텍스트 구성요소입니다.
  • entity - JSON 텍스트 구성요소의 @s에 담당하는 구성요소입니다. (선택사항)
    • this - 죽은 엔티티, 발전과제 달성하거나 던전 상자를 열거나 블록을 부순 플레이어
    • killer - 죽인 엔티티
    • killer_player - 죽인 플레이어

예시

 

22. set_nbt - 아이템에 NBT 데이터를 추가합니다.

  • tag - 추가할 nbt 태그 문자열입니다. 명령어와 유사합니다.
    • "{nbt 태그}"로 이루어지며 내부 "는 \"로 작성해야합니다.

예시

 

23. set_stew_effect - 수상한 스튜에 포션 효과를 설정합니다.

  • effects - 적용할 포션 효과 리스트입니다. ( [] )
    • 포션 효과 ( {} )
      • type - 포션 효과의 ID입니다.
      • duration - 포션 효과의 지속시간으로 number provider를 사용합니다.

예시

 

반응형