Minecraft Forge 1.8 모드를 1.9로 옮기면서 삽질한 내용 Programming

1. 시작 작업
여기에 나와있다.
간단히 설명하면

공홈에서 Mdk파일을 받는다.
필수파일은 gradle 폴더, gradlew 파일 (gradlew랑 gradlew.bat), build.gradle
궁금한 사람도 있을것 같아서 적는데 gradle은 빌드 프로그램이다. 그 이상 자세한 건 나도모름.
커맨드 라인으로 gradlew setupDecompWorkspace를 쓰면 필요한 파일을 받고 마인크래프트를 디컴파일한다.
(이미 눈치챘을수도 있지만 윈도우는 gradlew.bat, 리눅스나 맥은 ./gradlew로 쓰면 된다.)
결과물은 ~/.gradle/caches에 있다. 여기 있는 파일들을 가져다 쓰게 될 것이다.

이클립스는 gradlew eclipse를 하고 열면 된다고 한다.
나는 IntelliJ를 썼는데, 그냥 build.gradle을 열고 gradlew genIntellijRuns를 하면 IntelliJ에서 모드를 실행할 수 있도록 설정이 된다.

build.gradle을 열면 다른 건 다 무시하고 중간에 있는 version, group, archivesBaseName만 적당히 적어준다.
archivesBaseName는 모드의 ID라고 생각하면 되는데 jar파일 생성할 때 이 이름을 쓰는 것 같다.

커맨드 라인으로 gradlew build를 하면 빌드되고, gradlew runClient 하면 클라이언트, gradlew runServer 하면 서버로 실행된다.

2. 소스파일
이미 있는 모드를 옮기는 거라 디컴파일해서 소스를 그대로 갔다 썼다.
내가 뭘 몰라서 그런 건지는 몰라도 디렉토리명을 칼같이 지켜야 한다.
소스파일은 무조건 src/main/java 경로에 있어야 하고,
mcmod.info라는 파일은 무조건 src/main/resources에 있어야 한다.
build.gradle 파일에서 어디까지 수정 가능한 건지는 몰라도 일단 그렇다.

기본 모드 클래스랑 mcmod.info파일의 템플릿은 받은 mdk를 보면 들어있으니 그거 보고 참고.

Dependency 설정이 안 되어있으면 빨간 줄 잔치를 볼 수 있는데 ~/.gradle/caches/minecraft/net/minecraftforge/forge/<자기 버전>/snapshot/<스냅샷 버전> 아래에 jar 파일이 있다.
잘 모르겠으면 example프로젝트 세팅 보고 하면 된다.

3. reobfuscate
실제 마인크 jar를 뜯어보면 다 난독화되어있다.
웬만하면 모드에서 마인크의 식별자를 쓰기때문에 빌드한 jar를 그대로 쓰면 java.lang.NoSuchFieldError 나면서 99% 안 돌아간다.
(테스트할 땐 잘 됐다고 생각할 수 있는데 테스트할 때는 난독화 안 하고 빌드한 minecraft를 쓰기 때문이다.)
그때 gradlew reobfJar를 돌리면 모드도 같은 매핑으로 난독화한다. 그 다음 다시 넣으면 돌아간다.
내가 작업한 모드는 특정 랜더 루틴을 후킹해서 코드를 삽입하는 내용이 들어있었다.
그래서 그 랜더루틴의 난독화된 이름을 알아야 했는데,
~/.gradle/caches/minecraft/de/oceanlabs/mcp/mcp_snapshot/<스냅샷 버전> 경로에 난독화 매핑이 나와있다.
srgs 폴더 안에서 notch-mcp.srg같은 파일 열면 매핑이 다 나오므로 이걸 보고 쓰면 된다.
notch가 난독화된 걸 말하는 건 알겠는데 mcp랑 srg는 뭔지 모르겠음.

4. coremod
좀 전에 후킹하고 코드삽입하는 내용이 있다고 했는데 이걸 하려면 coremod를 써야한다.
찾아보니까 웬만하면 쓰지 말라고 되어있으니 모드 개발할때 참조. 나는 이미 이걸 쓴 모드라서...
coremod의 진입점으로 쓰이는 클래스는 IFMLLoadingPlugin을 구현하는데, 이 클래스 경로를 build.gralde에 적어줘야한다.
jar {
    manifest {
        attributes 'FMLCorePlugin': 'com.example.client.coremod.MYFMLCorePlugin',
                'FMLCorePluginContainsFMLMod': 'true'
    }
}
이런 식으로 맨 아래에 추가해주면 된다.

5. 도보시오


C++ 여러가지 정리 Programming


예전에 올린 건데 블로그에는 링크가 없어서...
이글루스에는 embed가 안 되네요.
C++11(smart pointer, lvalue/rvalue, ranged for, lambda, function 등등), template, replacement new/delete 등등
제가 잘 모르던 C++ 내용들을 모아 정리한 것입니다.

2D sprite dice rolling Programming

< Github >

2D sprite로 자연스럽게 회전하고 구르는 주사위를 구현해보았습니다.
기초적인 선형대수와 물리 개념을 이용했습니다.
사용된 스프라이트는 직접 그렸습니다.

Sprite image:

'모두의 마블'의 주사위를 보고 어떻게 만들었을까 고민하다가 아이디어가 생겨서 만들어보았습니다.
핵심은 local axis(x, y) vector와 ZXY rotation(Euler angle)

cocos2d-x 기본 사용법 정리 Game Dev

※ cocos2d-x 3.3 beta0, Win7, VS2013 기준입니다.

cocos2d-x를 처음 사용하면서 직접 사용법을 정리해보고 있습니다.
저처럼 cocos2d-x를 처음 사용하시는 분들께 도움이 되었으면 합니다.
이 글은 지속적으로 업데이트됩니다.

이어지는 내용

Git & GitHub 튜토리얼 Programming

※ Git과 GitHub를 사용해보고 싶지만 어렵고 뭐가 뭔지 모르겠어서 시작하기 어렵다고 느끼는 분들을 위한 글입니다.
저도 Git을 접한지 오래 되지 않아 알고 있는 내용은 많지 않습니다. 그래서 저의 학습 상태에 따라서 업데이트 됩니다.()
내용에 대한 피드백은 언제나 받습니다.


내용 보기

1 2 3 4 5 6 7 8 9 10 다음


블로그 소개

블로그 소개 (영문)

트위터위젯

통계 위젯 (화이트)

1731
219
60639

CCL

크리에이티브 커먼즈 라이선스