NeoForge 26.1 Docs
  • 문서
  • 노트
NeoForge 26.1
NeoForge 26.1
v26.1
학습 진도
0 / 77 챕터 완료방문 0
마스터 트랙 #1: 도구 모드 프로젝트 셋업보석 아이템 디자인 — Ruby & Sapphire커스텀 ToolTier + 루비 도구 4종모드 전용 크리에이티브 탭조합 레시피 + 아이템 태그모드 마무리 + 빌드 JAR
마스터도구

모드 전용 크리에이티브 탭

DeferredRegister로 모드 전용 CreativeModeTab을 등록하고, BuildCreativeModeTabContentsEvent로 바닐라 탭에도 아이템을 추가하는 방법을 배웁니다.

크리에이티브 모드에서 모드 아이템을 찾으려면 탭이 필요합니다. 바닐라 탭에 섞어 넣을 수도 있지만, 모드 규모가 커질수록 전용 탭 하나가 훨씬 깔끔합니다. 이 챕터에서는 두 가지를 모두 다룹니다.


CreativeModeTab 등록 구조

NeoForge에서 크리에이티브 탭은 Registries.CREATIVE_MODE_TAB 레지스트리에 등록합니다. 아이템과 마찬가지로 DeferredRegister를 사용합니다.

public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS =
    DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MOD_ID);

탭 자체는 CreativeModeTab.builder()로 빌드합니다. 빌더에서 설정할 수 있는 주요 항목은 세 가지입니다.

메소드역할
title(Component)탭 이름 (번역 키 사용 권장)
icon(Supplier<ItemStack>)탭 아이콘 아이템
displayItems(DisplayItemsGenerator)탭에 표시할 아이템 목록

MASTER_TOOLS_TAB 등록

MasterToolsMod.java에 탭 레지스터와 탭 인스턴스를 추가합니다.

// ─── 크리에이티브 탭 레지스터 ────────────────────────────────────────────────
public static final DeferredRegister<CreativeModeTab> CREATIVE_MODE_TABS =
        DeferredRegister.create(Registries.CREATIVE_MODE_TAB, MOD_ID);
 
public static final Supplier<CreativeModeTab> MASTER_TOOLS_TAB = CREATIVE_MODE_TABS.register(
    "master_tools_tab",
    () -> CreativeModeTab.builder()
        .title(Component.translatable("itemGroup.master_tools"))
        .icon(() -> RUBY.get().getDefaultInstance())
        .displayItems((params, output) -> {
            output.accept(RUBY.get());
            output.accept(SAPPHIRE.get());
            output.accept(RUBY_PICKAXE.get());
            output.accept(RUBY_SWORD.get());
            output.accept(RUBY_AXE.get());
            output.accept(RUBY_SHOVEL.get());
        })
        .build()
);

displayItems 람다의 output.accept(item) 순서가 탭 안에서 아이템이 나열되는 순서입니다. 재료 보석을 앞에, 도구를 뒤에 두면 직관적입니다.


생성자에서 레지스터 연결

탭 레지스터를 modEventBus에 연결하지 않으면 탭이 게임에 나타나지 않습니다. 생성자에 한 줄 추가합니다.

public MasterToolsMod(IEventBus modEventBus, ModContainer container) {
    LOGGER.info("Master Tools Mod 로드 완료");
 
    ITEMS.register(modEventBus);
    COMPONENTS.register(modEventBus);
    CREATIVE_MODE_TABS.register(modEventBus);          // 추가
    modEventBus.addListener(MasterToolsMod::buildContents); // 추가
}

CREATIVE_MODE_TABS.register(modEventBus) 한 줄이 없으면 탭 등록 이벤트가 발생하지 않아 탭이 아예 생성되지 않습니다.


바닐라 탭에 아이템 추가 (BuildCreativeModeTabContentsEvent)

모드 전용 탭 외에, 바닐라 재료(Ingredients) 탭에도 루비와 사파이어를 추가하면 탭을 모르는 플레이어도 아이템을 발견할 수 있습니다.

@SubscribeEvent
public static void buildContents(BuildCreativeModeTabContentsEvent event) {
    if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) {
        event.accept(RUBY.get());
        event.accept(SAPPHIRE.get());
    }
}

event.getTabKey()로 어느 탭인지 확인한 뒤 event.accept(item)으로 아이템을 추가합니다. 이 방식은 바닐라 탭뿐 아니라 다른 모드의 탭에도 적용할 수 있습니다.

⚠️ 다른 모드 아이템 탭에 포함 금지

displayItems에 다른 모드의 아이템을 추가하면:

  • 의존성 미선언 시 ClassNotFoundException
  • 모드 간 결합도 증가

항상 자기 모드 아이템만 displayItems에 추가하세요. 바닐라 탭에는 BuildCreativeModeTabContentsEvent만 사용합니다.


lang 파일에 탭 이름 추가

Component.translatable("itemGroup.master_tools")를 사용했으므로 lang 파일에 번역 키를 추가해야 합니다.

assets/master_tools/lang/ko_kr.json

{
  "item.master_tools.ruby": "루비",
  "item.master_tools.sapphire": "사파이어",
  "item.master_tools.ruby_pickaxe": "루비 곡괭이",
  "item.master_tools.ruby_sword": "루비 검",
  "item.master_tools.ruby_axe": "루비 도끼",
  "item.master_tools.ruby_shovel": "루비 삽",
  "itemGroup.master_tools": "마스터 도구"
}

assets/master_tools/lang/en_us.json

{
  "item.master_tools.ruby": "Ruby",
  "item.master_tools.sapphire": "Sapphire",
  "item.master_tools.ruby_pickaxe": "Ruby Pickaxe",
  "item.master_tools.ruby_sword": "Ruby Sword",
  "item.master_tools.ruby_axe": "Ruby Axe",
  "item.master_tools.ruby_shovel": "Ruby Shovel",
  "itemGroup.master_tools": "Master Tools"
}

itemGroup. prefix는 NeoForge 크리에이티브 탭 번역 키 관례입니다. 바닐라도 같은 패턴을 사용합니다 (예: itemGroup.buildingBlocks).


전체 등록 흐름 요약

다이어그램 렌더링 중…

검증 체크리스트

  • CREATIVE_MODE_TABS.register(modEventBus) 생성자에 추가됨
  • modEventBus.addListener(MasterToolsMod::buildContents) 추가됨
  • itemGroup.master_tools 번역 키가 ko_kr.json, en_us.json 양쪽에 있음
  • displayItems에 자기 모드 아이템만 포함됨
  • ./gradlew build 성공

다음 챕터에서는 루비의 PURITY DataComponent를 활용해 순도에 따라 도구 내구도가 달라지는 로직을 구현합니다.

커스텀 ToolTier + 루비 도구 4종

Tier 인터페이스를 직접 구현해 채굴 등급을 정의하고, 루비 곡괭이·검·도끼·삽 4종을 NeoForge DeferredRegister로 등록합니다.

조합 레시피 + 아이템 태그

crafting_shaped·smelting·crafting_shapeless 세 가지 레시피 JSON을 작성하고, 아이템 태그로 재료를 묶어 제련 레시피에 적용합니다.

On this page

CreativeModeTab 등록 구조MASTER_TOOLS_TAB 등록생성자에서 레지스터 연결바닐라 탭에 아이템 추가 (BuildCreativeModeTabContentsEvent)lang 파일에 탭 이름 추가전체 등록 흐름 요약검증 체크리스트
NeoForge 26.1 Docs

NeoForge 26.1 모딩 개발 문서 사이트

GitHubDiscord

문서

  • 문서
  • 노트

GitHub

  • GitHub
  • Discord

© 2026 NeoForge 26.1 Docs. 콘텐츠는 MIT 라이선스로 제공됩니다.

Built with Next.js · Tailwind CSS · shadcn/ui