음식 아이템과 FoodProperties
FoodProperties.Builder 패턴으로 먹을 수 있는 아이템을 만들고, nutrition·saturationModifier·effect 등 주요 메소드를 학습합니다.
음식 아이템과 FoodProperties
Item.Properties에 .food(FoodProperties) 를 체이닝하면 아이템을 먹을 수 있게 됩니다. FoodProperties는 별도의 빌더로 구성하며, 배고픔 회복량·포만감·상태 효과 등을 세밀하게 조정할 수 있습니다.
1. FoodProperties.Builder 기본 구조
FoodProperties는 new FoodProperties.Builder()로 시작해서 메소드를 체이닝한 뒤 .build()로 완성합니다. 완성된 FoodProperties 인스턴스를 Item.Properties().food(...) 에 넘깁니다.
// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java
public static final FoodProperties APPLE_FOOD = new FoodProperties.Builder()
.nutrition(4)
.saturationModifier(0.3f)
.alwaysEdible()
.effect(() -> new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 0.5f)
.build();
public static final DeferredItem<Item> APPLE = ITEMS.registerSimpleItem("apple",
p -> p.food(APPLE_FOOD));FoodProperties 인스턴스를 별도 상수로 분리하면 여러 아이템이 같은 음식 속성을 공유할 때 편리합니다.
2. 빌더 메소드 표
| 메소드 | 타입 | 설명 |
|---|---|---|
nutrition(int) | 필수 | 배고픔 회복량 (하트 반 칸 = 1) |
saturationModifier(float) | 필수 | 포만감 계수. 실제 포만감 = nutrition × saturationModifier × 2 |
alwaysEdible() | 선택 | 배고프지 않아도 먹을 수 있음 (황금 사과처럼) |
effect(Supplier<MobEffectInstance>, float) | 선택 | 먹었을 때 적용할 상태 효과 + 확률 (0.0~1.0) |
fast() | 선택 | 먹는 속도가 빨라짐 (건조 해초처럼) |
3. nutrition과 saturationModifier
nutrition은 배고픔 바에서 회복되는 칸 수입니다. 배고픔 바 한 칸이 2이므로, nutrition(4)는 두 칸을 채웁니다.
saturationModifier는 포만감 계수입니다. 포만감이 높을수록 배고픔이 다시 줄어드는 속도가 느려집니다. 바닐라 기준으로 빵은 0.6f, 스테이크는 0.8f입니다.
// 가벼운 간식 — 배고픔 2칸, 포만감 낮음
new FoodProperties.Builder()
.nutrition(4)
.saturationModifier(0.3f)
.build();
// 든든한 식사 — 배고픔 4칸, 포만감 높음
new FoodProperties.Builder()
.nutrition(8)
.saturationModifier(0.8f)
.build();4. alwaysEdible
기본적으로 배고픔 바가 가득 차 있으면 음식을 먹을 수 없습니다. alwaysEdible()을 붙이면 배고프지 않아도 먹을 수 있습니다. 황금 사과나 인챈트된 황금 사과가 이 방식입니다.
new FoodProperties.Builder()
.nutrition(4)
.saturationModifier(1.2f)
.alwaysEdible()
.build();
// 배고픔 바가 가득 차도 먹을 수 있음5. effect — 상태 효과 부여
effect는 음식을 먹었을 때 플레이어에게 상태 효과를 줍니다. 첫 번째 인자는 MobEffectInstance를 반환하는 Supplier, 두 번째 인자는 적용 확률(0.0~1.0)입니다.
// 재생 효과 50% 확률, 5초(100틱), 레벨 1(0-indexed)
.effect(() -> new MobEffectInstance(MobEffects.REGENERATION, 100, 0), 0.5f)
// 속도 증가 100% 확률, 10초(200틱), 레벨 1
.effect(() -> new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 200, 0), 1.0f)MobEffectInstance 생성자: (효과 타입, 지속 틱, 레벨). 레벨은 0-indexed라서 레벨 1 효과는 0을 씁니다.
자주 쓰는 MobEffects
| 상수 | 효과 |
|---|---|
MobEffects.REGENERATION | 재생 |
MobEffects.MOVEMENT_SPEED | 속도 증가 |
MobEffects.JUMP | 점프 강화 |
MobEffects.NIGHT_VISION | 야간 투시 |
MobEffects.DAMAGE_BOOST | 힘 증가 |
MobEffects.ABSORPTION | 흡수 |
⚠️ effect chance — 확률 혼동 주의
.effect(..., 0.5f)는 50% 확률로 효과가 적용됩니다. 1.0f가 100%입니다. 매번 같은 효과를 원하면 반드시.effect(..., 1.0f)를 사용하세요. 0.5f로 설정하면 절반의 경우에는 아무 효과도 붙지 않습니다.
6. fast
fast()를 붙이면 먹는 애니메이션이 빨라집니다. 바닐라에서 건조 해초가 이 방식입니다. 전투 중에도 빠르게 먹어야 하는 아이템에 적합합니다.
new FoodProperties.Builder()
.nutrition(2)
.saturationModifier(0.1f)
.fast()
.build();7. 전체 예시 — 마법 사과
// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java
public static final FoodProperties MAGIC_APPLE_FOOD = new FoodProperties.Builder()
.nutrition(6)
.saturationModifier(1.2f)
.alwaysEdible()
.effect(() -> new MobEffectInstance(MobEffects.REGENERATION, 200, 1), 1.0f)
.effect(() -> new MobEffectInstance(MobEffects.MOVEMENT_SPEED, 400, 0), 0.5f)
.build();
public static final DeferredItem<Item> MAGIC_APPLE = ITEMS.registerSimpleItem("magic_apple",
p -> p.food(MAGIC_APPLE_FOOD)
.rarity(Rarity.RARE));8. 인게임 시연
서바이벌 모드에서 음식 아이템을 들고 우측 마우스 버튼을 길게 누르면 먹는 애니메이션이 재생됩니다. 다 먹으면 배고픔 바가 회복되고, effect를 설정했다면 상태 효과 아이콘이 화면 우측에 나타납니다.
인게임 캡처 및 동작 검증은 통합 검증 wave에서 진행합니다.
요약
FoodProperties.Builder()로 음식 속성을 구성하고.build()로 완성합니다.nutrition(int): 배고픔 회복량. 바 한 칸 = 2.saturationModifier(float): 포만감 계수. 높을수록 배고픔이 천천히 줄어듭니다.alwaysEdible(): 배고프지 않아도 먹을 수 있습니다.effect(Supplier, float): 상태 효과 + 적용 확률. 1.0f = 100%.fast(): 먹는 속도가 빨라집니다.- 완성된
FoodProperties는Item.Properties().food(...)에 넘깁니다.
다음 챕터에서는 커스텀 아이템 클래스를 만들어 우클릭 동작을 직접 구현합니다.
모드 전용 크리에이티브 탭 만들기
CreativeModeTab.Builder로 모드 전용 크리에이티브 탭을 등록하고 displayItems에 아이템들을 추가하는 방법, BuildCreativeModeTabContentsEvent로 Vanilla 탭에 추가하는 방법을 학습합니다.
도구 아이템 — Tier 시스템과 4종 도구 등록
NeoForge 26.1.2의 도구 아이템 등록을 학습합니다. PickaxeItem·SwordItem은 삭제되어 ToolMaterial.applyToolProperties/applySwordProperties로 대체되고, AxeItem·ShovelItem은 ToolMaterial을 받습니다.