티스토리 뷰

728x90

 

 

전체 과정 요약

나만의 아이템을 만드는 과정은 크게 4단계로 나눌 수 있습니다.

  1. 아이템의 특징 정의 (Item.Properties): 아이템이 어떤 성질을 가질지(최대 몇 개까지 겹쳐지는지, 희귀도는 어떤지 등)를 결정합니다.
  2. 아이템 등록 (DeferredRegister): 게임이 이 아이템을 알 수 있도록 '등록'합니다.
  3. 크리에이티브 탭에 추가: 크리에이티브 모드 인벤토리에서 아이템을 쉽게 찾을 수 있도록 배치합니다.
  4. 외형(모델/텍스처) 지정: 아이템이 게임 내에서 어떻게 보일지 이미지를 지정합니다.

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단계: 아이템 '외형' 입히기 (모델과 텍스처)

지금까지는 아이템의 행동과 속성만 정의했습니다. 이제 아이템의 겉모습을 꾸며줄 차례입니다. 이는 코드가 아닌, 특정 폴더에 파일을 추가하는 방식으로 이루어집니다.

  1. 모델 (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 경로에 있는 이미지를 사용해라"는 의미입니다.
  2. 텍스처 (Texture) 파일 만들기: 아이템의 실제 이미지 파일입니다.
    • 위치: src/main/resources/assets/모드ID/textures/item/
    • 파일명: 아이템ID.png (예: example_item.png)
    • 내용: 16x16 크기의 .png 이미지 파일. (직접 그림판이나 포토샵 등으로 그리면 됩니다.)

이 두 파일을 올바른 위치에 넣으면, 게임이 아이템을 렌더링할 때 모델 파일을 읽고, 모델 파일이 알려주는 경로의 텍스처 파일을 찾아서 아이템의 모습으로 보여주게 됩니다.

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/05   »
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
글 보관함