강의 환경 : forge-1.7.10-10.13.4.1517-1.7.10

 

배경지식 :

1. 아이템스택(Item Stack)

 

선행과정 :

1. 기본 모드 파일

 

강의 목표 :

1. 무형 조합법(Shapeless Recipe)를 추가한다

2. 화로 조합법(Smelting Recipe)를 추가한다

 

1. 조합법

조합법은 자신이 추가한 요소를 플레이어에게 제공하는 유용한 수단입니다. 모드 제작자는 자신이 만든 블록과 아이템을 어떠한 방식으로든 플레이어가 사용할 수 있도록 경로를 만들어야 하는데, 조합법을 추가하지 않는다면 엔티티(Entity)를 통한 드롭이나 명령어, 혹은 정말 특수한 방법을 이용해서라도 추가된 아이템 얻을 수 있게 해야 합니다. 조합법은 플레이어 입장에서도 직관적이고 제작자 입장에서도 추가가 용이합니다.

코드를 살펴보기 전에 유형 조합법(Shaped Recipe)과 무형 조합법(Shapeless Recipe)의 차이점을 먼저 알아보겠습니다. 유형 조합법은 조합의 결과가 재료들의 위치에 종속적인 조합법입니다. 즉, 재료들의 위치가 달라지면 결과가 달라지거나 혹은 사라지는 조합법이죠. 대부분의 조합법이 여기에 포함됩니다. 무형 조합법은 반대로 재료들의 위치가 결과에 영향을 끼치지 않는 조합법입니다. 염색 조합과 같은 "섞는" 조합법들이 여기에 속합니다.

그림 1 무형 조합법(Shapeless Recipe)의 예

그림 2 유형 조합법(Shaped Recipe)의 예

그림 3 화로 조합법(Smelting Recipe)의 예

 

2. Shapeless 조합법 추가하기

Shapeless 조합법을 추가해보도록 하겠습니다. 먼저, 기본 모드 파일이 다음과 같이 설정되어 있다고 가정합니다.

@Mod(modid = "basictutorial", name = "Basic Tutorial", version = "1.0.0")

public class BasicTutorial {

    @SidedProxy(clientSide = "oortcloud.basictutorial.ClientProxy", serverSide = "oortcloud.basictutorial.CommonProxy")

    public static CommonProxy proxy;

    

    @Mod.EventHandler

    public static void preInit(FMLPreInitializationEvent event) {

    }

 

    @Mod.EventHandler

    public static void Init(FMLInitializationEvent event) {

    }

 

    @Mod.EventHandler

    public static void postInit(FMLPostInitializationEvent event) {

    }

}

조합법은 일반적으로 Pre-Initialization 상태에서 추가합니다. 만약 다른 모드로부터 조합법이 영향을 받는다면 Initialization이나 Post-Initialization에서 추가할 수도 있으나, 가능하면 Pre-Initialization에서 추가하는 것이 바람직합니다. 다른 모드에서 여러분이 추가할 조합법을 참조할 수도 있기 때문입니다.

Shapeless 조합법은 다음의 함수를 통해서 추가합니다.

GameRegistry.addShapelessRecipe(ItemStack output, Object... params)

ItemStack output : 조합법의 결과인 ItemStack입니다.

Object... params : 조합법의 재료인 다수의 ItemStack입니다.

output의 아이템 스택은 개수가 반영됩니다. 하지만 params의 아이템 스택은 개수가 반영되지 않습니다. 결과는 코드를 통해 살펴보겠습니다.

    @Mod.EventHandler

    public static void preInit(FMLPreInitializationEvent event) {

        GameRegistry.addShapelessRecipe(new ItemStack(Items.bread, 2), new ItemStack(Items.wheat), new ItemStack(Items.wheat), new ItemStack(Items.sugar));

    }

위의 코드는 다음과 같은 조합법을 추가합니다.

그림 4 추가된 무형 조합법(Shapeless Recipe)

3. 화로 조합법(Smelting Recipe) 추가하기

화로 조합법의 구성요소는 재료 1개와 결과 1개입니다. 따라서 무형 조합법보다 추가가 간단합니다. 사실 무형 조합법에 없는 요소도 있는데, 바로 아이템을 구웠을 때 지급되는 경험치입니다. 즉, 화로 조합법에는 재료, 결과와 함께 경험치 양을 지정해야 합니다.

화로 조합법 또한 무형 조합법과 동일하게 Pre-Initialization에서 추가하는 것이 좋습니다.

화로 조합법은 다음 함수를 통해 추가합니다.

GameRegistry.addSmelting(ItemStack input, ItemStack output, float xp)

ItemStack input : 조합법의 재료가 되는 ItemStack입니다. Item과 Block이 직접 사용될 수도 있습니다.

ItemStack output : 조합법의 결과가 되는 ItemStack입니다.

float xp : 지급되는 경험치 양입니다.

예시를 통해 코드가 어떻게 적용되는지 확인해보도록 하겠습니다.

    @Mod.EventHandler

    public static void preInit(FMLPreInitializationEvent event) {

        GameRegistry.addSmelting(Items.wheat, new ItemStack(Items.bread), 1.0F);

    }

그림 5 추가된 화로 조합법

이로서 화로 조합법도 추가해보았습니다.

+ Recent posts