조합 레시피 + 아이템 태그
crafting_shaped·smelting·crafting_shapeless 세 가지 레시피 JSON을 작성하고, 아이템 태그로 재료를 묶어 제련 레시피에 적용합니다.
레시피 시스템 개요
NeoForge/Minecraft의 레시피는 데이터팩 JSON으로 정의합니다. 코드를 건드리지 않고
src/main/resources/data/<modid>/recipe/*.json 파일만 추가하면 게임이 로드 시 자동으로 인식합니다.
주요 레시피 타입:
| 타입 | 설명 |
|---|---|
minecraft:crafting_shaped | 패턴이 있는 조합 (3×3 격자) |
minecraft:crafting_shapeless | 순서 무관 조합 |
minecraft:smelting | 화로 제련 |
minecraft:blasting | 용광로 (화로 2배 속도) |
minecraft:smoking | 훈연기 (음식 전용) |
이 챕터에서는 세 가지 타입과 아이템 태그까지 다룹니다.
1단계 — 조합 레시피 (crafting_shaped): Ruby Pickaxe
examplemod-master-projects/tools/src/main/resources/data/master_tools/recipe/ruby_pickaxe.json
{
"type": "minecraft:crafting_shaped",
"category": "equipment",
"pattern": [
"RRR",
" S ",
" S "
],
"key": {
"R": "master_tools:ruby",
"S": "minecraft:stick"
},
"result": {
"id": "master_tools:ruby_pickaxe",
"count": 1
}
}pattern / key 규칙
pattern의 각 줄은 동일한 길이여야 합니다 (빈칸으로 패딩).key는pattern에 등장하는 모든 비공백 문자를 정의해야 합니다.- 공백(
)은 빈 슬롯을 의미하므로key에 정의하지 않습니다. result.count는 생산 개수 (기본값 1).
⚠️ 안티패턴: pattern 키 미정의 → 데이터팩 로드 에러
⚠️ 잘못된 레시피 JSON
// ❌ pattern 미스매치 (key 정의 누락) "pattern": ["RRR", " S ", " S "], "key": {"R": "master_tools:ruby"} // S 누락→ 데이터팩 로드 에러:
"Unknown key 'S'"모든
pattern문자는key에 정의되어야 합니다 (공백" "은 자동).
2단계 — 아이템 태그 정의
레시피에서 태그를 재료로 사용하면, 태그에 속한 모든 아이템을 재료로 쓸 수 있습니다.
이 패턴은 바닐라의 #minecraft:logs (모든 원목)와 동일한 방식입니다.
examplemod-master-projects/tools/src/main/resources/data/master_tools/tags/item/gems.json
{
"values": ["master_tools:ruby", "master_tools:sapphire"]
}태그 경로 규칙:
data/<namespace>/tags/item/<tag_name>.json- 게임 내 참조:
#<namespace>:<tag_name>→#master_tools:gems
3단계 — 제련 레시피 (smelting): 광석 → Ruby
examplemod-master-projects/tools/src/main/resources/data/master_tools/recipe/ruby_smelting.json
{
"type": "minecraft:smelting",
"category": "misc",
"ingredient": "#master_tools:gem_ores",
"result": {"id": "master_tools:ruby"},
"experience": 1.0,
"cookingtime": 200
}| 필드 | 설명 |
|---|---|
ingredient | 태그(#namespace:tag) 또는 단일 아이템 ID |
result | 결과 아이템 |
experience | 제련 완료 시 경험치 (다이아몬드 1.0, 철 0.7) |
cookingtime | 틱 단위 (20틱 = 1초, 기본 200틱 = 10초) |
ingredient에#master_tools:gem_ores를 사용했으므로, Ruby Ore와 Sapphire Ore 모두 이 레시피 하나로 제련됩니다. 광석 태그는 별도data/master_tools/tags/item/gem_ores.json에 정의합니다.
4단계 — 무형 조합 (crafting_shapeless): Ruby Block 압축
examplemod-master-projects/tools/src/main/resources/data/master_tools/recipe/ruby_block.json
{
"type": "minecraft:crafting_shapeless",
"category": "misc",
"ingredients": [
"master_tools:ruby",
"master_tools:ruby",
"master_tools:ruby",
"master_tools:ruby",
"master_tools:ruby",
"master_tools:ruby",
"master_tools:ruby",
"master_tools:ruby",
"master_tools:ruby"
],
"result": {"id": "master_tools:ruby_block", "count": 1}
}crafting_shapeless의 특징:
ingredients배열에 재료를 순서 없이 나열합니다.- 3×3 조합대에서 어느 위치에 놓아도 동일한 결과를 생산합니다.
- 같은 아이템을 여러 개 요구할 때 배열 항목을 중복 나열합니다.
레시피 파일 구조 정리
src/main/resources/
└── data/
└── master_tools/
├── recipe/
│ ├── ruby_pickaxe.json # crafting_shaped (R+S → Pickaxe)
│ ├── ruby_smelting.json # smelting (#gem_ores → Ruby)
│ └── ruby_block.json # crafting_shapeless (9×Ruby → Block)
└── tags/
└── item/
└── gems.json # #master_tools:gems 태그
다음 단계
레시피와 태그가 모두 갖춰졌습니다. 다음 챕터에서는 빌드를 완성하고 최종 검증을 진행합니다.