티스토리 뷰
전체 과정 요약
나만의 아이템을 만드는 과정은 크게 4단계로 나눌 수 있습니다.
- 아이템의 특징 정의 (
Item.Properties): 아이템이 어떤 성질을 가질지(최대 몇 개까지 겹쳐지는지, 희귀도는 어떤지 등)를 결정합니다. - 아이템 등록 (
DeferredRegister): 게임이 이 아이템을 알 수 있도록 '등록'합니다. - 크리에이티브 탭에 추가: 크리에이티브 모드 인벤토리에서 아이템을 쉽게 찾을 수 있도록 배치합니다.
- 외형(모델/텍스처) 지정: 아이템이 게임 내에서 어떻게 보일지 이미지를 지정합니다.
1단계: 아이템의 '특징' 정의하기 (Item.Properties)
아이템을 만들기 전에, 그 아이템의 기본적인 '설계 사양'을 먼저 정해야 합니다. 이 '설계 사양'을 Item.Properties라고 부릅니다.
maxStackSize(int size): 아이템이 한 슬롯에 최대 몇 개까지 겹쳐질 수 있는지 설정합니다. (예:maxStackSize(16))rarity(Rarity rarity): 아이템 이름의 색깔로 표현되는 희귀도를 설정합니다. (COMMON(흰색),UNCOMMON(노란색),RARE(하늘색),EPIC(보라색) 중 선택)fireResistant(): 이 아이템이 불이나 용암에 타지 않도록 설정합니다.food(FoodProperties properties): 먹을 수 있는 아이템으로 만들고, 얼마나 허기를 채워주는지 등을 설정합니다.
코드 예시:
// '마법 스크롤' 아이템의 특징을 정의하는 예시
// - 한 번에 최대 1개만 소지 가능
// - 희귀도는 'RARE' (하늘색 이름)
// - 불에 타지 않음
new Item.Properties()
.maxStackSize(1)
.rarity(Rarity.RARE)
.fireResistant();
이렇게 아이템의 기본적인 뼈대를 미리 구상하는 단계입니다.
2단계: 아이템 '등록'하기 (DeferredRegister 활용)
이제 정의한 특징을 가지고 실제 아이템을 만들고, 게임에 '등록'할 차례입니다. 이 과정은 이전에 설명드렸던 DeferredRegister를 그대로 사용합니다.
먼저, 아이템을 등록하기 위한 전용 DeferredRegister를 만듭니다.
// 아이템(Item)들을 등록하기 위한 DeferredRegister 생성
public static final DeferredRegister<Item> ITEMS =
DeferredRegister.create(BuiltInRegistries.ITEM, ExampleMod.MOD_ID);
이제 이 ITEMS 등록기를 사용해 새로운 아이템을 등록합니다.
코드 예시:
// 'EXAMPLE_ITEM' 이라는 이름으로 새 아이템을 등록
public static final DeferredHolder<Item, Item> EXAMPLE_ITEM = ITEMS.register(
"example_item", // 아이템의 고유 ID (게임 내에서 사용될 이름)
() -> new Item( // 아이템 객체를 실제로 생성
new Item.Properties() // 1단계에서 설명한 '특징'을 여기에 정의
.rarity(Rarity.UNCOMMON)
)
);
그리고 가장 중요한 것! 모드의 메인 클래스 생성자에서 이 ITEMS 등록기를 이벤트 버스에 연결해줘야 합니다.
// 모드 메인 클래스의 생성자
public ExampleMod(IEventBus modBus) {
// ... 다른 코드 ...
ITEMS.register(modBus); // 이 코드가 있어야 위에서 등록한 아이템이 실제로 게임에 추가됩니다.
}
3단계: 크리에이티브 탭에 아이템 추가하기
아이템을 등록만 하면 게임에는 존재하지만, 크리에이티브 모드 인벤토리에서는 보이지 않아 테스트하기가 어렵습니다. 따라서 아이템을 원하는 탭에 추가하는 과정이 필요합니다.
BuildCreativeModeTabContentsEvent라는 신호(Event)를 받아서 처리합니다.
코드 예시:
// 이 메소드는 크리에이티브 탭 내용이 구성될 때마다 실행됩니다.
@SubscribeEvent
public void addCreative(BuildCreativeModeTabContentsEvent event) {
// 만약 지금 구성 중인 탭이 '재료' 탭이라면,
if (event.getTabKey() == CreativeModeTabs.INGREDIENTS) {
// 우리가 만든 EXAMPLE_ITEM을 그 탭에 추가합니다.
event.accept(EXAMPLE_ITEM);
}
}
이제 게임을 크리에이티브 모드로 시작하고 '재료' 탭을 열면, 우리가 만든 EXAMPLE_ITEM이 목록에 나타나는 것을 볼 수 있습니다.
4단계: 아이템 '외형' 입히기 (모델과 텍스처)
지금까지는 아이템의 행동과 속성만 정의했습니다. 이제 아이템의 겉모습을 꾸며줄 차례입니다. 이는 코드가 아닌, 특정 폴더에 파일을 추가하는 방식으로 이루어집니다.
- 모델 (Model) 파일 만들기: 아이템이 어떤 텍스처를 사용할지 알려주는 '연결고리' 역할을 합니다.
- 위치:
src/main/resources/assets/모드ID/models/item/ - 파일명:
아이템ID.json(예:example_item.json) - 내용:
이 내용은 "이 아이템은 기본 아이템 형태({ "parent": "item/generated", "textures": { "layer0": "모드ID:item/아이템ID" } }item/generated)를 사용하고, 텍스처는모드ID:item/아이템ID경로에 있는 이미지를 사용해라"는 의미입니다.
- 위치:
- 텍스처 (Texture) 파일 만들기: 아이템의 실제 이미지 파일입니다.
- 위치:
src/main/resources/assets/모드ID/textures/item/ - 파일명:
아이템ID.png(예:example_item.png) - 내용: 16x16 크기의
.png이미지 파일. (직접 그림판이나 포토샵 등으로 그리면 됩니다.)
- 위치:
이 두 파일을 올바른 위치에 넣으면, 게임이 아이템을 렌더링할 때 모델 파일을 읽고, 모델 파일이 알려주는 경로의 텍스처 파일을 찾아서 아이템의 모습으로 보여주게 됩니다.
'마인크래프트 > NeoForge' 카테고리의 다른 글
| NeoForge 모드 개발 환경 설정 (7) | 2025.07.20 |
|---|---|
| NeoForge 서버 로컬 빌드 및 실행 해보기 (1) | 2025.06.06 |
| 네오포지(NeoForge) 및 포지(Forge) 오픈소스 서버 개발 입문 가이드 (3) | 2025.06.05 |
- Total
- Today
- Yesterday
- JVM
- Java
- ai통합
- 스브링부트
- redis
- 타입 안전성
- 자바
- AI 에이전트
- Stack Area
- unreal engjin
- 디자인패턴
- model context protocol
- cqrs
- First-class citizen
- JAVA 프로그래밍
- vite
- MCP
- Claude Agent SDK
- 일급 객체
- 언리얼엔진
- 언리얼엔진5
- generated_body()
- RESTfull
- Subagent
- 카프카 개념
- 코틀린
- 코프링
- method Area
- springai
- Heap Area
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
