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

마스터 트랙 #1: 도구 모드 프로젝트 셋업

examplemod-master-projects/tools/ 에서 Ruby/Sapphire 보석 + 4종 도구 + 자체 크리에이티브 탭을 만드는 독립 마스터 모드의 초기 구조를 설정합니다.

마스터 트랙이란?

phase-5까지의 학습을 마쳤다면 이제 실전 독립 모드를 만들 준비가 됐습니다. 마스터 트랙은 네 가지 독립 프로젝트 중 하나를 선택해 완성하는 캡스톤 과정입니다.

이 챕터 시리즈는 도구 모드(Tools Mod) 트랙입니다. 완성 목표는 다음과 같습니다.

  • 🔴 Ruby / 💙 Sapphire: 두 가지 희귀 보석 아이템 (RARE 등급)
  • purity DataComponent: 보석의 순도(0~100)를 저장하는 커스텀 컴포넌트
  • 루비 도구 4종: 곡괭이 · 검 · 도끼 · 삽 (RubyTier 내구도 체계)
  • 자체 크리에이티브 탭: 모드 전용 탭에 모든 아이템 등록
  • 레시피: 보석 → 도구 조합법 데이터팩으로 완성

프로젝트 소스는 examplemod-master-projects/tools/ 에 위치합니다.


프로젝트 구조 확인

마스터 트랙 프로젝트는 학습 코스 템플릿과 완전히 분리된 독립 Gradle 프로젝트입니다.

examplemod-master-projects/
└── tools/
    ├── build.gradle              ← NeoForge ModDev 플러그인 설정
    ├── gradle.properties         ← mod_id=master_tools, mc/neo 버전
    ├── settings.gradle
    ├── gradlew / gradlew.bat
    └── src/
        └── main/
            ├── java/com/example/master/tools/
            │   ├── MasterToolsMod.java   ← 메인 진입점 (이번 챕터)
            │   └── RubyTier.java         ← 도구 티어 정의 (다음 챕터)
            ├── resources/
            │   └── pack.mcmeta
            └── templates/META-INF/
                └── neoforge.mods.toml

examplemod-template-26.1.2/ 와는 별개의 Gradle 프로젝트입니다. 두 프로젝트를 같은 mods/ 디렉토리에 넣을 때 mod_id 가 겹치면 충돌이 발생하므로 주의하세요.


gradle.properties 확인

# examplemod-master-projects/tools/gradle.properties
minecraft_version=26.1.2
minecraft_version_range=[26.1.2]
neo_version=26.1.2.64-beta
 
mod_id=master_tools
mod_name=Master Tools
mod_license=All Rights Reserved
mod_version=1.0.0
mod_group_id=com.example.master.tools

mod_id=master_tools 가 이 모드의 고유 식별자입니다. neoforge.mods.toml 의 modId 와 동일해야 합니다.


MasterToolsMod.java

이번 챕터에서 확인하는 메인 클래스입니다. 아이템 레지스터, 보석 아이템, 도구 4종, DataComponent 레지스터를 선언합니다. 다음 챕터들에서 이 선언을 기반으로 기능을 하나씩 구현합니다.

// examplemod-master-projects/tools/src/main/java/com/example/master/tools/MasterToolsMod.java
package com.example.master.tools;
 
import com.mojang.logging.LogUtils;
import com.mojang.serialization.Codec;
import net.minecraft.core.component.DataComponentType;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.item.*;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.common.Mod;
import net.neoforged.neoforge.registries.DeferredRegister;
import org.slf4j.Logger;
import java.util.function.Supplier;
 
@Mod(MasterToolsMod.MOD_ID)
public class MasterToolsMod {
 
  public static final String MOD_ID = "master_tools";
  public static final Logger LOGGER = LogUtils.getLogger();
 
  // ─── 아이템 레지스터 ────────────────────────────────────────────────────
  public static final DeferredRegister.Items ITEMS =
          DeferredRegister.createItems(MOD_ID);
 
  // ─── 보석 재료 아이템 ───────────────────────────────────────────────────
  /** 루비 — 순도(purity) DataComponent를 가지는 보석 아이템 */
  public static final Supplier<Item> RUBY = ITEMS.registerItem("ruby",
          props -> new Item(props
                  .stacksTo(64)
                  .rarity(Rarity.RARE)));
 
  public static final Supplier<Item> SAPPHIRE = ITEMS.registerItem("sapphire",
          props -> new Item(props
                  .stacksTo(64)
                  .rarity(Rarity.RARE)));
 
  // ─── 루비 도구 4종 ──────────────────────────────────────────────────────
  /**
   * 루비 곡괭이.
   * MC 26.1.2: PickaxeItem 삭제 → ToolMaterial.applyToolProperties() 사용.
   * MINEABLE_WITH_PICKAXE 태그로 곡괭이 채굴 동작 부여.
   */
  public static final Supplier<Item> RUBY_PICKAXE = ITEMS.registerItem("ruby_pickaxe",
          props -> new Item(RubyTier.INSTANCE.applyToolProperties(
                  props,
                  BlockTags.MINEABLE_WITH_PICKAXE,
                  1.0f,   // 공격력 추가치
                  -2.8f,  // 공격 속도
                  0.0f    // 공격 범위 보너스
          )));
 
  /**
   * 루비 검.
   * MC 26.1.2: SwordItem 삭제 → ToolMaterial.applySwordProperties() 사용.
   */
  public static final Supplier<Item> RUBY_SWORD = ITEMS.registerItem("ruby_sword",
          props -> new Item(RubyTier.INSTANCE.applySwordProperties(
                  props,
                  3.0f,   // 기본 공격력
                  -2.4f   // 공격 속도
          )));
 
  public static final Supplier<Item> RUBY_AXE = ITEMS.registerItem("ruby_axe",
          props -> new AxeItem(RubyTier.INSTANCE, 5.0f, -3.1f, props));
 
  public static final Supplier<Item> RUBY_SHOVEL = ITEMS.registerItem("ruby_shovel",
          props -> new ShovelItem(RubyTier.INSTANCE, 1.5f, -3.0f, props));
 
  // ─── DataComponent 레지스터 ─────────────────────────────────────────────
  public static final DeferredRegister.DataComponents COMPONENTS =
          DeferredRegister.createDataComponents(Registries.DATA_COMPONENT_TYPE, MOD_ID);
 
  /**
   * 보석 순도 (0 ~ 100).
   * 순도가 높을수록 다음 챕터에서 도구 내구도 보너스가 증가합니다.
   */
  public static final Supplier<DataComponentType<Integer>> PURITY =
          COMPONENTS.registerComponentType(
                  "purity",
                  builder -> builder
                          .persistent(Codec.INT)
                          .networkSynchronized(ByteBufCodecs.INT));
 
  public MasterToolsMod(IEventBus modEventBus, ModContainer container) {
    LOGGER.info("Master Tools Mod 로드 완료");
 
    ITEMS.register(modEventBus);
    COMPONENTS.register(modEventBus);
  }
}

주요 포인트

선언역할
DeferredRegister.Items ITEMS모든 아이템 지연 등록 — MOD_ID 네임스페이스
DeferredRegister.DataComponents COMPONENTSpurity DataComponent 지연 등록
RUBY, SAPPHIRERarity.RARE 등급의 보석 재료 아이템
RUBY_PICKAXE … RUBY_SHOVELRubyTier.INSTANCE 기반 도구 4종
PURITYCodec.INT + ByteBufCodecs.INT — 서버↔클라이언트 동기화 가능
ITEMS.register(modEventBus)FML 모드 이벤트 버스에 레지스터 등록 — 반드시 생성자에서 호출

Gradle 빌드 확인

build.gradle 에는 NeoForge ModDev 플러그인 2.0.141 과 JDK 25 툴체인이 설정돼 있습니다.

터미널에서 사용 가능한 태스크 목록을 확인하려면:

cd examplemod-master-projects/tools
./gradlew tasks

Build tasks, NeoForge tasks, Verification tasks 그룹이 표시되면 정상입니다. 실제 빌드 검증은 05-finish-build 챕터에서 수행합니다.


⚠️ mod_id 충돌

// ❌ template과 같은 mod_id 사용 → 같은 mods/ 디렉토리에 두 JAR 로드 시 충돌
@Mod("examplemod")
public class MasterToolsMod { ... }
 
// ✅ 고유한 mod_id
@Mod("master_tools")
public class MasterToolsMod { ... }

gradle.properties 의 mod_id 와 neoforge.mods.toml 의 modId 도 반드시 일치해야 합니다. 세 곳 중 하나라도 다르면 FML이 모드를 로드하지 못합니다.


다음 단계

이번 챕터에서는 프로젝트 구조와 메인 클래스 골격을 확인했습니다. 다음 챕터들에서 순차적으로 완성합니다.

  1. 01-ruby-tier — RubyTier.java 구현 (내구도 · 속도 · 공격력)
  2. 02-creative-tab — 자체 크리에이티브 탭 추가
  3. 03-textures-models — 루비/사파이어 텍스처 · 모델
  4. 04-recipes — 조합법 데이터팩
  5. 05-finish-build — 통합 빌드 & 인게임 검증

인게임에서 실제로 아이템을 확인하는 검증은 05-finish-build 챕터에서 진행합니다.

WorldGen Feature 기초 — 광물 생성

데이터팩 3종(configured_feature / placed_feature / biome_modifier)으로 루비 광석을 오버월드 지하에 생성하는 전체 흐름을 학습합니다.

보석 아이템 디자인 — Ruby & Sapphire

DeferredRegister로 Ruby, Sapphire 보석 아이템을 등록하고 DataComponentType으로 순도(purity) 컴포넌트를 설계합니다. 마스터 트랙 도구 제작의 첫 단계입니다.

On this page

마스터 트랙이란?프로젝트 구조 확인gradle.properties 확인MasterToolsMod.java주요 포인트Gradle 빌드 확인다음 단계
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