NeoForge 26.1 Docs
  • 문서
  • 노트
NeoForge 26.1
NeoForge 26.1
v26.1
학습 진도
0 / 77 챕터 완료방문 0
첫 블록 등록 — first_blockBlockBehaviour.Properties — strength, lightLevel, sound, requiresCorrectToolForDropsblockstate JSON과 모델 JSON특수 블록 타입 (계단·슬랩·펜스)블록 이벤트 — use, onPlace, onRemove루트 테이블 — 블록 드롭 JSON 직접 작성
블록

루트 테이블 — 블록 드롭 JSON 직접 작성

data/<modId>/loot_table/blocks/ 경로에 JSON을 직접 작성해 블록 채굴 드롭을 정의합니다. 단순 드롭, 변동 드롭, Fortune 보너스, 올바른 도구 조건까지 다룹니다.

루트 테이블 — 블록 드롭 JSON 직접 작성

⚠️ datagen 의존 챕터 이 챕터의 일부 코드는 runData Gradle 태스크로 JSON 리소스를 생성해야 동작합니다. 현재 예제 모드 프로젝트에 datagen 인프라가 포함되지 않아 별도 PR(#datagen-infrastructure)로 검증 예정입니다.

블록을 채굴했을 때 무엇이 떨어질지는 **루트 테이블(loot table)**이 결정합니다. NeoForge 26에서는 data/<modId>/loot_table/blocks/<block_name>.json 파일 하나로 드롭 규칙 전체를 정의합니다.

이 챕터에서는 JSON을 직접 손으로 작성하는 방법을 다룹니다. DataGen으로 자동 생성하는 방법은 appendix-datagen에서 별도로 다룹니다.


1. 루트 테이블 파일 위치

src/main/resources/
└── data/
    └── examplemod/
        └── loot_table/
            └── blocks/
                ├── first_block.json     ← first_block 드롭 규칙
                └── ruby_ore.json        ← ruby_ore 드롭 규칙

경로 규칙: data/<modId>/loot_table/blocks/<블록 등록명>.json

블록 등록명은 BLOCKS.registerSimpleBlock("first_block", ...) 에서 쓴 문자열과 정확히 일치해야 합니다.


2. 단순 드롭 — 블록 자체를 1개 드롭

first_block을 채굴하면 examplemod:first_block 아이템이 1개 떨어지는 가장 기본적인 루트 테이블입니다.

// src/main/resources/data/examplemod/loot_table/blocks/first_block.json
{
  "type": "minecraft:block",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "examplemod:first_block"
        }
      ],
      "conditions": [
        {
          "condition": "minecraft:survives_explosion"
        }
      ]
    }
  ]
}

각 필드 설명:

필드역할
type: "minecraft:block"블록 루트 테이블임을 선언
pools드롭 풀 목록. 각 풀은 독립적으로 굴림
rolls: 1이 풀에서 항목을 1번 뽑음
entries뽑힐 수 있는 항목 목록
type: "minecraft:item"아이템 드롭 항목
name드롭할 아이템의 Identifier
conditions드롭 조건 목록
minecraft:survives_explosion폭발로 파괴될 때 드롭 확률을 줄임 (TNT 등)

survives_explosion 조건이 없으면 TNT로 터뜨려도 100% 드롭됩니다. 일반 블록에는 항상 추가하는 것이 관례입니다.


3. 광물 드롭 — 변동 수량 + Fortune 보너스

루비 광석(ruby_ore)처럼 채굴 시 원석 아이템을 드롭하고 Fortune 인첸트로 수량이 늘어나는 패턴입니다.

// src/main/resources/data/examplemod/loot_table/blocks/ruby_ore.json
{
  "type": "minecraft:block",
  "pools": [
    {
      "rolls": 1,
      "entries": [
        {
          "type": "minecraft:item",
          "name": "examplemod:ruby",
          "functions": [
            {
              "function": "minecraft:set_count",
              "count": {
                "type": "minecraft:uniform",
                "min": 1,
                "max": 3
              }
            },
            {
              "function": "minecraft:apply_bonus",
              "enchantment": "minecraft:fortune",
              "formula": "minecraft:ore_drops"
            }
          ]
        }
      ],
      "conditions": [
        {
          "condition": "minecraft:survives_explosion"
        }
      ]
    }
  ]
}

functions 배열은 드롭 아이템에 후처리를 적용합니다. 순서대로 실행됩니다.

함수역할
minecraft:set_count드롭 수량 설정. uniform은 min~max 사이 균등 분포
minecraft:apply_bonus인첸트 보너스 적용
enchantment: "minecraft:fortune"Fortune 인첸트를 기준으로 계산
formula: "minecraft:ore_drops"바닐라 광물 드롭 공식 (Fortune 레벨에 따라 배수 증가)

4. 올바른 도구 조건 — requiresCorrectToolForDrops

ruby_ore처럼 곡괭이로만 채굴해야 드롭이 되게 하려면 세 가지를 함께 설정해야 합니다.

4-1. Block Properties에 플래그 추가

// ExampleMod.java — ruby_ore 등록 시
public static final DeferredBlock<Block> RUBY_ORE = BLOCKS.registerBlock("ruby_ore", Block::new,
    p -> p.strength(3.0f, 3.0f)
        .requiresCorrectToolForDrops()   // 올바른 도구 없으면 드롭 없음
        .mapColor(MapColor.STONE));

requiresCorrectToolForDrops()를 설정하면 올바른 도구 없이 채굴 시 루트 테이블 자체가 실행되지 않습니다.

4-2. 채굴 가능 블록 태그

경로: src/main/resources/data/minecraft/tags/block/mineable/pickaxe.json

{
  "replace": false,
  "values": [
    "examplemod:ruby_ore"
  ]
}

이 태그가 없으면 곡괭이로 채굴해도 "올바른 도구"로 인식되지 않습니다.

4-3. 필요 티어 태그

경로: src/main/resources/data/minecraft/tags/block/needs_iron_tool.json

{
  "replace": false,
  "values": [
    "examplemod:ruby_ore"
  ]
}

needs_iron_tool 태그가 없으면 나무 곡괭이로도 채굴됩니다. 티어 태그 종류:

태그최소 도구
needs_stone_tool돌 곡괭이 이상
needs_iron_tool철 곡괭이 이상
needs_diamond_tool다이아몬드 곡괭이 이상

5. 안티패턴 — 루트 JSON 누락

⚠️ 루트 JSON 누락

data/examplemod/loot_table/blocks/first_block.json 파일이 없으면:

  • 채굴해도 아무 드롭 없음 (빈 드롭)
  • 게임은 정상 동작 (크래시 없음)
  • 콘솔에 경고도 없어서 원인 파악이 어려움

새 블록을 등록할 때마다 루트 JSON을 함께 추가하세요.


6. DataGen 대안

JSON을 직접 작성하는 대신 Java 코드로 루트 테이블을 생성하는 DataGen 방식도 있습니다. 파일 수가 많아지면 DataGen이 유지보수에 유리합니다. 자세한 내용은 appendix-datagen — 루트 테이블 DataGen을 참고하세요.


요약

단계파일내용
1loot_table/blocks/first_block.json단순 드롭 + survives_explosion 조건
2loot_table/blocks/ruby_ore.json변동 수량 + Fortune 보너스
3ExampleMod.javarequiresCorrectToolForDrops() 추가
4tags/block/mineable/pickaxe.json곡괭이 채굴 가능 태그
5tags/block/needs_iron_tool.json철 곡괭이 이상 필요 태그

다음 챕터에서는 블록에 커스텀 BlockEntity를 붙여 데이터를 저장하는 방법을 학습합니다.

블록 이벤트 — use, onPlace, onRemove

커스텀 Block 클래스를 만들어 use(우클릭), onPlace(설치), onRemove(제거) 이벤트를 오버라이드하는 방법을 학습합니다. 사이드 분기 가드 패턴도 함께 다룹니다.

이벤트 핸들러와 @SubscribeEvent

NeoForge 26의 이벤트 핸들러 3가지 패턴(@EventBusSubscriber, addListener, register)과 올바른 핸들러 시그니처 규칙을 설명합니다.

On this page

루트 테이블 — 블록 드롭 JSON 직접 작성1. 루트 테이블 파일 위치2. 단순 드롭 — 블록 자체를 1개 드롭3. 광물 드롭 — 변동 수량 + Fortune 보너스4. 올바른 도구 조건 — requiresCorrectToolForDrops4-1. Block Properties에 플래그 추가4-2. 채굴 가능 블록 태그4-3. 필요 티어 태그5. 안티패턴 — 루트 JSON 누락6. DataGen 대안요약
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