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

 

배경지식 및 선행과정 :

1. 무형 조합법(Shapeless Recipe) 및 화로 조합법(Smelting Recipe) 추가하기

 

강의 목표 :

1. 유형 조합법(Shaped Recipe)의 구성 요소를 이해한다.

2. 유형 조합법(Shaped Recipe)을 등록한다.

 

1. 유형 조합법

유형 조합법은 조합대의 아이템 배치에 따라 결과물이 바뀌는 조합법입니다. 3*3 이 최대 크기이고 그보다 작은 경우에는 모양은 유지한 채 자유롭게 옮겨도 같은 조합법으로 적용됩니다. 몇몇 조합법은 좌우로 대칭을 시킬 수도 있습니다. 조합법 자체는 항상 직사각형으로 정의되지만, '빈칸'을 설정할 수 있어서 다양한 모양을 가집니다. IC2처럼 해당 모드만의 유형 조합법을 따로 구현한 사례도 있고 광물 사전(Ore Dictionary)을 이용해서 목재와 같이 종류가 다양한 아이템을 모두 받아들이게 만든 조합법도 있습니다.

그림 1유형조합법

 

 

2. 유형 조합법 정의하기

1) 형태 정의하기

우선 유형 조합법을 어떻게 정의하는 지 알아보겠습니다. 유형 조합법은 형태와 구성요소로 이루어져 있습니다. 즉, 어떤 모양으로 어떤 아이템을 놓느냐에 따라 결과가 결정되는 것입니다. 형태를 어떻게 구성하는지 그 원리만 파악하면 각 위치에 아이템을 지정해서 프로그램 상에서 조합법을 추가하는 것은 크게 어렵지 않습니다.

앞서 모든 조합법은 직사각형이 기본 형태라고 말씀드렸습니다. 가로 N, 세로 M의 조합법은 M개의 길이 N짜리 문자열로 그 형태가 정의됩니다. 즉, 직사각형으로 표현한 후 위쪽부터 행 별로 문자열을 늘어놓은 꼴이 됩니다. 말로만 하면 굉장히 복잡하기 때문에 예를 통해 알아보겠습니다.

A

  

A

A

 

A

A

A

위와 같은 조합법이라면 "A ", "AA ", "AAA"으로 적을 수 있습니다. 직사각형의 조건을 맞추기 위해서 공백을 추가한 것을 주의해서 보세요.

 

A

 

B

 

B

이번에는 " A ", "B B"으로 적을 수 있습니다. 반드시 정사각형일 필요도 없습니다. 서로 다른 알파벳은 서로 다른 아이템을 의미합니다. 이번에도 A의 양쪽에 공백이 있으니 주의하세요.

 

A

A

B

B

이 조합법은 "AA", "BB"으로 표기 되고,

A

A

 

B

B

 
   

이 조합법은 "AA ", "BB ", " "으로 표기됩니다. 얼핏 보면 두 조합법이 같아 보이지만 첫 번째 조합법은 크기가 2*2이고, 두 번째 조합법은 3*3입니다. 그렇기 때문에 아래의 조합법은 다음과 같은 배치에서 조합이 되지 않습니다.

그림 2두 조합법의 차이

 

2) 구성 아이템 정의하기

다양한 예를 다루면서 주의점도 파악했기 때문에, 이제 각 문자에 대해서 아이템을 지정하는 방법을 가르쳐드리겠습니다. 형태를 정의하는 과정에서 여러 문자를 사용하여 다른 아이템이란 것을 나타냈기 때문에, 각 문자 별로 구성 아이템을 지정해주면 됩니다. 이때 주의하실 점은 문자열(String)이 아닌 문자(char)에 값을 대응 시켜야 한다는 점입니다.

"aa", "bb", 'a', new ItemStack(Items.potato), 'b', new ItemStack(Items.carrot)

위에서 언급된 조합법을 나타내면 위와 같습니다. 각 문자는 "가 아닌 '을 이용해서 문자(char)로 표현했다는 것을 다시 확인해주시길 바랍니다.

 

 

3. 유형 조합법 추가하기

유형 조합법을 추가하는 위치나 상태는 이전 강의와 동일합니다. 기본 모드 파일도 동일한 상태입니다.

 

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

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

Object... params : 조합법의 형태와 재료를 결정하는 다수의 문자열(String), 문자(char), ItemStack입니다.

조합법을 추가하는 함수도 무형 조합법과 거의 같습니다. 다만 params에 들어갈 인자가 지금까지 살펴본 문자열(String), 문자(char), 아이템스택(Item Stack)의 조합입니다.

구체적인 부분은 위에서 모두 살펴보았기 때문에 간단한 예를 통해 강의를 마무리하도록 하겠습니다. 다음의 코드가 그림에 해당하는 조합법을 추가합니다.

GameRegistry.addShapedRecipe(new ItemStack(Items.apple, 4), "ab", "ba", 'a', new ItemStack(Items.potato), 'b', new ItemStack(Items.carrot));

그림 3조합법 예

+ Recent posts