Item.Properties — stacksTo, rarity, fireResistant, food, durability
Item.Properties 빌더의 주요 메소드를 학습하고 각 속성이 인게임 아이템에 어떤 효과를 주는지 이해합니다.
Item.Properties — 아이템 속성 빌더
아이템을 등록할 때 ITEMS.registerSimpleItem("x", props -> props.메소드()) 형태를 씁니다. NeoForge 26.1.2에서는 등록 람다가 넘겨주는 Item.Properties(여기서는 props)에 메소드를 체이닝합니다. Item.Properties는 빌더 패턴으로 설계되어 있어서 메소드를 체이닝하면서 아이템의 동작을 세밀하게 조정할 수 있습니다.
1. 빌더 패턴 기본 구조
NeoForge 26.1.2에서는 Item.Properties 인스턴스를 직접 new로 만들지 않습니다. ITEMS.registerSimpleItem / ITEMS.registerItem이 내부에서 Properties.setId(ResourceKey)까지 처리한 props를 람다로 넘겨주므로, 그 props에 필요한 메소드를 체이닝하면 됩니다. (람다 밖에서 new Item.Properties()를 직접 만들면 "id not set"으로 크래시합니다.)
// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java, RUBY 필드
public static final DeferredItem<Item> RUBY =
ITEMS.registerSimpleItem("ruby", p -> p.rarity(Rarity.RARE));메소드를 하나도 체이닝하지 않으면 기본값이 적용됩니다. 기본 아이템은 스택 64개, 흰색 이름, 불에 타는 일반 아이템입니다. registerSimpleItem("first_item")처럼 람다 없이 호출하면 모든 속성이 기본값인 아이템이 됩니다.
2. 주요 속성 메소드
| 메소드 | 효과 | 예시 |
|---|---|---|
stacksTo(int) | 최대 스택 수 설정 | .stacksTo(16) |
rarity(Rarity) | 아이템 이름 색상 | .rarity(Rarity.EPIC) |
fireResistant() | 불·용암 면역 | .fireResistant() |
food(FoodProperties) | 음식 효과 부여 | 챕터 03 참고 |
durability(int) | 내구도 설정 | .durability(100) |
craftRemainder(Item) | 조합 후 남는 아이템 | .craftRemainder(Items.BUCKET) |
3. stacksTo
아이템 하나의 슬롯에 최대 몇 개까지 쌓을 수 있는지 결정합니다. 기본값은 64입니다.
// 희귀 아이템이라 16개만 쌓이도록 — 등록 람다의 props 에 체이닝
ITEMS.registerSimpleItem("ruby_dust", p -> p.stacksTo(16));내구도가 있는 아이템(durability(int) 사용)은 자동으로 스택 1로 고정됩니다. stacksTo와 durability를 동시에 쓰면 빌드 에러가 납니다.
⚠️ stacksTo(0) 시도
p.stacksTo(0) // 무의미 — Minecraft가 무시유효 범위: 1~64. 0이나 음수는 무시되거나 1로 처리됩니다.
4. rarity
아이템 이름의 색상을 결정합니다. 인벤토리에서 마우스를 올렸을 때 보이는 툴팁 이름 색상입니다.
| Rarity 값 | 이름 색상 | 대표 바닐라 아이템 |
|---|---|---|
Rarity.COMMON | 흰색 (기본) | 돌, 나무 |
Rarity.UNCOMMON | 노란색 | 황금 사과 |
Rarity.RARE | 하늘색 | 인챈트된 황금 사과 |
Rarity.EPIC | 보라색 | 용의 숨결 |
ITEMS.registerSimpleItem("epic_gem", p -> p.rarity(Rarity.EPIC));
// 인벤토리에서 아이템 이름이 보라색으로 표시됨5. fireResistant
이 속성을 붙이면 아이템이 불이나 용암에 닿아도 타지 않습니다. 네더라이트 아이템과 같은 동작입니다.
ITEMS.registerSimpleItem("lava_gem", p -> p.fireResistant());
// 용암에 던져도 아이템이 소멸하지 않음플레이어가 착용하거나 들고 있을 때의 불 저항과는 다릅니다. 이 속성은 **아이템 엔티티(바닥에 떨어진 아이템)**가 불에 타지 않는 것입니다.
6. durability
아이템에 내구도를 부여합니다. 내구도가 있는 아이템은 사용할 때마다 내구도가 줄고, 0이 되면 파괴됩니다.
ITEMS.registerSimpleItem("fragile_tool", p -> p.durability(100));
// 최대 내구도 100인 아이템durability를 설정하면 stacksTo는 자동으로 1이 됩니다. 내구도 아이템은 슬롯에 1개만 들어갑니다.
7. craftRemainder
조합대에서 이 아이템을 재료로 쓸 때 소모되지 않고 남는 아이템을 지정합니다. 바닐라에서는 물 양동이를 케이크 재료로 쓰면 빈 양동이가 남는 것과 같은 동작입니다.
ITEMS.registerSimpleItem("filled_flask", p -> p.craftRemainder(Items.BUCKET));
// 조합 후 빈 양동이가 남음8. 조합 예시
// examplemod-template-26.1.2/src/main/java/com/example/examplemod/ExampleMod.java, RUBY 필드
// 루비 — 희귀한 보석 아이템 (registerSimpleItem + props 람다)
public static final DeferredItem<Item> RUBY =
ITEMS.registerSimpleItem("ruby", p -> p.rarity(Rarity.RARE));
// 여러 속성 조합 — props 람다 안에서 메소드를 체이닝한다
public static final DeferredItem<Item> RUBY_CHARM = ITEMS.registerSimpleItem("ruby_charm",
p -> p.stacksTo(16)
.rarity(Rarity.EPIC)
.fireResistant());요약
Item.Properties()는 빌더 패턴. 메소드를 체이닝해서 아이템 동작을 설정합니다.stacksTo(int): 최대 스택 수. 기본 64, 내구도 아이템은 자동 1.rarity(Rarity): 이름 색상. COMMON(흰) → UNCOMMON(노) → RARE(하늘) → EPIC(보라).fireResistant(): 바닥에 떨어진 아이템이 불·용암에 타지 않음.durability(int): 내구도 부여.stacksTo와 동시 사용 불가.craftRemainder(Item): 조합 후 남는 아이템 지정.
다음 챕터에서는 FoodProperties를 사용해서 먹을 수 있는 아이템을 만듭니다.