캡스톤 통합 설계 + 의존 구조
Master Tools, Master Dimension, Master Machine을 하나의 진행 루프로 연결하는 Master Capstone 모드의 비전, 의존성, 로드 순서, 배포 구조를 설계합니다.
캡스톤 통합 설계 + 의존 구조
마스터 트랙 #4는 앞에서 만든 3개 모드(master_tools, master_dimension, master_machine)를 복사해서 합치는 과정이 아닙니다. 각 모드는 독립 JAR로 유지하고, master_capstone은 세 모드가 제공하는 기능을 전제로 새 월드젠·레시피·몹·진행 루프를 연결합니다.
1. 캡스톤 비전
완성 목표는 “마법 차원에서 발견한 자원을 기계로 가공해 다시 차원 진행을 강화하는 루프”입니다.
- 플레이어가
master_dimension의magic_realm또는master_dimension으로 입장합니다. - 차원 안에서 캡스톤이 추가한
Ruby Ore월드젠을 발견합니다. master_tools의 도구로 광물을 채굴해 원시 보석을 얻습니다.- 차원에서 귀환한 뒤
master_machine의Crusher로 원시 보석을 가공합니다. - 정제 보석을 사용하면 차원 입장 효과가 강화되어 다음 탐험이 쉬워집니다.
- 차원 전용 새 몹
GemGuardian을 처치하면 특별 드롭을 얻습니다.
이 루프의 핵심은 기능을 한 프로젝트로 뭉치지 않는 것입니다. 도구, 차원, 기계는 각자의 책임을 유지하고, 캡스톤만 세 모드를 의존성으로 삼아 플레이 경험을 엮습니다.
2. 통합 의존 그래프
master_capstone은 세 모드를 아래처럼 사용합니다.
| 의존 모드 | 캡스톤에서 사용하는 역할 | 캡스톤이 추가하는 것 |
|---|---|---|
master_tools | Ruby 보석과 도구 계열 | 차원 광물 채굴 조건, 정제 보석 진행 보상 |
master_dimension | Magic Portal, Magic Realm | 차원 전용 광석, 몹 스폰, 입장 강화 효과 |
master_machine | Crusher와 CrusherRecipe 흐름 | 광석 → 보석 가공 레시피, 진행 루프 연결 |
3. MasterCapstoneMod.java 생성
examplemod-master-projects/capstone/src/main/java/com/example/master/capstone/MasterCapstoneMod.java
package com.example.master.capstone;
import com.mojang.logging.LogUtils;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.common.Mod;
import org.slf4j.Logger;
@Mod(MasterCapstoneMod.MOD_ID)
public class MasterCapstoneMod {
public static final String MOD_ID = "master_capstone";
public static final Logger LOGGER = LogUtils.getLogger();
public MasterCapstoneMod(IEventBus modEventBus, ModContainer container) {
LOGGER.info("Master Capstone Mod 로드 — 4개 모드 통합");
// 다음 챕터들에서 worldgen 데이터팩, recipe, entity, event 통합
}
}아직 레지스트리는 연결하지 않습니다. 이번 챕터의 목표는 “캡스톤 모드가 로드되고, 세 마스터 모드 뒤에서 동작할 준비가 되었는지”를 확인하는 것입니다.
4. Gradle 의존성 설계
capstone/build.gradle의 핵심 의존성은 다음 모양입니다.
dependencies {
implementation "net.neoforged:neoforge:${neo_version}"
// 3개 마스터 모드 의존 (같은 그룹 전체 빌드 가정)
runtimeOnly project(':master_tools')
runtimeOnly project(':master_dimension')
runtimeOnly project(':master_machine')
}이 코드는 settings.gradle에서 네 프로젝트를 한 Gradle 루트로 묶었을 때 사용하는 형태입니다. 현재 예제 저장소는 각 마스터 모드가 독립 프로젝트로 분리되어 있으므로, 실제 실행 검증은 더 단순한 방식으로 진행합니다.
mods/
├── master_tools-1.0.0.jar
├── master_dimension-1.0.0.jar
├── master_machine-1.0.0.jar
└── master_capstone-1.0.0.jar즉, 이번 트랙의 기준 배포 방식은 JAR 4개를 같은 mods/ 폴더에 배치하는 것입니다. 다중 프로젝트 Gradle 설정은 별도 고급 주제로 분리합니다.
5. neoforge.mods.toml 의존성 선언
런타임 배치만으로는 충분하지 않습니다. NeoForge 로더가 “이 모드는 다른 3개 모드가 필요하다”는 사실을 알도록 neoforge.mods.toml에도 의존성을 적습니다.
[[dependencies.master_capstone]]
modId = "master_tools"
type = "required"
versionRange = "[1.0.0,)"
ordering = "AFTER"
side = "BOTH"
[[dependencies.master_capstone]]
modId = "master_dimension"
type = "required"
versionRange = "[1.0.0,)"
ordering = "AFTER"
side = "BOTH"
[[dependencies.master_capstone]]
modId = "master_machine"
type = "required"
versionRange = "[1.0.0,)"
ordering = "AFTER"
side = "BOTH"ordering = "AFTER"는 캡스톤이 세 모드 뒤에서 로드되도록 의도를 드러냅니다. 실제 레지스트리 객체를 직접 참조하는 챕터에서는 이 선언이 빠졌을 때 오류가 훨씬 빨리 드러납니다.
⚠️ 의존성 누락
4개 JAR을 같은mods/폴더에 배치하지 않으면:
→MasterCapstoneMod로드 시master_tools클래스 못 찾음
→ClassNotFoundException: MasterToolsMod
항상 4개 JAR(tools/dimension/machine/capstone) 모두mods/에 배치하세요.
6. 이 챕터의 완료 기준
MasterCapstoneMod.java가master_capstone모드 ID로 로드됩니다.build.gradle에 NeoForge와 3개 마스터 모드 런타임 의존성 구조가 준비됩니다.neoforge.mods.toml에master_tools,master_dimension,master_machinerequired 의존성이 선언됩니다.- 다음 챕터에서
Ruby Ore월드젠,CrusherRecipe,GemGuardian을 각각 독립 기능으로 추가할 수 있습니다.
다음 단계부터는 세 모드의 코드를 복사하지 않고, 캡스톤 모드가 “기존 모드들이 제공하는 API와 리소스를 사용하는 방식”으로 확장합니다.