모드 전용 크리에이티브 탭 만들기
CreativeModeTab.Builder로 모드 전용 크리에이티브 탭을 등록하고 displayItems에 아이템들을 추가하는 방법, BuildCreativeModeTabContentsEvent로 Vanilla 탭에 추가하는 방법을 학습합니다.
모드 전용 크리에이티브 탭 만들기
아이템을 등록했다면 다음 단계는 크리에이티브 모드에서 찾을 수 있게 만드는 것입니다. NeoForge 26에서는 CreativeModeTab.builder()로 모드 전용 탭을 만들거나, BuildCreativeModeTabContentsEvent로 기존 Vanilla 탭에 아이템을 끼워 넣을 수 있습니다.
1. DeferredRegister 선언
크리에이티브 탭도 아이템·블록과 마찬가지로 DeferredRegister로 등록합니다. 레지스트리 키는 Registries.CREATIVE_MODE_TAB입니다.
// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java, 46번째 줄
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS =
DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID);DeferredRegister.Items나 DeferredRegister.Blocks와 달리, 크리에이티브 탭은 전용 서브클래스가 없습니다. 범용 DeferredRegister.create(레지스트리키, MODID) 형태를 씁니다.
2. 탭 등록
CREATIVE_MODE_TABS.register(이름, 팩토리)로 탭을 등록합니다. 팩토리 람다 안에서 CreativeModeTab.builder()를 호출해 탭을 구성합니다.
// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java, 58~64번째 줄
public static final DeferredHolder<CreativeModeTab, CreativeModeTab> EXAMPLE_TAB =
CREATIVE_MODE_TABS.register("example_tab", () -> CreativeModeTab.builder()
.title(Component.translatable("itemGroup.examplemod"))
.withTabsBefore(CreativeModeTabs.COMBAT)
.icon(() -> EXAMPLE_ITEM.get().getDefaultInstance())
.displayItems((parameters, output) -> {
output.accept(EXAMPLE_ITEM.get());
})
.build());각 빌더 메서드의 역할:
| 메서드 | 설명 |
|---|---|
.title(Component) | 탭 이름. Component.translatable(키)로 다국어 지원 |
.withTabsBefore(탭키) | 이 탭 앞에 올 Vanilla 탭 지정 (정렬 순서) |
.icon(Supplier<ItemStack>) | 탭 아이콘 아이템 |
.displayItems((params, output) -> ...) | 탭에 표시할 아이템 목록 |
.build() | CreativeModeTab 인스턴스 생성 |
lang 파일에 탭 이름 추가
resources/assets/examplemod/lang/ko_kr.json에 번역 키를 추가합니다.
{
"itemGroup.examplemod": "예시 모드 탭"
}영어 파일(en_us.json)에도 추가합니다.
{
"itemGroup.examplemod": "Example Mod Tab"
}3. displayItems로 아이템 추가
displayItems 콜백은 탭이 열릴 때 호출됩니다. output.accept(아이템)으로 탭에 표시할 아이템을 추가합니다.
.displayItems((parameters, output) -> {
output.accept(EXAMPLE_ITEM.get());
// 아이템을 더 추가하려면 계속 accept 호출
// output.accept(RUBY.get());
})parameters에는 CreativeModeTab.ItemDisplayParameters가 담겨 있어 현재 게임 상태(난이도, 플레이어 등)에 따라 조건부로 아이템을 추가할 수 있습니다.
4. modEventBus에 등록
CREATIVE_MODE_TABS를 생성자에서 modEventBus에 연결해야 탭이 실제로 등록됩니다.
// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java, 68~77번째 줄
public ExampleMod(IEventBus modEventBus, ModContainer modContainer) {
BLOCKS.register(modEventBus);
ITEMS.register(modEventBus);
CREATIVE_MODE_TABS.register(modEventBus); // 탭 등록 필수
// ...
}ITEMS.register(modEventBus) 다음에 CREATIVE_MODE_TABS.register(modEventBus)를 추가합니다. 순서는 상관없지만 세 줄 모두 있어야 합니다.
5. Vanilla 탭에 아이템 추가 (BuildCreativeModeTabContentsEvent)
모드 전용 탭 대신 기존 Vanilla 탭(재료, 건축 블록 등)에 아이템을 끼워 넣고 싶을 때는 BuildCreativeModeTabContentsEvent를 씁니다.
// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java, 104~109번째 줄
private void addCreative(BuildCreativeModeTabContentsEvent event) {
if (event.getTabKey() == CreativeModeTabs.BUILDING_BLOCKS) {
event.accept(EXAMPLE_BLOCK_ITEM);
}
}이 메서드를 생성자에서 modEventBus에 연결합니다.
public ExampleMod(IEventBus modEventBus, ModContainer modContainer) {
// ...
modEventBus.addListener(this::addCreative);
}event.getTabKey()로 어느 탭인지 확인하고, 원하는 탭에만 아이템을 추가합니다. 자주 쓰는 탭 키:
| 탭 키 | 설명 |
|---|---|
CreativeModeTabs.BUILDING_BLOCKS | 건축 블록 |
CreativeModeTabs.INGREDIENTS | 재료 |
CreativeModeTabs.TOOLS_AND_UTILITIES | 도구 및 유틸리티 |
CreativeModeTabs.COMBAT | 전투 |
CreativeModeTabs.FOOD_AND_DRINKS | 음식 및 음료 |
⚠️ Vanilla 탭 직접 수정 금지
BuiltInRegistries나 리플렉션으로 Vanilla 탭 내부를 직접 수정하면 다른 모드와 충돌합니다. 반드시BuildCreativeModeTabContentsEvent를 통해서만 추가하세요.
6. 안티패턴: ItemGroup 구식 패턴
⚠️ ItemGroup 구식 패턴
1.19.3+ 부터
ItemGroup→CreativeModeTab으로 변경됐습니다:// ❌ 구식 (1.19.2 이하) new ItemGroup("examplemod") { ... } // ✅ NeoForge 26 CreativeModeTab.builder().title(...).build()구식
ItemGroupAPI는 NeoForge 26에 존재하지 않습니다. 오래된 튜토리얼을 참고할 때 주의하세요.
7. 인게임 확인
게임을 실행하고 크리에이티브 모드에서 확인합니다.
E키로 인벤토리 열기- 상단 탭 목록에서 모드 탭 아이콘 클릭
- 등록한 아이템이 탭 안에 보이는지 확인
- Vanilla 탭(건축 블록 등)에도 추가한 아이템이 보이는지 확인
요약
DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MODID)로 탭 레지스트리 바구니를 만듭니다.CreativeModeTab.builder()로 탭을 구성하고displayItems에 아이템을 추가합니다.- 생성자에서
CREATIVE_MODE_TABS.register(modEventBus)를 호출해야 탭이 등록됩니다. - Vanilla 탭에 아이템을 추가할 때는
BuildCreativeModeTabContentsEvent를 씁니다. - 구식
ItemGroupAPI는 NeoForge 26에 없습니다.
다음 챕터에서는 아이템에 커스텀 속성(내구도, 스택 크기, 음식 효과 등)을 추가하는 방법을 학습합니다.