안녕하세요 로페카 최강 귀염둥이 럽홀입니다.


이번에는 클래스를 추가하거나 패키지를 만드는 부분은 안보여드리고 텍스트로만 적겠습니다.

제가 너무 힘들고.. 이번엔 제가 먼저 짜고 따로 강의를 드리는거라서 어쩔수가 없습니다.


이전 강의때 만든 정성을 갈아 만든 모델 텍스쳐는 여기다 넣어둡시다.

src/main/resources/assets/loveholytech/textures/blocks 입니다.




패키지와 클래스입니다. 이대로 만들어주시면 됩니다.

여기다가 저번에 JAVA로 저장한 내용을 넣고 약간만 변경시켜주시면 됩니다.



빨간색 체크되어 있는 부분은 원본 소스가 원래 에러를 뿜뿜하기 때문에 이렇게 수정을 해주셔야 합니다.

그리고 네모 부분은 우리가 렌더를 사용하기 위해서 필요한 부분인데 새로 짠 부분입니다.

setRotation은 저번에 썼던 techne 프로그램에서 파란색 구를 중심으로 돌아가는 부분입니다.

Shape2와 Shape3이 어처구니 부분이였으니 이 부분은 돌려줘야 하겠죠?


이제 TileEntityHandmill 부분입니다. 뭔가 추가된게 많죠?

틱 처리 부분(updateEntity)에는 rotation이 6.4를 넘으면 0으로 가게 합니다.

rotation는 회전을 관리해주는 변수이고 6.4를 넘었다는것은 한바퀴를 돌았다라는 뜻이기 때문입니다.

그리고 setRotation과 getRotation은 외부에서 rotation의 값에 접근하기 위해서 사용되는 메소드입니다.

그 아래 readFromNBT와 writeToNBT는 블록의 NBT에 내용을 기록하기 위해 사용됩니다.

그 밑에 두개의 메소드는 서버와 클라이언트 사이에 있는 데이터를 통합시키기 위해서 사용되는 부분입니다. 꼭 추가하셔야 합니다.



렌더링을 위한 패키지 loveholy.loveholytech.render 를 만들어줍시다.

그리고 밑에 있는 아이템 렌더링을 맡는 ItemRenderHandmill 과 RenderHandmill 부분을 생성합니다.

이제 렌더링을 맡는 RenderHandmill을 편집합시다.

ResourceLocation texture를 선언하여 아까 저장해놨던 경로를 입력해주시면 됩니다.


나머지 부분은 공간을 확보하고 텍스쳐를 입힌 다음에

타일엔티티에서 회전값을 받아서 모델을 렌더링하는 부분입니다.


ItemRenderHandmill 부분입니다.

아이템을 렌더링할때에는 좀 더 작게 렌더링해야 하기 떄문에 특수한 처리가 필요합니다.

이렇게 적어두시면 됩니다.


BlockHandmill 부분도 꽤 손을 봤습니다.

onBlockActivated는 오른쪽 클릭을 했을때 인데

이 부분에서 클릭했을때 회전값을 올려주기로 했습니다.

그리고 getRenderType은 따로 렌더링 하고 있다고 하기 위해서 -1을 리턴하였고

이게 완전히 네모 모양인가를 알려주는 메소드에도 마찬가지로 false

이게 일반 블록 렌더링을 쓸건지 물어보는 부분도 마찬가지로 false를 하게 해놨습니다.



렌더링을 위해서 이게 클라이언트인지, 서버인지 가려주는 부분이 필요합니다.

그 역할이 proxy라는 놈들이 해주는데요. 이 패키지를 추가하고

두개의 클래스를 추가해줍시다.


CommonProxy 부분입니다. 

여긴 메소드가 있다~ 라는 것만 알려주면 되기 떄문에 내용은 텅텅 비워도 괜찮습니다.



ClientProxy 부분입니다. Client만 사용하는 것들을 여기다가 구현을 하시면 되는데요.

일딴 렌더러를 만들고 그걸 레지스트리에 등록을 합니다.

그리고 마찬가지로 아이템도 등록을 해주어야겠죠.



LoveHolyTech 클래스 부분으로 넘어와서 이 빨간색 상자 세개를 꼭 추가시켜줍니다.

맨 위에 부분은 별 상관이 없는데(나중에 쓰게 될거 같아서 넣었는데 쓰게 되면 설명해드리겠습니다.)

두번째 상자 부분은 이제 등록된 부분을 어딜 참고를 할지 선택하는 부분입니다.

그리고 세번째는 렌더러를 호출하는 부분이죠.


자 이제 완성. 실행해볼까염? ㅎㅎ



돌아라 낙오자여



안녕하냐해. 럽홀이다헤.


Techne라는 프로그램을 이용해서 모델을 만들어보도록 하겠습니다.


Techne는 


Techne.zip


를 눌러서 다운받으시면 됩니다.



적당하게 만듭니다. 저기는 width랑 height이 64/32로 나와있는데 128 / 64로 만듭시다.



적당하게 큐브를 만듭니다.



두부를 만듭니다(일본에는 stone을 두부라고 부릅니다. 우리가 말도 안되는 꾸븐돌이라고 부르듯)

왼쪽에 보시면 여러가지 값을 입력해두는 부분이 있는데 하나 하나씩 설명 드리곘습니다.

Dimensions

크기 입니다. 순서대로 x y z의 크기입니다. 저는 지상에서 높이 y 10정도 그리고 가로 세로가 16으로 꽉 차는 두부를 만들었습니다.

Position

저기 보이는 파란색 공의 위치입니다. 저는 14로 두었습니다.

Offset

두부와 공과의 위치입니다. 저는 저 파란색 공이 중앙에 위치하게 설정해놨습니다.

Offset

오른쪽 상단에 보면 텍스쳐가 있습니다.이걸 옮겨주는겁니다. 저는 일단 이 두부를 만드는건 기본값으로 설정해놨습니다.


맷돌을 만들려면 어처구니가 필요하겠졈. 어처구니를 만들어봅시다.



이미지 재탕 ><




짜잔. 이렇게 Cube를 2개 더 만들어서 어처구니를 만들었습니다.

일딴 어처구니의 텍스쳐 오프셋을 조금 이동시키겠습니다.


Shape2의 offset 위치입니다.

Shape3의 offset 위치입니다.


이제 텍스쳐를 뒤집어 씌워봅시다.



지금 있는 텍스쳐 맵을 저장을 합니다.




T윗부분

B아랫부분

L왼쪽

F앞쪽

R오른쪽

B뒤쪽



정성을 갈아 넣어라



텍스쳐를 불러들여와봅시다.




예상 외로 그렇게 극혐이진 않습니다.



이제 자바로 저장해서 다음 강좌때 써먹으면 됩니다.


Incommmmmmmmmmmmmmmming!!!!



잇힝 ㅇ럽홀



저번에 말씀드렸다시피 레지스트리 부분을 싹 다 넘겨버렸습니다.


넘겨진 부분의 소스입니다. 참 보기 좋아졌졈.



클래스를 하나 만듭시다. 이게 나중에 기계가 될거에요.



블록 이름은 핸드밀... 맷돌이라는 뜻이졈



소스에 주석을 대충 떡칠해봤습니다. 아직 타일 엔티티를 추가 안시켰으니 보통 블럭이랑 소스가 거진 다를게 없는데

icon 부분이 배열로 선언되어 있습니다. 이건 왜냐? 나중에 보심 알게 됩니다.



패키지를 하나 만듭니다.



패키지 이름은 타일엔티티. 타일엔티티를 모아둘 패키지입니다.



타일엔티티에 클래스를 하나 만듭시다.



핸드밀이 가지는 타일엔티티입니다.


간단하게 틱이 연산되는 부분에 volume값을 계속 올려주다가 5000이 넘으면 다시 볼륨값을 0으로 셋하는 부분을 짰습니다.

밑에 부분은 볼륨에 접근하는 부분이구요. 간단하죠?




다시 블록으로 돌아와서.. 아까 오타난 protected를 public으로 고쳐줍니다 (ㅠㅠ)

그리고 생성자의 안쪽 4번째 줄을 보면 타일엔티티를 등록하는 부분이 있습니다. 중요하니 꼭 넣으세염!

그리고 타일 엔티티를 생성하는 부분입니다. 이렇게 리턴을 해주시면 됩니다.

다음에는 onBlockActivated라는 메소드인데요. 

이 메소드는 블록이 활성화되었을때(즉 오른쪽 클릭을 하였을 때) 작동하는 메소드입니다.

저는 그 작동된 곳에 타일엔티티(당연히 그 블록은 죽었다 깨어나도 핸드밀이라는 타일 엔티티를 가지겠졈)를 생성하고

volum값을 받아와서 플레이어에게 출력시켜주는 코드를 짰습니다.



핸드밀의 텍스쳐부분은 이렇게 만들었습니다. 나중에 보시면 이해하실거에염.




이것도 역시 Blocks에 등록시켜주어야 합니다.



짜잔!

정면에서 찍은 부분입니다.



오른쪽에서 쳐다봤습니다.



뒷면에서 쳐다봤습니다.



아랫면입니다.


즉 아이콘을 등록시키는 부분과 getIcon을 보면

이게 면 마다 다른 텍스쳐를 입힐수 있다는 겁니다(!!!!!!!)

우왕 짱이다.




오른쪽 클릭을 하니 Volume값을 계속 출력을 해줍니다.


오옹. 다음엔 커스텀 텍스쳐를 한번 입혀보죵.



럽홀하세요. 안녕입니다.



클래스를 하나 추가해줍시다.


Registry를 관리하는 클래스를 하나 추가해봅시다. 나중에 여유나면 Registry 여기로 다 옮겨야겠군요.



요런 정적 메소드를 하나 만듭니다. 설명은 주석으로 되어있죠?



메인에서 init 이벤트일때 Furnace 레시피를 추가하도록 합시다.


구워진다



구워졌다.


+ Recent posts