기계 가공 통합 — Crusher로 광물 → 보석 정제
차원에서 채굴한 Ruby·Sapphire 광물을 master_machine의 Crusher로 가공하는 CrusherRecipe 데이터팩을 capstone에 추가하고, 차원 입장 → 채굴 → 귀환 → 가공의 전체 진행 루프를 완성합니다.
기계 가공 통합 — Crusher로 광물 → 보석 정제
앞 챕터(01-dimension-gem-ore)에서 Magic Realm 안에 Ruby Ore와 Sapphire Ore 월드젠을 배치했습니다. 이번 챕터에서는 채굴한 광물을 master_machine의 Crusher로 가공하는 CrusherRecipe 데이터팩을 캡스톤 모드에 추가합니다.
⚠️ 다른 모드 레시피 수정 금지
capstone은master_machine의CrusherRecipe타입을 사용하지만,
master_tools의 코드·레시피를 직접 수정하지 않습니다.
capstone 데이터팩에 새 레시피 JSON만 추가해 모드 간 결합도를 낮춥니다.
1. 전체 진행 루프 개요
| 단계 | 담당 모드 | capstone이 추가하는 것 |
|---|---|---|
| 차원 입장 | master_dimension | — |
| 광물 발견·채굴 | master_tools 곡괭이 | Ruby/Sapphire Ore 월드젠 (이전 챕터) |
| 기계 가공 레시피 | master_machine Crusher | CrusherRecipe JSON (이번 챕터) |
| 보석 활용 | master_tools Ruby·Sapphire | — |
2. CrusherRecipe 데이터팩 위치
NeoForge의 데이터팩 레시피는 src/main/resources/data/<namespace>/recipe/<이름>.json에 위치합니다.
capstone 네임스페이스 master_capstone 아래에 작성하면, master_machine의 CrusherRecipe 타입을 코드 수정 없이 데이터만으로 등록할 수 있습니다.
examplemod-master-projects/capstone/src/main/resources/
└── data/
└── master_capstone/
└── recipe/
├── ruby_ore_crush.json ← 이번 챕터에서 추가
└── sapphire_ore_crush.json ← 이번 챕터에서 추가3. Ruby Ore → Ruby 레시피
data/master_capstone/recipe/ruby_ore_crush.json
{
"type": "master_machine:crusher",
"input": "master_tools:ruby_ore",
"output": {
"id": "master_tools:ruby",
"count": 2
},
"chance": 1
}| 필드 | 값 | 의미 |
|---|---|---|
type | master_machine:crusher | Crusher 가공 레시피 (master_machine 정의) |
input | master_tools:ruby_ore | 입력 재료 — Ingredient.CODEC가 문자열 ID를 그대로 받습니다(capstone이 월드젠으로 배치한 광물) |
output.id | master_tools:ruby | 출력 아이템 — 기존 master_tools 보석 |
output.count | 2 | 광물 1개 → 보석 2개 (곡괭이 드롭과 동등 이상) |
chance | 1 | 100% 확률로 가공 성공 |
💡 count 2의 이유
인챈트 없이 광물을 캐면 보석 1개 드롭이 기본입니다.
Crusher를 경유하면 2배 효율이 되어, 기계 가공 루프에 동기가 생깁니다.
4. Sapphire Ore → Sapphire 레시피
data/master_capstone/recipe/sapphire_ore_crush.json
{
"type": "master_machine:crusher",
"input": "master_tools:sapphire_ore",
"output": {
"id": "master_tools:sapphire",
"count": 1
},
"chance": 1
}Sapphire Ore는 Ruby보다 희귀하기 때문에 출력 count를 1로 설정합니다. 추후 부산물(byproduct) 시스템이 master_machine에 추가된다면, 이 파일에 byproduct 필드를 추가해 확장할 수 있습니다.
5. 레시피 등록 확인 (인게임 검증)
📷 스크린샷 자리 (직접 캡처해 추가하세요)
Crusher GUI — Ruby Ore 투입 후 처리 진행 화면
검증 절차
- 4개 JAR(
master_tools,master_dimension,master_machine,master_capstone)을mods/폴더에 배치합니다. - 게임을 시작한 뒤 크리에이티브 모드에서
Crusher블록을 설치합니다. - Crusher를 우클릭해 GUI를 엽니다.
- 입력 슬롯에
Ruby Ore아이템을 넣습니다. - Crusher가 작동(진행 바 이동)하고, 출력 슬롯에
Ruby×2가 나타나면 성공입니다.
Crusher GUI 슬롯 구성:
[ 입력 슬롯 ] → [▶ 진행] → [ 출력 슬롯 ]
ruby_ore ruby ×26. 전체 진행 루프 종합 검증
📷 스크린샷 자리 (직접 캡처해 추가하세요)
Magic Realm 탐험 → Crusher 가공 → 보석 획득 전체 흐름
아래 순서로 전체 루프를 한 번 실행하면 캡스톤 통합이 정상 동작하는지 확인할 수 있습니다.
| 순서 | 행동 | 기대 결과 |
|---|---|---|
| 1 | Magic Portal에 불을 붙여 Magic Realm 진입 | 파란 하늘·특수 지형 렌더링 |
| 2 | Y < 40 부근 탐색 | Ruby Ore 또는 Sapphire Ore 발견 |
| 3 | master_tools 곡괭이로 광물 채굴 | 광물 아이템 드롭 |
| 4 | Portal 역방향으로 오버월드 귀환 | 오버월드 로드 |
| 5 | Crusher GUI에 광물 투입 | 처리 진행 후 보석 출력 |
| 6 | 보석 아이템 획득 | Ruby ×2 또는 Sapphire ×1 |
7. 코드 수정 없이 확장하는 이유
이번 챕터에서 추가한 내용은 JSON 파일 2개뿐입니다. Java 코드를 한 줄도 건드리지 않고 master_machine의 레시피 시스템을 활용했습니다.
이 접근 방식의 이점:
- 낮은 결합도:
master_machine이 업데이트되어도 JSON 스키마가 유지되는 한 capstone 레시피는 그대로 동작합니다. - 검증 용이: 레시피 오류는 게임 로그에 JSON 파싱 오류로 명시됩니다. Java 컴파일 오류보다 빠르게 수정할 수 있습니다.
- 데이터팩 배포: capstone JAR 없이 데이터팩 ZIP만으로도 레시피를 배포할 수 있습니다.
8. 이 챕터의 완료 기준
-
data/master_capstone/recipe/ruby_ore_crush.json파일이 존재합니다. -
data/master_capstone/recipe/sapphire_ore_crush.json파일이 존재합니다. - Crusher에
Ruby Ore를 투입하면Ruby×2가 출력됩니다. - Crusher에
Sapphire Ore를 투입하면Sapphire×1이 출력됩니다. - Magic Realm → 채굴 → 귀환 → Crusher 가공 전체 루프가 끊김 없이 진행됩니다.
다음 챕터(03-gem-guardian)에서는 Magic Realm 전용 몹 GemGuardian을 추가해 보석 드롭과 진행 루프를 더 심화합니다.
차원에 보석 광물 배치 (WorldGen)
NeoForge 데이터팩 worldgen JSON 3종(configured_feature, placed_feature, biome_modifier)을 작성해 master_dimension의 magic_realm 차원에만 Ruby Ore를 생성합니다.
차원 전용 새 몹 — GemGuardian
Magic Realm 전용 적대 몹 GemGuardian을 Monster 상속으로 구현합니다. EntityType 등록, AttributeSupplier, 4큐브 GemGuardianModel, MobRenderer 설정까지 단계별로 다룹니다.