User Tools

Site Tools


Sidebar

설치

기초

고급

아이템

블록과 블록 엔티티

액채

엔티티

세계 생성

레시피 타입

기타

이벤트

믹스인

다이네믹 데이터 생성

Minecraft 1.15 튜토리얼

Minecraft 1.14 튜토리얼

기록

ko_kr:tutorial:items

아이템 추가

소개

아이템을 추가하는 것은 모딩에 있어서 가장 첫 번째 단계입니다. 당신은 Item 오브젝트를 추가하고, 등록하고, 텍스쳐를 추가할 것입니다. 아이템의 추가적인 기능을 위해서는 커스텀 아이템 클래스를 만들어야만 할 것입니다. 모든 튜토리얼에서는 tutorial NameSpace를 사용할 것입니다. 다른 Mod ID를 사용하고 싶으시다면, 해당 부분을 수정하셔도 됩니다.

아이템 등록

먼저, 아이템의 인스턴스를 생성합니다. 해당 인스턴스는 Initializer 클래스의 맨 윗 부분에 저장합니다. Item.Settings (또는 FabricFirst) 가 인스턴스 생성자이며, 인벤토리 분류나 내구성, 한칸에 쌓일 수 있는 개수 등의 아이템 정보를 설정할 수 있습니다.

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // 우리의 첫 번째 아이템의 인스턴스
  4. public static final Item FABRIC_ITEM = new Item(new FabricItemSettings().group(ItemGroup.MISC));
  5. [...]
  6. }

새로운 내용을 등록할 때는 바닐라 등록 시스템(레지스트리)을 사용할 것입니다. 기본적인 문법은 Registry#register(Registry Type, Identifier, Content) 입니다. Type은 기본적으로 Registry 클래스에 있으며, Identifier는 내용물을 설정합니다. Content는 당신이 추가하고자 하는 아이템의 인스턴스입니다. 이 함수는 Initialization 진행 중 언제든지 호출될 수 있습니다.

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // 우리의 첫 번째 아이템의 인스턴스
  4. public static final Item FABRIC_ITEM = new Item(new FabricItemSettings().group(ItemGroup.MISC));
  5.  
  6. @Override
  7. public void onInitialize() {
  8. Registry.register(Registry.ITEM, new Identifier("tutorial", "fabric_item"), FABRIC_ITEM);
  9. }
  10. }

자, 이제 첫 번째 아이템이 Minecraft에 추가되었습니다. runClient Gralde task를 실행하여 살펴보세요.

아이템 텍스쳐 추가

텍스쳐를 추가하기 위해서는 아이템 모델 .json 파일과 텍스쳐 이미지가 필요합니다. 이것들은 resource 폴더에 저장될 것이며, 경로는:

  아이템 모델: .../resources/assets/tutorial/models/item/fabric_item.json
  아이템 텍스쳐: .../resources/assets/tutorial/textures/item/fabric_item.png

기본 예시 텍스쳐는 여기에서 찾으실 수 있습니다..

아마도 첫 번째 단계에서 아이템이 성공적으로 추가되었을 때, 게임에서 다음과 같이 텍스쳐를 찾을 수 없다는 오류를 내뱉었을 것입니다:

  [Server-Worker-1/WARN]: Unable to load model: 'tutorial:fabric_item#inventory' referenced from: tutorial:fabric_item#inventory: java.io.FileNotFoundException: tutorial:models/item/fabric_item.json

It conveniently tells you exactly where it expects your asset[s] to be found– when in doubt, check the log.

가장 기본적인 아이템 모델 형식:

{
  "parent": "item/generated",
  "textures": {
    "layer0": "tutorial:item/fabric_item"
  }
}

Parent는 손에서 어떻게 아이템이 렌더링되는지를 정할 수 있으며, 이는 블럭 아이템과 같은 경우에서 유용하게 쓰일 수 있습니다. “item/handheld”로 설정하면 텍스쳐의 좌측 하단 부분을 손이 들게 됩니다. textures/layer0은 이미지 파일의 경로입니다.

최종적으로 텍스쳐가 적용된 아이템:

아이템 클래스 생성

아이템에 대해 추가적인 기능을 넣기 위해서는, 아이템 클래스를 생성하여야 합니다. 기본적인 클래스 생성자는 Item.Settings 오브젝트를 필요로 합니다.

  1. public class FabricItem extends Item {
  2.  
  3. public FabricItem(Settings settings) {
  4. super(settings);
  5. }
  6. }

아이템을 사용하면 소리가 나는 예시입니다:

  1. public class FabricItem extends Item {
  2.  
  3. public FabricItem(Settings settings) {
  4. super(settings);
  5. }
  6.  
  7. @Override
  8. public TypedActionResult<ItemStack> use(World world, PlayerEntity playerEntity, Hand hand) {
  9. playerEntity.playSound(SoundEvents.BLOCK_WOOL_BREAK, 1.0F, 1.0F);
  10. return TypedActionResult.success(playerEntity.getStackInHand(hand));
  11. }
  12. }

원래의 Item 오브젝트를 새로 만든 아이템 클래스로 바꿔주세요:

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // an instance of our new item
  4. public static final FabricItem FABRIC_ITEM = new FabricItem(new FabricItemSettings().group(ItemGroup.MISC));
  5. [...]
  6. }

여기까지 잘 따라왔다면, 아이템을 사용하였을 때 소리가 들릴 것입니다.

아이템이 한칸에 쌓일 수 있는 개수를 조절하고 싶으면?

여기서 우리는 쌓일 수 있는 개수를 조절하기 위해서 FabricItemSettings 안에 있는 maxCount(int size)를 사용할 것입니다. 만약 해당 아이템의 내구도가 존재한다면 이를 조정할 수 없으며, 게임에서는 RuntimeException 오류가 나올 것입니다.

  1. public class ExampleMod implements ModInitializer {
  2.  
  3. // An instance of our new item, where the maximum stack size is 16
  4. public static final FabricItem FABRIC_ITEM = new FabricItem(new FabricItemSettings().group(ItemGroup.MISC).maxCount(16));
  5. [...]
  6. }

다음 단계

ko_kr/tutorial/items.txt · Last modified: 2021/03/02 16:23 by hurdoo