안녕 잉여에요
학교 갔다오면 시간이 너무 애매한듯
방학 언제하냐
안녕 앨빈입니다
지난 회에서 차회 예고를 블럭이라 했는데에...
실상 메인 클래스 하나 만들지 않았습니다(!) 그래서 살짝 길어질 듯 한데...
보는 사람 없으니까 상관 없을 지도
준비물 : 저번 시간에 한 거.
선택 준비물 : 필자를 뛰어넘는 자바 지식
0. 메인 클래스 제작
메인 클래스를 만들어 봅시다.
메인 클래스는 모드의 중심, 모드를 돌아가게 해 주는 이벤트들이 모아져 있고,
핵심이라 볼 수 있습니다.
한줄 요약 : 이거 없으면 모드가 노답
우리는 배운 사람이기 때문에 먼저 패키지(폴더 개념)을 만들어 줍시다.
그 후 패키지 내에 당신의 모드의 메인 클래스를 만들어 주세요.
표준형(?)은 모드 이름이라고.
그 후 클래스 대가리에 @Mod 어노테이션을 박아줍시다.
어노테이션이 뭐냐고요? 내가 어떻게 알아
사실 자바 하나도 모르는거 아니냐
아악 돌직구다
틱팀이냐
대충대충 때려맞춰서 @가 붙어있는 듯 합니다. 자세한 건 여담으로
@Mod어노테이션에는 변수(?)가 있는데 먼저 modid, version 등등이 있다 하는데 우리는 이 정도만 알면 됩니다.
나머지는 사치
public static final String으로 선언해주시던가, 아니면 직접 쓰시던가. 저는 당연히 전자를 선호합니다.
이렇게요.
자 그럼 모드의 기초적인 클래스...는 한참 멀었습니다만
Preinit, init, postinit 이벤트를 넣어야 합니다. 물론 위에 @EventHandler 어노테이션 넣어 줘야 하구요.
preinit, init, postinit는 예전에는 안 나왔지만 요즈음에는 포지 로딩하는데 다 나오니 생략
이렇게 넣어주시면 됩니다.
참고로, @EventHandler와 void 메소드, 그리고 저 FML...머시기들, 저것만 만족하면 실행됩니다.
그니까 메소드 이름은 전---혀 상관 없어요.
자, 이제 똑바로 돌아가는지 테스트를 해 볼까요.
당신의 실력을 최대한 발휘해서 로거를 짜 넣으세요..는 나중이고
일단 로깅하는거를 짜 넣으시면 됩니다.
정답
겨우 이거(...)면 됩니다
자바니깐요
실행해 봅시다.
이 버튼을 클릭해 주세요.
당연히 초록색 버튼이지 옆에 있는 화살표 누르지 마세요
그리고 눈을 크게 뜨고 밑 콘솔창에서 뭔가 긴 문구를 찾아보세요
이런 문구가 떠야 하는데
성공했나요. 아 물론 저 문구는 당신이 쓴 것에 따라 다를 수 있습니다.
일단 이게 된 거면 모드 본체, 즉 빠다구는 완성되었습니다(!)
이제 이 글의 주제인 블럭을 만들어 보죠.
1. 블럭
뭐 일단 블럭은 모든 모드에서의 적용 과정이 다 똑같을..거라고 생각합니다.
블럭 객체 생성 -> 게임레지스트리 등록. 엄청 간소화 된..건가. 하여간 포지 짱짱.
일단 블럭의 기본적은 틀은 Block 클래스를 상속받습니다. 으음..역시 실습이 좋겠군요.
배운 사람이니 블럭 패키지를 만들어 줍시다.
그 후, 모드의 블럭 패키지의 메인인 클래스를 만들어 줍시다.
표준형(?)은 역시나 모드이름Blocks.
여기에서는 블럭들의 겍체 생성부터 레지스트리 등록까지 전부 합니다.
뭐 필수는 아니지만, 이게 싫으면 전부 메인 클래스에 때려박던가. 블럭 많아지면 아마 이렇게 할 겁니다.
위에 언급한 저 일 외에는 안 하기 때문에, 여기는 일단 저 일을 하는 void 메소드 하나를 만들어 줍시다.
표준형 : public static void registerBlocks()
입니다. 하여간 일단 만들면 끝 난 거.
이제 뭘 하냐고요, 당연히 블럭 만들어야지
예시로 기계모드의 흔한 광석인 구리 광석을 만들어 봅시다.
구리 광석 클래스를 하나 생성해 주세요. 저 사랑이 떠나가요는 무시좀
광석을 나중에 대량으로 추가하시려면은 대강 지으셔도 됩니다. 갈아엎을거거든요.
자, 빠르게 설명할겁니다 잘 들으세요.
먼저블럭클래스를상속받은뒤에생성자를만든다음슈퍼메소드를넣은후각종메소드를넣어주시면됩니다
헉헉
사진과 함께 천천히 봅시다.
1. 블럭 클래스를 상속받습니다. (extends Block)
2. 생성자를 만들고 안에 Super메소드를 넣어 봅시다.
이때 Super 메소드 내의 변수(?)는 재질을 설정해 줍니다.
실수로 이걸 Wooden으로 설정하면 연료로 쓸 수 있게 됩니다! 그런데 이 미친짓을 누가 하겠냐
사실 오르트에 철 기어를 나무로 한 건 안 비밀, 깃헙 들어가면 다 나오잖아?
3. 각종 메소드를 삽입해 봅시다.
이때 각종 메소드는 크리탭 설정, 단단도(?) 설정, 팔 수 있는 도구 관련 설정이 되겠습니다.
먼저 setCreativeTab 괄호 안에 들어갈 거는 크리에이티브 탭. 추후에 자신의 모드에서 만들 수 있지만
아직 강좌할 게 산더미이므로 넘어가고 다음에 후술하도록 하겠습니다. 잠깐 뭐?
저 위 중 밑에 @Override 붙어있는 건 랭귀지 파일 쓸 때 필요한 메소드. 직접 오버라이딩 해 줘야 할 텐데에에에에
나머지는 뭐 자바이니 스피드웨건에게 맡기죠
사실 모르는거 아냐?
푸욱, 심장 쇼크다!
음 뭐. 이렇게 하면
1. 텍스쳐도 없고
2. 강도도 없고
3. 그걸 캘 수 있는 도구도 없는
블럭이 완성되었습니다! 뭐야 이 내 인생같은 블럭
아 물론 크리탭은 있습니다. 마인크래프트 바닐라 탭 1번째 탭이요
자, 블럭을 만들었습니다. 테스트 해 볼까요?
??
???
??????????
잠깐, 위 쪽 강좌를 다시 보죠
"블럭 객체 생성 -> 게임레지스트리 등록"
"블럭 객체 생성 -> 게임레지스트리 등록"
"게임레지스트리 등록"
그렇습니다. 가장 중요한 것을 빼 먹은 겁니다.
그럼 앞에 생성과 void 메소드 하나만 땡겨놓은 메인 블럭 클래스로 갑시다.
으음... 이 휑 한 곳에
public static Block CopperOre;
를 그 메소드 위에 박아줍시다.
그 후 그 메소드 안에 방금 전 그 CopperOre는 새로운 CopperOre.java 이다! 라고 말을 해주는
CopperOre = new CopperOre();
를 삽입해 주세요.
그 후, 중요한 게임레지스트리에 등록해 줍시다.
GameRegistry.registerBlock(CopperOre, "CopperOre");
일단 왼쪽에 CopperOre는 블럭입니다. 다른 걸로 대체 가능합니다.
오른쪽에 "CopperOre"는 블럭의 이름입니다. 아까전에 grf:CopperOre를 사용했다시피, 뒤쪽에 붙는 이릅입니다.
자, 끝? 실행?
...
망할 포지가 이걸로 끝날 리가 있겠습니까
메인 클래스로 가 줍시다.
FMLinit..머시기 이벤트가 있는 곳에 메인 블럭 클래스.registerBlocks();를 박아주시면 됩니다.
저같은 경우는 GRFBlocks.registerBlocks();겠죠? 저 registerBlocks();는 방금 게임레지스트리를 입력했던 그 메소드입니다.
필요에 따라 이름을 바꿀수 있죠.(당연
자 그럼 실행해서 확인해 봅시다.
축하드립니다! 당신의 첫 블럭을 만들었습니다!
2. 여담
역시나 이번 회차도 여담 먼저 작성되었습니다.
사실 이 여담을 쓰는 날은 이미 방학이였습니다(!!!)
그럼 몇 일이 흘렀을까요 수학 ㅈ까
남은 방학은 즐겁게 즐기고
방학 안 한 분들은
분들은
...
뭐 알아서 잘 하겠지
사실 여담에 전부 때려 박는 습관이 이 블로그 왔더니
겁나 재밌더군요
여담이 이렇게 재미있는 건 줄 몰랐음
여담이지만 모딩하는데 가장 좋은 방법은 안 들키게 배끼는 것 입니다.
이걸 쓰면서 노래를 들으면서 게임을 다운받고 게임을 하고 있으니
막 음악이 끊기고 난리도 아니더군요
여러분은 저같은 미친 짓 하지 말고 따로따로 하시기 바랍니다.
오타, 오역, 댓글, 악플받아요
3. 차회 예고
아이템