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 직접 작성
블록

BlockBehaviour.Properties — strength, lightLevel, sound, requiresCorrectToolForDrops

BlockBehaviour.Properties 빌더의 주요 메소드를 학습하고 각 속성이 인게임 블록에 어떤 효과를 주는지 이해합니다.

BlockBehaviour.Properties — 블록 속성 빌더

블록을 등록할 때 BLOCKS.registerBlock("id", Block::new, props -> props...) 형태로 BlockBehaviour.Properties를 변형합니다. BlockBehaviour.Properties는 빌더 패턴으로 설계되어 있어서 메소드를 체이닝하면서 블록의 물리적 동작을 세밀하게 조정할 수 있습니다.


1. 빌더 패턴 기본 구조

registerBlock에 블록 팩토리(Block::new)와 Properties 변형 람다(props -> props...)를 넘깁니다. NeoForge 26.1.2에서는 registerBlock 계열이 내부에서 Properties.setId(...)를 호출하므로, 직접 new Block(Properties.of())를 만들면 "id not set"으로 크래시합니다.

// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java
public static final DeferredBlock<Block> METAL_BLOCK = BLOCKS.registerBlock("metal_block",
    Block::new,
    props -> props.strength(3.5f, 6.0f)
        .lightLevel(s -> 15)
        .sound(SoundType.METAL)
        .requiresCorrectToolForDrops()
        .mapColor(MapColor.METAL));

메소드를 하나도 체이닝하지 않으면 기본값이 적용됩니다. 기본 블록은 채굴 시간 0, 폭발 저항 0, 소리 없음입니다.


2. 주요 속성 메소드

메소드효과예시
strength(h, r)채굴 시간, 폭발 저항.strength(3.5f, 6.0f)
lightLevel(s -> N)발광 (0~15).lightLevel(s -> 15)
sound(SoundType)발자국/채굴 소리.sound(SoundType.METAL)
requiresCorrectToolForDrops()올바른 도구만 drop(괄호 없음)
mapColor(MapColor)지도 색상.mapColor(MapColor.METAL)
noOcclusion()투명도 (유리 등)(괄호 없음)
pushReaction(PushReaction)피스톤 반응.pushReaction(PushReaction.BLOCK)

3. strength

블록의 채굴 시간(hardness)과 폭발 저항(resistance)을 설정합니다. 인수를 하나만 넘기면 두 값이 같아집니다.

// hardness 3.5f, resistance 6.0f
BlockBehaviour.Properties.of().strength(3.5f, 6.0f)
 
// hardness = resistance = 2.0f (단일 인수)
BlockBehaviour.Properties.of().strength(2.0f)

hardness가 -1이면 파괴 불가 블록(베드락 등)이 됩니다.

바닐라 블록hardnessresistance
흙0.5f0.5f
돌1.5f6.0f
철 블록5.0f6.0f
흑요석50.0f1200.0f
베드락-1.0f3600000.0f

4. lightLevel

블록이 방출하는 빛의 세기를 설정합니다. 람다 s -> N에서 s는 BlockState이고 N은 0~15 사이 정수입니다. 블록 상태에 따라 다른 밝기를 줄 수도 있습니다.

// 항상 최대 밝기 (횃불 수준)
BlockBehaviour.Properties.of().lightLevel(s -> 15)
 
// 항상 어두움 (기본값과 동일)
BlockBehaviour.Properties.of().lightLevel(s -> 0)

s를 활용하면 블록 상태(예: 켜짐/꺼짐 프로퍼티)에 따라 밝기를 동적으로 바꿀 수 있습니다.


5. sound

블록을 밟거나 채굴할 때 나는 소리를 설정합니다. SoundType enum에서 선택합니다.

BlockBehaviour.Properties.of().sound(SoundType.METAL)

자주 쓰는 SoundType 값:

SoundType대표 바닐라 블록
SoundType.STONE돌, 조약돌
SoundType.METAL철 블록, 금 블록
SoundType.WOOD나무 판자
SoundType.GLASS유리
SoundType.GRAVEL자갈
SoundType.WET_GRASS잔디, 흙
SoundType.SLIME_BLOCK슬라임 블록
SoundType.AMETHYST자수정 블록

6. requiresCorrectToolForDrops

이 메소드를 붙이면 올바른 도구(곡괭이, 도끼 등)로 채굴해야만 블록이 드롭됩니다.

BlockBehaviour.Properties.of().requiresCorrectToolForDrops()

⚠️ requiresCorrectToolForDrops + 맨손 채굴

.requiresCorrectToolForDrops()  // 곡괭이 필수

맨손으로 채굴 시 블록은 깨지지만 드롭 0개입니다. 해결: 올바른 도구 사용, 또는 mineable 태그 추가 (block tag).


7. mapColor

지도(Map)에서 이 블록이 표시될 색상을 설정합니다. MapColor enum에서 선택합니다.

BlockBehaviour.Properties.of().mapColor(MapColor.METAL)

MapColor는 50개 이상의 값을 제공합니다. 대표적인 것들:

MapColor색상
MapColor.NONE투명 (지도에 표시 안 됨)
MapColor.STONE회색
MapColor.WATER파란색
MapColor.WOOD갈색
MapColor.METAL은색
MapColor.FIRE주황색

⚠️ MaterialColor는 사용 금지

구버전 코드에서 MaterialColor를 볼 수 있지만 NeoForge 26.1에서는 deprecated입니다. 반드시 MapColor를 사용하세요.


8. noOcclusion

블록이 인접한 블록의 면을 가리지 않도록 설정합니다. 유리나 반투명 블록에 필수입니다.

BlockBehaviour.Properties.of().noOcclusion()

이 설정 없이 투명 텍스처를 쓰면 인접 블록의 면이 렌더링되지 않아 검은 면이 보입니다.


9. pushReaction

피스톤이 이 블록을 밀거나 당길 때의 반응을 설정합니다.

BlockBehaviour.Properties.of().pushReaction(PushReaction.BLOCK)
PushReaction동작
PushReaction.NORMAL피스톤이 밀고 당길 수 있음 (기본)
PushReaction.BLOCK피스톤이 밀 수 없음
PushReaction.DESTROY피스톤이 밀면 블록 파괴
PushReaction.IGNORE피스톤이 통과 (공기처럼)

10. 조합 예시

// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java
// 발광 금속 블록 — 곡괭이 필수, 지도에 은색
public static final DeferredBlock<Block> METAL_BLOCK = BLOCKS.registerBlock("metal_block",
    Block::new,
    props -> props.strength(3.5f, 6.0f)
        .lightLevel(s -> 15)
        .sound(SoundType.METAL)
        .requiresCorrectToolForDrops()
        .mapColor(MapColor.METAL));
 
// 유리 블록 — 투명, 피스톤에 파괴됨 (같은 registerBlock 패턴으로 추가 가능)
public static final DeferredBlock<Block> CRYSTAL_BLOCK = BLOCKS.registerBlock("crystal_block",
    Block::new,
    props -> props.strength(0.3f)
        .sound(SoundType.GLASS)
        .noOcclusion()
        .pushReaction(PushReaction.DESTROY));

요약

  • BlockBehaviour.Properties.of()는 빌더 패턴. 메소드를 체이닝해서 블록 동작을 설정합니다.
  • strength(h, r): 채굴 시간과 폭발 저항. hardness -1이면 파괴 불가.
  • lightLevel(s -> N): 발광 세기 0~15. 람다로 블록 상태별 동적 설정 가능.
  • sound(SoundType): 발자국/채굴 소리. STONE, METAL, WOOD, GLASS 등.
  • requiresCorrectToolForDrops(): 올바른 도구 없으면 드롭 0개.
  • mapColor(MapColor): 지도 색상. MaterialColor는 deprecated.
  • noOcclusion(): 투명 블록에 필수. 없으면 인접 면이 검게 보임.
  • pushReaction(PushReaction): 피스톤 반응 제어.

다음 챕터에서는 블록 상태(BlockState)와 프로퍼티를 추가하는 방법을 다룹니다.

첫 블록 등록 — first_block

DeferredRegister.Blocks로 첫 블록을 등록하고, 동반 BlockItem을 ITEMS에 추가해 인벤토리에서 보이게 만드는 전체 과정을 학습합니다.

blockstate JSON과 모델 JSON

블록 상태(blockstate)에 따라 어떤 모델을 표시할지 정의하는 blockstate JSON과, 실제 3D 형태를 결정하는 모델 JSON의 구조와 parent 종류를 학습합니다.

On this page

BlockBehaviour.Properties — 블록 속성 빌더1. 빌더 패턴 기본 구조2. 주요 속성 메소드3. strength4. lightLevel5. sound6. requiresCorrectToolForDrops7. mapColor8. noOcclusion9. pushReaction10. 조합 예시요약
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