본문 바로가기

마인크래프트/개발일지

마인크래프트 화폐를 엽전으로 바꿔보자! [JE] - Day 02

오늘은 가장 기초적이면서 성취감을 끌어올릴 수 있도록 화폐를 만들어보도록 하겠습니다.

 

1. 패키지 와 클래스 만들기

  • src/main/java 순으로 트리를 클릭해보면 프로젝트를 만들며 지정해줬던 happy.joseonfarm을 확인해볼 수 있습니다.
  • 오른쪽 클릭 -> 새로 만들기 -> 패키지를 클릭해서 item 이라는 패키지를 만들어줘볼게요.

패키지 만들기

  • 패키지(바구니)를 만들었으니 클래스(아이템)를 만들어보겠습니다.
  • 만들어준 패키지 오른쪽 클릭 -> java 클래스를 선택해서 "ModItems" 이라고 작명을 해줘볼게요
  • 이때 Minecraft Class가 아니라 java 클래스이니 유의해주세요

클래스 만들기

 

2. 클래스 개발하기

  • 코드의 이해를 돕기위해 // 주석을 통해 설명을 적어두었습니다.
package happy.joseonfarm.item;

import happy.joseonfarm.Joseonfarm; // 메인 클래스 경로 확인!
import net.minecraft.world.item.Item;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

public class ModItems {

    // 1. 레지스트리 생성 (Spring의 ApplicationContext 같은 존재)
    // "지금부터 아이템들을 이 객체에 담아두었다가, 게임 켜질 때 한 번에 등록하겠다"는 뜻입니다.
    public static final DeferredRegister<Item> ITEMS =
            DeferredRegister.create(ForgeRegistries.ITEMS, "joseonfarm"); // "joseonfarm"은 아까 정한 MOD ID

    // 2. 엽전(YEOPJEON) 아이템 등록
    // "yeopjeon"이라는 ID로 빈 껍데기 아이템을 등록합니다.
    public static final RegistryObject<Item> YEOPJEON = ITEMS.register("yeopjeon",
            () -> new Item(new Item.Properties()));

    // 3. 이벤트 버스 등록 메서드
    public static void register(IEventBus eventBus) {
        ITEMS.register(eventBus);
    }
}

 

  • 이제 아래와 같이 Joseonfarm 클래스에 우리가 만든 ModItem을 연결해주세요
// JoseonFarm.java 파일 내부

public JoseonFarm() {
    IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();

    // ▼▼▼ 이 코드를 추가해주세요! ▼▼▼
    ModItems.register(modEventBus);
    // ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

    modEventBus.addListener(this::commonSetup);
    // ... 기존 코드들 ...
}

 

3. 테스트

  • 이제 runClient를 통해 실행을 시켜보세요.
  • 게임이 켜지면 [Singleplayer] -> [Create New World] -> [Game Mode: Creative] 로 월드를 하나 파서 들어갑니다.
  • 아직 크리에이티브 탭(인벤토리)에는 안 보일 겁니다. (설정을 안 해서요)
  • 채팅창(T키)을 열고 명령어를 쳐보세요.
    • /give @s joseonfarm:yeopjeon
  • 인벤토리에 item.joseonfarm.yeopjeon 라는 보라색/검은색 체크무니 아이템이 있다면 성공입니다.

  • 텍스처가 없어서 깨져 보이는 게 정상입니다. 아이템이 들어왔다면 성공입니다!

4. 엽전 텍스처 입히기

  • Ctrl + Alt + Shift + S 를 눌러 프로젝트 구조 설정 팝업을 엽니다.
  • 보라색 Resource Folders 를 클릭합니다.
  • 중앙 빨간색 네모 안에 구조처럼 폴더를 생성해줍니다.
    • models의 item은 JSON 파일을 넣게 될 폴더입니다.
    • textures의 item은 이미지 파일을 넣게 될 폴더입니다.
  • 프로젝트 구조 설정 창에서 생성하지 않으면 이상하게 생성되더라구요 참고하세요

  • AI를 사용해 엽전 픽셀을 만들어줍니다. ( 제 경우 제미나이를 활용해 만들었습니다.)
  • 실제 다운로드할 경우 1024 x 1024 사이즈입니다.
  • png파일 오른쪽 클릭 후 그림판을 열어 Ctrl + W, 16 x 16 픽셀 다른이름 저장을 진행해주세요

 

  • models.item 경로 아래 yeopjeon.json 파일을 아래와 같이 작성한 후 저장해주세요.
{
  "parent": "item/generated",
  "textures": {
    "layer0": "joseonfarm:item/yeopjeon"
  }
}

 

5. 텍스쳐 테스트

  • 아래 사진처럼 엽전이 보여진다면 성공입니다!

 

6. 아이템 이름 지어주기

  • 멋진 아이템을 만들었지만 아직 마우스를 대보면 위 사진과 같이 영어로 표시되는걸 확인 할 수 있습니다.
  • src/main/resources/assets/joseonfarm/ 아래 lang 폴더를 만들어주세요.
  • ko_kr.json 파일을 생성한 후 아래와 같이 입력해주세요.
{
  "item.joseonfarm.yeopjeon": "엽전",
  "itemGroup.joseonfarm_tab": "조선농장"
}
  • en_us.json 파일도 생성해주세요. ( 한국어만 필요하면 된다구 생각하지만 마인크래프트는 기본 언어가 영어이기때문에 이게 없으면 영문판 유저는 깨져보여요 ㅠㅠ)
{
  "item.joseonfarm.yeopjeon": "Yeopjeon",
  "itemGroup.joseonfarm_tab": "Joseon Farm"
}

 

7. 다음 게시글

  • 현재까지의 아이템 만들어 실습은 잠시 진행을 멈추고 서버 구축부터 필수 모드 세팅 후 속도를 더 내보도록 할 예정입니다. 
  • 서버 구성 카테고리를 참고해주세요.