몰?.루();

마인크래프트 1.7.10 모딩 시작 본문

마인크래프트/마인크래프트 모딩

마인크래프트 1.7.10 모딩 시작

toonraon 2016. 11. 10. 23:01

어쩌다보니 이번 학기에 정작 코딩 수업은 없고 지루한 과목들만 수강하게 되면서 코딩을 할 기회가 사라졌다. 마땅히 만들고 싶은 프로그램이나 어플리케이션도 없어서 그냥 가만히 있다간 내 실력이 발전이 없을 것 같아서 뭘 할까 찾아보다가 마인크래프트 코딩을 해보기로 했다.


모바일 마크 코딩은 해봤어도 컴퓨터 마인크래프트라니...

알아보니 완벽히 자바 계열의 코딩이라서 사실 부담을 없을 것 같다.

API는 포지 모드로더 쪽에서 다 제공을 해주는 듯. 포지 모드로더와 그냥 모드로더 두 개가 있다가 모드로더 쪽이 망했다고 급식 시절에 들었는데 그게 무슨 의미인지 몰랐으나 지금와서 보니 모드로더쪽 API를 개발자들이 안 써서 모드로더쪽이 망했다는 것 같다.


일단 기본적인 개발환경 설정은 유튜브를 보고 따라했다.

https://youtu.be/0ULz-oCUbEg



한국쪽에도 자료가 있을진 모르겠는데 아마 없을 것 같아서 찾아보려는 시도조차 하지 않았다. 여러 영상들이 있는데 한 유튜버는 발음이 정통 북미쪽 발음이 아닌 것 같다. 아무래도 듣기 편한 북미쪽 발음에 가까운 크리에이터 영상을 보기로 했다. 사실 영알못이라 진짜 북미인지 아닌지는 모르겠지만... 여튼 평소에 듣던 말투라는 것. 그래도 실제로 유튜브 CC 기능을 켜봐도 훨씬 정확도가 높다. 물론 중간중간에 말이 꼬여서 본인의 발음을 자책하는 게 나오는데 그래도 확실히 듣기 편하다.



애초에 마인크래프트는 자바가 필요해서 jre는 자동으로 깔려있는 상태일 것이다. jre는 안 받아도 될 것 같은데 jdk가 필요하다. 분명 자바 수업들을 때 깔았던 것 같은데 지금보니 없어서 다시 깔았다. 버전은 자바8. 다운로드 사이트는 영상 설명에 있다.


그리고 포지 사이트에서 src를 다운로드 받고 영상대로 cmd창에 들어가서 gradlew setup뭐시기랑 gradlew eclipse를 해서 설정을 완료해준다. 영상에선 각각 20분 걸렸다고 하는데 실제로 내가 해보니 3분 조금 더 소요된다. 이클립스는 자바 수업때 쓰던게 깔려있어서 그냥 그대로 사용해봤는데 문제가 없었다.



워크스페이스를 포지 src 다운 받은 걸 압축 해제한 폴더로 설정하면 Minecraft 최상위 폴더가 이클립스에 뜨고 그 아래에 src/main/java가 있다. 예제 파일이 하나 있는데 지우건 냅두건 관계 없고 새로운 패키지를 만든 다음 Java 파일을 생성하여 코딩하면 된다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.toonraon.tistory.myfirstmod;

import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPostInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.item.Item;

@Mod(modid = "fm", name = "My First Mod", version = "1.0")
public class MyFirstMod {
	
	public static Item myItem;
	
	@EventHandler
	public void preInit(FMLPreInitializationEvent event) {
		// Item, Block init and registering
		// Config handling
		
		myItem = new MyItem();
		myItem.setUnlocalizedName("MyItem"); // item.MyItem.name
		myItem.setTextureName("fm:myfirstitem");
		GameRegistry.registerItem(myItem, myItem.getUnlocalizedName().substring(5)); // if you don't substring, you should to type /give Player fm:item.MyItem in game
		
	}
	
	@EventHandler
	public void init(FMLInitializationEvent event) {
		// Proxy, Tile Entitiy, Entity, GUI and Packet Registering
		
	}
	
	@EventHandler
	public void postInit(FMLPostInitializationEvent event) {
		
		
	}
}


음... http://hilite.me/의 monokai 테마를 적용시켜서 한 번 해봤는데 에디터 화면에서는 되게 이상하게 나온다. 미리보기에서는 잘 보이니까 뭐 문제 없겠지.



여튼 메인 자바 파일에서는 저렇게 기본적으로 preInit, Init, postInit으로 나누는 것 같다. 함수명은 자유인 것 같지만 앞에 붙여주는 @EventHandler라거나 파라미터등은 정해져있는 듯.



간단하게 MyItem이라는 아이템을 추가시켜주는 코드다. 텍스쳐와 이름까지 등록되어있다.



파일과 폴더들. assets.fm와 그 하위 폴더인 lang, textures/items 폴더는 내가 직접 만든 것이다.

lang은 아이템 이름파일, textures는 텍스쳐를 넣는다. 그림판으로 작업하면 png의 투명도가 손실되기 때문에 포토샵이 필수다.

en_US.lang엔 짧게 

1
item.MyItem.name=This is my first item

라고 썼다. 실제로 유저들이 게임 내에서 볼 아이템 이름이므로 띄어쓰기가 가능하다. en_US.lang은 기본적으로 영어 뿐만 아니라 특별히 언어 설정을 하지 않으면 이걸로 보인다.

ko_KR.lang은 한글 파일인데 처음에 저걸로 해본 다음에 마크 언어를 한글로 바꾸고 보니까 깨지더라.

이유는 역시나 인코딩 방식이 이상해서.



자바 수업들을 때도 항상 느끼는 거지만 정말 이클립스의 디폴트 텍스트 인코딩은 어이 없기 그지없다. 이름 기억하기도 힘든 웬 이상한 방식이므로(마이크로소프트 방식인듯하다. 이름부터 MS이니) 한글이나 중국, 일어 파일 같은 경우엔 반드시 UTF-8로 '미리' 설정해놓자. 나중에 바꾸면 이미 써놓은 한글 다 깨진다.




아무런 기능도 존재하지 않는 나의 첫 아이템을 제작했다.

의외로 마인크래프트 모드 개발 환경이 잘 구축이 되어있어 금방 기계 같은 것도 만들어 볼 수 있을 것 같다.

Comments