전리품 테이블은 게임에서 아이템이 생성되는 방식을 정의하는 JSON 형식 파일입니다. 상자의 내용물을 생성하고, 개체가 사망하면 드롭하는 아이템을 정의하거나, 심지어 개체가 장비하는 아이템을 정의하는 용도로 사용할 수 있습니다. 버섯소 젖 짜기나 낚시 같은 게임플레이 메커니즘에서 사용하기도 합니다.
전리품 테이블 파일은 행동 팩의 루트 디렉터리에 들어 있으며 일반적으로 "풀"이라고 하는 세 가지 주요 섹션으로 구성됩니다.
- 롤
- 개체를 선택하기 위해 이 풀을 롤하는 횟수입니다. 정해진 롤 횟수로 만드는 정수일 수도 있고, 선택할 수 있는 롤 횟수의 최소/최대 범위일 수도 있습니다.
- 조건(선택 사항) 자세한 정보
- 이 풀을 롤하려면 충족해야 하는 조건입니다.
- 엔트리
- 이 롤에서 게임이 선택하는 개체 목록입니다.
item이나loot_table로 설정할 수 있으며, 이 롤에서 아무 일도 일어나지 않는 가능성을 부여하고 싶다면empty로 설정하세요.
- 이 롤에서 게임이 선택하는 개체 목록입니다.
이 튜토리얼에서는 다음과 같은 사항을 안내해 드립니다.
- JSON을 사용하여 전리품 테이블을 정의하는 방법
- 선택된 아이템을 수정하기 위해 함수를 엔트리에 적용하는 방법
- 풀이나 개체를 선택했을 때 조건을 사용하여 추가 제한을 적용하는 방법
요구 사항
튜토리얼을 시작하기 전에 아래 사항을 완료하시길 추천합니다.
기본 사용법
먼저 호출하면 다이아몬드 하나를 반환하는 전리품 테이블을 만들겠습니다.
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "minecraft:diamond"
}
]
}
]
}
화면에서처럼 우리는 한 번만 롤하며 롤할 때마다 다이아몬드 하나를 포함하는 단일 풀을 정의했습니다. 이 풀을 개체의 행동 파일에 있는 minecraft:loot 구성 요소와 결합했다면, 사망 시 다이아몬드를 드롭하게 됩니다.
두 가지 아이템 중에서 하나를 선택하게 하려면 어떻게 해야 할까요? 다이아몬드나 석탄 조각을 반환하게 하려면 어떻게 해야 할까요? entries 개체에 두 번째 값을 추가하면 됩니다.
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "minecraft:diamond"
},
{
"type": "item",
"name": "minecraft:coal"
}
]
}
]
}
이렇게 하면 다이아몬드가 석탄 조각과 비슷한 확률로 드롭됩니다. 모든 entries에는 weight가 할당되어 있습니다. 지정하지 않으면 기본적으로 1이 되어 모든 entries가 동일한 확률로 롤링됩니다. 가중치를 조절하려면 weight 값을 직접 정의해야 합니다.
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "minecraft:diamond",
"weight": 1
},
{
"type": "item",
"name": "minecraft:coal",
"weight": 7
}
]
}
]
}
weight가 어떻게 롤에 영향을 미치는지를 이해하는 가장 좋은 방법은 위의 예시에서 엔트리가 2개가 아닌 8개가 있다고 가정하는 것입니다. 일곱 번은 석탄이 나오고 한 번은 다이아몬드가 나옵니다. 즉 롤에서 다이아몬드가 아닌 석탄이 나올 확률이 7배나 높습니다.
(플레이어의 운 특성을 바탕으로 weight를 조절하는) Java Edition의 quality 변경자가 Bedrock Edition의 바닐라 파일에 존재하지만, Bedrock Edition은 현재 운 특성을 지원하지 않으며 따라서 이 기능은 아무런 쓸모가 없습니다.
entries 모음을 롤하는 횟수를 무작위로 선정할 수도 있습니다. rolls 키는 게임에서 무작위로 선택하는 min 및 max 값을 이용해 설정할 수 있습니다.
{
"pools": [
{
"rolls": {
"min": 1,
"max": 3
},
"entries": [
{
"type": "item",
"name": "minecraft:diamond",
"weight": 1
},
{
"type": "item",
"name": "minecraft:coal",
"weight": 7
}
]
}
]
}
이 경우 게임은 엔트리를 1~3회 롤하게 됩니다. 그 결과 최소 1회에서 최대 3회마다 이 전리품 테이블이 호출됩니다.
다음은 전리품 테이블을 하나의 엔트리로 사용하는 또 다른 예시입니다. 이 예시에서 게임은 다른 전리품 테이블을 호출하고 그에 따른 결과를 반환합니다.
{
"pools": [
{
"rolls": {
"min": 1,
"max": 3
},
"entries": [
{
"type": "item",
"name": "minecraft:diamond",
"weight": 1
},
{
"type": "item",
"name": "minecraft:coal",
"weight": 7
},
{
"type": "loot_table",
"name": "loot_tables/custom/some_loot_table",
"weight": 1
}
]
}
]
}
전리품 테이블은 어떤 식으로도 자신을 참조할 수 없다는 점에 주의하세요. 롤을 수행한 후 같은 전리품 테이블이 반복적으로 나타난다면 아무것도 반환되지 않습니다.
함수 및 아이템 수정
함수는 아이템을 수정하는 엔트리에 추가할 수 있는 선택적 작업입니다. 함수를 이용하면 사용자는 반환되는 아이템 수를 정의하고, 아이템의 특성을 수정하거나, 다른 수많은 작업을 수정할 수 있습니다. 이 문서에서는 함수의 일반적인 사용 방법을 다룹니다. 모든 가용 함수에 대한 심층적인 설명은 전리품 및 거래 목록 함수 튜토리얼에서 확인할 수 있습니다.
set_count
이 엔트리와 함께 반환되는 아이템의 최소 및 최대 수량을 설정합니다.
{
"type": "item",
"name": "minecraft:diamond",
"weight": 1,
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 6
}
}
]
}
위의 예시에서는 엔트리를 롤할 때마다 다이아몬드 1개~6개를 반환합니다.
set_data
아이템의 데이터 값을 설정합니다. 특정 포션이나 특정 색상 염료를 반환하는 등의 작업에 유용합니다. 또한 특정 색상의 양털이나 특정 나무 유형 같은 다양한 블록 값을 반환할 수도 있습니다.
{
"type": "item",
"name": "minecraft:potion",
"weight": 1,
"functions": [
{
"function": "set_data",
"data": 21
}
]
}
위의 예시에서는 회복 포션을 반환합니다.
{
"type": "item",
"name": "minecraft:wool",
"weight": 1,
"functions": [
{
"function": "set_data",
"data": 1
}
]
}
이 예시는 주황색 양털을 반환합니다.
specific_enchants
이 함수를 사용하면 아이템에 대한 구체적인 효과부여 목록을 설정할 수 있습니다. 사용자는 일반적으로는 게임에서 부여할 수 없는 효과를 아이템에 적용할 수 있습니다.
{
"type": "item",
"name": "minecraft:stick",
"weight": 1,
"functions": [
{
"function": "specific_enchants",
"enchants": [
"knockback",
"fire_aspect"
]
}
]
}
효과부여를 개체로 정의하여 효과부여 레벨을 정의할 수도 있습니다. 최대 효과부여 레벨은 하드 코딩되며 덮어쓸 수 없습니다.
{
"type": "item",
"name": "minecraft:stick",
"weight": 1,
"functions": [
{
"function": "specific_enchants",
"enchants": [
{
"id": "knockback",
"level": 1
},
{
"id": "unbreaking",
"level": 3
}
]
}
]
}
다중 함수
다중 함수를 정의할 수 있습니다. 다음은 두 가지 함수를 결합하는 예시입니다. 이 예시에서 이 엔트리는 회복 포션 1개~3개를 반환합니다.
{
"type": "item",
"name": "minecraft:potion",
"weight": 1,
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 3
}
},
{
"function": "set_data",
"data": 21
}
]
}
다중 함수는 같은 함수의 배수일 수 있지만, 이러한 함수가 서로 충돌한다면 마지막으로 정의한 함수가 적용됩니다.
예를 들어 아래 예시에서처럼 다중 set_count 함수를 사용하면 중복 함수 중 마지막 함수만 사용하게 되며, 따라서 아이템 개수는 1개~3개가 아닌 5개~7개가 됩니다.
{
"type": "item",
"name": "minecraft:potion",
"weight": 1,
"functions": [
{
"function": "set_count",
"count": {
"min": 1,
"max": 3
}
},
{
"function": "set_count",
"count": {
"min": 5,
"max": 7
}
}
]
}
조건
조건은 풀을 사용하거나 개별 엔트리를 선택하려면 충족해야 하는 요구 사항 목록입니다. 모든 조건은 조건 목록에 저장됩니다. 조건은 한 번에 하나씩 실행됩니다. 목록에 있는 조건 하나가 실패하면, 같은 목록에 있는 다른 조건은 무시됩니다.
일치 도구 조건
match_tool 전리품을 떨어뜨리는 데 사용된 도구(또는 무기 또는 플레이어가 사용하는 모든 아이템)가 제공된 변경자 조건 세트와 일치하는지 확인하는 조건입니다.
사용된 술어는 수, 내구도, 효과부여, 아이템입니다.
- 수: 아이템의 양
- range_max: 최대값
- range_min: 최소값
- 내구도: 아이템의 내구도
- range_max: 최대값
- range_min: 최소값
- 효과부여: 효과부여 목록
- 효과부여: 효과부여 ID
- 레벨: 효과부여 레벨
- range_max: 최대값
- range_min: 최소값
- 아이템: 아이템 ID
예시:
"conditions": [
{
"condition": "match_tool",
"enchantments": [
{
"enchantment": "sharpness",
"levels": {
"range_max": 6
}
}
],
"item": "minecraft:diamond_sword",
"count": 1,
"durability": {
"range_min": 1
}
}
]
풀 조건
조건을 풀에 적용하면 정의된 조건을 바탕으로 전체 풀을 실행할 수 있습니다.
아래 예시는 호출하는 개체가 스켈레톤 때문에 사망하여 다이아몬드나 석탄 조각이 반환되었을 때만 트리거됩니다.
{
"pools": [
{
"conditions": [
{
"condition": "killed_by_entity",
"entity_type": "minecraft:skeleton"
}
],
"rolls": 1,
"entries": [
{
"type": "item",
"name": "minecraft:diamond",
"weight": 1
},
{
"type": "item",
"name": "minecraft:coal",
"weight": 1
}
]
}
]
}
엔트리 조건
조건을 롤에 있는 특정 entries에 적용할 수도 있습니다. 아래 예시는 호출하는 개체가 플레이어에 의해 사망하면 50% 확률로만 다이아몬드를 반환합니다. 다른 50% 호출에서는 석탄을 반환합니다.
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "minecraft:diamond",
"weight": 1,
"conditions": [
{
"condition": "killed_by_player"
}
]
},
{
"type": "item",
"name": "minecraft:coal",
"weight": 1
}
]
}
]
}
사용 가능한 다양한 함수와 조건을 탐색하면 플레이어의 환경을 진정으로 사용자 정의할 수 있게 됩니다. 아이템의 이름을 정하고 이야기를 부여하거나, 보급품이 가득한 자원 상자를 드롭하거나, 심지어 지시 사항이나 정보를 기록한 책을 만들 수도 있습니다.
다음 튜토리얼
선택된 아이템을 수정할 수 있는 수많은 다른 함수가 존재합니다. 다음 튜토리얼에서는 이러한 함수를 다룹니다.