Sprucians

모딩 이야기 13건이 검색되었습니다.

마인크래프트 모딩 튜토리얼:기본적인 아이템 만들기



엔티머입니다. 이번엔 내 모드에 아주 간단한 아이템을 만들어 볼겁니다. 아무런 기능도 없는 기타 아이템이죠.


자 그럼 기본적인 아이템 추가 과정을 간단히 요약해 보죠.


1. Item클래스를 상속받는 기반 클래스를 만든다. 이 클래스는 아이템의 이름, 리소스 경로 등 정보를 저장한다.

2. 아이템 객체를 생성하고 게임에 등록하는 함수를 가진 클래스를 만든다.

3. 게임에 아이템을 등록해주는 함수 일부를 모드 메인 클래스 preInit()에서 호출한다.

4. 게임에 아이템을 등록해주는 함수 일부를 proxy클래스에서 호출한다. 당연히 프록시도 모드 메인 클래스에서 호출되어야 한다.

5. 해당 아이템의 json파일과 텍스쳐 파일을 특정 경로에 저장한다.

6. ㄲㅡㅌ!


일단은 이정도입니다. 복잡해보여도 그리 복잡하지 않습니다. 제가 장황하게 늘어놔서 그래 보일 뿐. 사실 마인크래프트 모딩은 체계가 잘 잡혀있어서 기능없는 아이템, 블록 추가쯤은 자바를 몰라도 따라만 하면 만들수 있는 수준입니다.



자 그럼 먼저 텍스쳐를 준비하겠습니다. 테스트용 아이템으로 한번 철 막대(Iron Stick)을 만들어 보죠. 마크의 텍스쳐 크기는 16의 배수여야 합니다. 16*16, 32*32, 64*64 처럼 말이죠. 기본적으로 16*16이니 저도 16*16을 쓰겠습니다. 뭐 고급 텍스쳐를 원한다면 얼마든 높여도 상관 없습니다.



위 그림처럼 텍스쳐가 완성되었습니다. 참고로 무조건 png 파일이여야 합니다. 이건 그냥 추천인데 전 텍스쳐를 pain.net이란 프로그램으로 그립니다. 무료고 투명배경 등 기능도 적절해서 사용합니다. 아무튼 만든 텍스쳐는 "모드폴더/src/main/resources/assets/모드ID/textures/items"에 저장합니다. 없는 폴더는 만드세요. 저같은 경우 "Tutorial Mod/src/main/resources/assets/tutorialmod/textures/items"가 되겠네요.


자 그럼 위의 스크린샷처럼 아이템 기반 클래스를 만들어야 합니다. 아이템 클래스는 Item을 상속받아야 하고 현지화되지 않은 이름(Unlocalized Name)과 등록이름(Registry Name)을 설정해야 합니다. 이름 설정은 this.setUnlocalizedName(), this.setRegistryName()함수로 해결합니다. 마지막으로 우리는 크리에이티브 탭이 있으니 this.setCreativeTab()으로 크리탭을 정해 줍니다.


그럼 이제 아이템을 게임에 등록하는 함수를 가진 클래스를 만들어 봅시다. 이 클래스는 init(), register(), registerItem(Item item), registerRenders(), registerRender(Item item)이렇게 총 5개의 함수로 이루어집니다. 주석 1과 init()은 아이템의 객체를 생성하는 부분입니다. register()는 게임에 등록할 아이템들을 registerItem(Item item)에다 넘기는 부분이고요. registerRenders()는 registerRender(Item item)에 넘겨 모델을 불러오는 부분입니다.


이제 실제 추가를 해봅시다. 먼저 "public static Item 아이템이름"으로 아이템 객체를 생성해줍니다. 그리고 init() 안에서 ironStick객체를 초기화 해줍니다. 이때 우리가 만든 아이템 기반 클래스(ItemBase)를 사용합니다. 왜냐면 철막대는 기능없는 일반 아이템이고 ItemBase는 그런 아이템을 위한 클래스이니까요. 그 다음 register()안에서 registerItem()을 호출하는데, 매개면수로 ironStick을 넘깁니다. 그럼 게임 ironStick이란 아이템이 등록되죠. 마지막으로 registerRenders()에서 registerRender()를 호출하며 ironStick을 매개변수로 넘겨줍니다. 그럼 아이템의 모델도 등록됩니다.


이제 CommonProxy클래스에 registerRenders()란 함수를 만든 뒤, ClientProxy에선 그걸 오버라이드 해서 아이템 등록 클래스의 registerRenders()를 호출합니다.


그 다음 모드 메인 클래스에의 preInit()안에 아이템 등록 클래스(TMItems)의 init()과 register()를 호출합니다. init이 꼭 앞에 와야 합니다. 그리고 프록시의 registerRenders()도 마지막 부분에 호출합니다.



이제 실행해서 보면 텍스쳐가 없고, 이름이 현지화되지 않은 ironStick을 볼수 있습니다. 이름이야 아직 현지화를 하지 않았으니 그렇다 치고 왜 텍스쳐가 없을까요? 1.8버전 이상의 마크는 텍스쳐를 바로 찾지 않고 json파일을 찾아가기 때문입니다. 우리는 json파일을 만들지 않았으니 찾지 못한 것이고 미싱 텍스쳐가 뜨는 거죠.


그럼 "모드폴더/src/main/resources/assets/모드ID/models/item"에다가 ironStick.txt파일을 만드세요.models 폴더는 json파일들이 들어갈 곳이고 item엔 아이템 모델들이 들어갈 곳입니다. 그리고 텍스트 파일에 아래와 같이 적으세요.


{

    "parent": "item/generated",

    "textures": { "layer0": "tutorialmod:items/ironStick" }

}

"parent"는 이 모델이 어떻게 보여질 것인가를 결정한다고 보면 됩니다. item/generated는 일반적인 아이템처럼 보이게 되고, block/block은 블록처럼 보이죠.

"textures"는 텍스쳐의 경로입니다. "layer"는 텍스쳐 레이어죠. 여러개의 레이어를 쓸 일은 거의 없으니 대부분 layer0만 쓸겁니다. 그리고 텍스쳐 경로는 "모드id:텍스쳐 경로"가 됩니다. textures부터 시작하는 상대경로이니 여기서는 items/ironStick이면 됩니다. 참고로 모드id를 안쓰면 바닐라로 인식합니다. 만약 바닐라의 설탕 텍스쳐를 쓰려면 "items/sugar"만 쓰면 되겠죠.


텍스트 파일에 내용을 다 적었으면 확장자를 json으로 변경합니다.



이제 정상적으로 텍스쳐가 불려져 오는 것을 볼수 있습니다!


이제 이 이후로 아이템 추가하는건 단순 작업이 됩니다. 만약 ironPlate를 추가한다 가정하죠.

1. TMItems에 ironPlate객체를 생성하고 초기화한 뒤 registerItem(ironPlate), registerRender(ironPlate)를 적는다.

2. 텍스쳐와 json파일을 알맞게 만들어둔다.

3. 끝!

마인크래프트 모딩 튜토리얼:크리에이티브 탭 만들기



안녕하세요 엔티머입니다. 오늘은 모딩을 본격적으로 시작해 아이템 블록 등을 추가하기 앞서서 크리에이티브 탭부터 만들어 보겠습니다. 크리에이티브 탭을 먼저 만들어두면 내가 추가한 것들을 한눈에 보기 편하니까요. 그래서 먼저 해보도록 하겠습니다.


크리에이티브 탭 만들기는 다음과 같이 진행됩니다.


1. 크리탭 클래스를 만든다.

2. 모드 메인 클래스에서 인스턴스를 만들어 준다.

3. 끝.


매우 간단한 작업입니다. 만약 여러개를 만들 생각이면 이걸 여러번 반복하면 되겠죠.



Step 1. 크리에이티브 탭 클래스

먼저 크리에이티브 탭의 정보가 정의된 클래스를 만들어야 합니다. 전 TMCreativeTab이란 이름으로 만들었습니다.


그리고 CreativeTabs클래스를 상속받도록 하고, 생성자와 필수적으로 필요한 함수(getTabIconItem())를 추가해 줍니다. 상속받은 뒤 클래스 이름에 빨간줄 쳐지는 것에 마우스 가져다 대고 나오는 목록중 선택해 누르는 것으로 간단히 추가 가능합니다. 아니면 그냥 손수 만들어도 되고요. 아직은 만들어두기만 해서 내용은 없습니다.

먼저 자바를 안다면 TMCreativeTab()은 생성자라는 것을 아실테고, 여기서는 크리탭의 이름을 설정합니다.

getTabIconItem()은 크리탭의 아이콘을 설정하는 부분입니다.

전 예시로 탭 이름은 tmtab, 아이콘은 황금 사과로 해보겠습니다.


이렇게 만들어 주면 됩니다. 만약 아이콘을 블록으로 하고싶으면 조금 다르게 해야합니다. 예시로 모루를 아이콘 지정 해보죠.


블록은 Item.getItemFromBlock(블록)으로 지정해줘야 합니다.

물론 내 모드의 아이템, 블록으로 아이콘 지정이 가능하고 대부분 모드가 그렇게 합니다. 하지만 지금은 아이템이나 블록이나 하나도 만든게 없으니 바닐라의 것으로 지정해준 것이죠.




Step 2. 인스턴스 생성하기

클래스는 만들었으니 메인클래스에 선언해줄 일만 남았습니다. 간단히 모드 메인 클래스 맨 아래로 가서 아래의 내용을 추가하세요.

그럼 끝났습니다. 이제 실행해서 확인해 보죠.




성공했습니다. 이름이 itemGroup.tmtab인 이유는 아직 현지화를 안해준 상태라 그렇고, 탭에 아무것도 없는건 추가한게 없으니 당연히 없는겁니다.

현지화에 대해서도 나중에 따로 다루도록 하죠.


안녕하세요, 세메이아입니다.


저도 모딩 거의 못 합니다(...) 하지만 여러 강좌들과 달리 이 글은 방법을 설명하는 게 아니라 그냥 코드를 복붙할 수 있게 하는 게 목표입니다. 그냥 설명 읽고 그대로 따라하시면 됩니다.


뭐, 그러면 일단 기초 환경 세팅부터 하겠습니다.




1. 환경 설정

준비물: 64비트 컴퓨터, 의지




1-1. JDK


Java Development Kit.


http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

여기서 다운로드 가능합니다. 자바 개발 환경에 필수적입니다.




1-2. Eclipse


통합 개발 툴입니다. 이클립스 없이 메모장 써도 되긴 합니다만... 그러고 싶어요? (진지)


https://www.eclipse.org/downloads/

여기서 다운로드 가능합니다. Windows의 경우 설치기가 있습니다.




1-3. Forge Src


Minecraft Forge SouRce Code.


저는 1.7.10버전으로 진행하므로 1.7.10 기준으로 하겠습니다. 1.10.2는 티머님에게 부탁드리세요.


https://files.minecraftforge.net/maven/net/minecraftforge/forge/index_1.7.10.html



들어가 보시면 이런 화면이 뜰 텐데, Src를 눌러서 다운로드하시면 됩니다. 권장(Recommended) 버전을 추천합니다.



다운로드한 Src 파일을 압축해제해 주세요. 폴더명은 상관없지만 경로에 한글이 들어가지 않도록 해 줍시다.



이렇게 나왔을 겁니다.



시프트 우클릭 후 여기서 명령 창 열기를 선택해 주세요. 그러면 CMD가 나옵니다.



다음 명령어를 입력하세요.


gradlew setupDecompWorkspace


설치가 안 될 시에는 2가지 이유가 있습니다.


1. JDK가 없다 -> 설치하세요.

2. 마인크래프트가 없다 -> 설치하세요. 멀티MC 안 됩니다.



잘 끝났군요. 보통 몇 분 걸립니다.



그러면 다음 명령어를 입력합시다.


gradlew eclipse


여기까지 성공하면 준비는 끝났습니다.




1-4. 워크스페이스 설정



이클립스를 처음 설치했다면 바로 경로 설정 창이 뜰 테고, 이전에 작업하던 게 있었다면 이전 워크스페이스가 뜰 텐데 File -> Swith Workspace -> Other... 로 들어가시면 됩니다.



경로 설정을 해 둡시다. SRC 폴더 내의 eclipse 폴더로 설정하시면 됩니다.



짠!



기본적으로 존재하는 com.example.examplemod 패키지(폴더라고 생각하시면 됩니다)와 그 아래 있는 ExampleMod 클래스(코드 덩어리라고 생각하시면 됩니다)를 삭제해 줍시다.


이걸로 환경 설정은 끝났습니다.




1-5. 모드 정보 입력



src/main/java를 우클릭해 새 패키지를 만들어 둡시다. 패키지 이름은 다음과 같이 합시다.


(제작자).(모드이름)



전 이렇게 했습니다.


제작자는 semeia, 모드 이름은 HanaNoNisuisen으로 하겠습니다.



패키지를 우클릭해 새 클래스를 만들어줍시다.



이렇게 되어 있을 겁니다. package semeia.HanaNoNisuisen;은 경로 설정이고 public class HanaNoNisuisen { }은 클래스의 내용입니다.



일단 먼저 몇 가지 클래스를 임포트(import)해 줍시다. 임포트에 대한 자세한 설명은 생략하겠습니다. 그냥 다른 클래스의 정보를 가져오는 구문이라고 보시면 됩니다. 그 클래스에서 정의한 함수나 뭐 그런 것들을 사용 가능하게 하죠. 3줄에 다음 구문을 입력합시다.


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.FMLPreInitializationEvent;



public class HanaNoNisuisen { 윗줄에 다음 코드를 적어둡시다.


@Mod(modid = HanaNoNisuisen.MODID, version = HanaNoNisuisen.VERSION)


빨간 줄은 곧 고칠 겁니다.



중괄호 안에 다음 코드를 적어둡시다.


public static final String MODID = "HanaNoNisuisen";

public static final String VERSION = "(모드 버전)";


NotEnoughPearls라고 되어 있는 건 제 다른 모드에서 코드를 베껴서 그런 겁니다. 모드 이름을 넣어주세요.


이걸로 모드의 메인 클래스가 만들어졌습니다.



다음은 src/main/resourcesmcmod.info를 열어 주세요.



정보를 입력합시다.


modid - 모드 ID. 아까 쓰던 모드 이름을 넣어 주시면 됩니다.

name = 모드 이름. 겉으로 표시되는 이름입니다.

description = 모드 설명.

version = 모드 버전. 기본적으로 메인 클래스에서 버전 숫자를 가져오니 비워둬도 됩니다.

mcversion = 놔두시면 됩니다.

url = 모드 홈페이지.

updateUrl = 모드 업데이트 페이지.

authorList = 제작자 목록입니다.

credits = 뭐라고 해야 할까... 대충 기본적으로 있는 예시 보시면 아실 겁니다. 도움 준 사람들에게 감사 문구 넣는 거 비슷한 거에요. 아마.



저장 후 Debug 버튼을 누르시면 모드가 적용된 마인크래프트가 실행됩니다.



짠! 4 mods loaded 보이시죠?



잘 적용된 것을 보실 수 있습니다.


그러면 여기까지.

마인크래프트 모딩 튜토리얼:세팅하기



안녕하세요 엔티머입니다. 요새 잉여로워서 모딩 튜토리얼을 써볼까 합니다. 일단 이 튜토리얼의 목표는 당연하게도 간단한 모드 제작이고요. 마인크래프트 버전은 1.10.2로 진행합니다.


마인크래프트 모드를 만드려고 할 정도면 마인크래프트를 이미 잘 아는 플레이어라는 의미이고 따라서 자바는 기본적으로 설치되어 있을것이라 가정합니다. 또한 마인크래프트 모드는 JAVA로 프로그래밍 해서 만들어집니다. 기본적인 자바 지식과 개발 준비물(JDK, Eclipse)는 이 글에서 설명하지 않습니다.



Step1:MDK(Mod Development Kit)

마인크래프트 모드, 그 중에서도 forge 모드를 개발하려면 mdk가 필요합니다. 구글에 Minecraft Forge라고 검색해서 포지 사이트로 들어가 1.10.2버전을 찾아내세요.


Latest든 Recommended든 버전은 큰 상관 없습니다. 다만 자신이 사용할 버전이 모드가 요구할 최소 포지 버전이 됩니다. 만약 1.10.2-12.18.3.2239버전을 써서 개발하면 사용하는데 그 버전 이상의 포지가 필요하게 됩니다. 그러니 그냥 Recommended 쓰는게 편합니다. 저도 튜토리얼에 추천 버전을 사용하겠습니다.



mdk를 받았으면 일단 압축을 해제합니다. 저기 있는 Screenshot폴더는 이 글 쓰는데 필요한 스샷 넣어둔 폴더니 무시하세요.

그럼 이제 내 모드의 폴더를 하나 만듭니다. 전 Tutorial Mod라고 하겠습니다. 그리고 압축 푼 포지 mdk의 내용물을 전부 복사해다가 내 모드 폴더에 붙여넣습니다.



지금까지 따라하면 이렇게 되어있을 겁니다. 이제 여기다가 텍스트 문서 2개를 만들겁니다. 하나는 Setup Workspace 하나는 Start Build입니다. 그리고 각각 한줄씩 적어야 하는데요 아래와 같습니다.


Setup Workspace.txt 파일 내용: gradlew setupDecompworkspace && gradlew eclipse

Start Build.txt 파일 내용: gradlew.bat build


위와 같이 적은 후에 두 파일 모두 확장자를 .bat으로 변경하세요.



그럼 현재까지 이렇게 되어있을겁니다. 참고로 Setup Workspace.bat 파일은 해당 폴더를 워크스페이스, 그러니까 작업장으로 만들어주는 것이고, Start Build는 내 모드를 빌드하기 위한 파일입니다. 빌드에 대해서는 나중에 설명하도록 하고, 지금은 워크스페이스부터 셋업하도록 합니다.

Setup Workspace파일을 실행하세요.



그럼 검은 창에서 뭐가 막 진행되고 끝나고 폴더를 보면 뭐가 많아진것을 확인할수 있습니다. 자 그럼 작업장이 세팅되었습니다. 이제 시작해봐야죠.



이클립스를 실행하고 워크스페이스를 내 모드 폴더의 eclipse폴더로 지정한 뒤 확인을 누르세요.




Step 2:필수 클래스 작성하기



들어가보면 이렇게 되어있을겁니다. 저기 com.example.examplemod란 패키지가 보이는데, 우리에겐 쓸일이 없는 패키지입니다. 저 패키지를 삭제한 뒤, 나만의 패키지를 만드세요. 전 entimer.tutorialmod라고 하겠습니다. 그리고 그 패키지 안에 3개의 클래스를 만들어야 합니다. 바로 "모드의 메인 클래스", "서버사이드 프록시", "클라이언트 사이드 프록시" 3개입니다. 전 각각 "TutorialMod", "CommonProxy", "ClientProxy"라고 이름붙이겠습니다.


그리고 ClientProxy클래스는 CommonProxy 클래스를 상속받도록 합니다.


그리고 모드의 메인 클래스로 돌아와 모드id, 모드이름, 모드버전, 마인크래프트버전, 클라이언트프록시, 서버프록시에 대한 문자열 변수를 만들어줍니다.

이때, 마인크래프트 버전은 []사이에 들어가있어야 하며, 프록시는 각 프록시 클래스의 경로를 나타내는 것입니다.


그 다음 다음과 같이 내용을 채워줍니다. 이 부분들에 대해서는 저도 정확히 알지 못합니다. 그래서 설명하긴 좀 어렵습니다.


그 다음 mcmod.info파일을 수정해 봅니다. 참고로 이건 scr/main/resources 아래에 있습니다. 대충 보면 뭐가 뭔지 알수 있을겁니다. 제가 적은 것들만 적어도 충분합니다.



이제 박스 쳐둔 부분의 버튼을 누르면 내 모드가 적용된 마크를 실행해볼 수 있습니다.



실행된 뒤 모드 리스트를 보면 내 모드가 들어가 있고, mcmod.info에 적은 내용이 보입니다.



자 기본 세팅이 완료되었습니다. 본격적으로 뭔가 만드는 것은 다음부터!


하이요 엔티머입니다.


며칠만에 개발근황을 쓰게 됬는데, 잠시 모딩에 회의감을 느꼈었습니다. "내가 무슨 대단한 모드를 만들겠다고" 하는 생각을 하고 있었죠. 제가 뭔가에 빠졌을 때 중간에 한번쯤 오는 흔한 일입니다. 아무튼 이런저런 생각을 해보면서 "너무 목적없이 만든다", "소박하게 만들자"란 생각을 했습니다. 그래서 소박하게 새로 하나 만들어서 천천히 확장해 나가자는 결론을 내렸죠. 그렇게 결정한 컨셉은 "무기모드".  1.7.10버전이긴 하나 갑옷모드도 만들어본 경험도 있고 해서 이번엔 무기를 만들어보자 결정한 겁니다.


그 다음으론 구분을 좀 해두자고 생각했습니다. 그래서 4가지 등급으로 분류했죠. 일반(normal), 고급(advanced), 마법(magical), 전설(legendary)입니다. 각 등급에 대해 설명하자면,

일반:아무 능력이 없는 일반적인 무기가 들어가는 카테고리입니다. 쉽게 구할수 있는 재료로 간단히 조합하는 무기들이 들어가고 바닐라의 무기와 성능상 큰 차이가 없습니다. 흰색으로 표기됩니다.

고급:일반 등급의 상위 등급으로, 재료가 좀 비싸고 다양하며 조합이 조금 더 복잡한, 대신 성능이 바닐라보다 좋은 무기들을 넣어둘 카테고리입니다. 하늘색으로 표기됩니다.

마법:어떤 등급의 상위등급 이런건 아니고, 일반적인 무기가 아닌 무언가 특수한 효과가 부여된 무기들을 넣어둘 카테고리입니다. 보라색으로 표기됩니다.

전설:최상위 등급의 카테고리입니다. 특별한 기준을 정하진 않았지만, 일단 엄청 좋은 것들을 넣을겁니다. 노란색으로 표기됩니다.

그 밖에 크리에이티브 전용 등급이 있는데 당연하게도 크리에이티브 전용 아이템만이 해당되고 초록색으로 표기됩니다.



이 아이템인데요. 크리전용 템인만큼 조합법따위 없고 성능은 사기입니다. 뭔가 테스트를 해볼게 있으면 여기다 먼저 해보려고 해요.



자 그럼 현재까지의 일반등급 무기를 소개하겠습니다.

1. 환도



환도. 옛날 흔히 우리나라에서 도(외날인 칼)를 칭하는 말이였죠. 처음으로 뭘 만들까 하다 만든겁니다. 제가 한국인이기도 하고 해서 넣었죠. 근데 그냥 칼에 고급진 성능을 주긴 뭐해서 일반등급 무기로서 추가했습니다. 재료도 그리 비싸지 않고 공격력은 6.5.



2. 카타나



환도를 만들면서 일반등급은 여러가지 보통 칼들을 추가하자 결정했고 추가하게 된 무기입니다. 제가 모델링을 아주 잘하는 편이 아니다보니 그냥 환도 모델과 텍스쳐를 살짝 변형해서 만들었죠. 가격과 성능은 환도와 완벽하게 일치합니다. 조합법만 조금 다를 뿐.



3. 글라디우스



세번째 일반등급 무기. 고대 로마에서 사용하던 글라디우스입니다. 재료는 환도, 카타나에 비해 철주괴 2개 비싸지만, 공격력은 0.5 더 높은 7로 해뒀습니다.


일단 만들어둔 일반 등급은 여기까지. 그 밖에 일반등급으로 생각중인건 아밍 소드, 바이킹 소드, 츠바이헨더, 정도. 혹시 아이디어 주시면 감사히 써먹겠습니다.



그럼 고급등급.


1. 에너지 블레이드



다이아몬드를 4개 먹는 무기입니다. 이름처럼 손잡이 끝에서 에너지 형태의 검날이 나오는 모습을 상상하면서 모델링 했습니다. 공격력은 10.


아직 고급 등급은 얘 하나입니다. 사실 일반등급만 여러개지만...



이번엔 마법등급입니다.


1. 유리조각



갑자기 뜬금없이 웬 유리조각이냐 할수 있겠지만, 제가 위에서 마법등급은 특별한 기능이 있으면 부여된다고 했었죠. 이 유리조각 무기는 유리 1개로 2개가 만들어지는 값싼 가격과 그런 주제 공격력이 6인(철검과 동일) 장점이 있으나, 2번 쓰면 부서지고 사용자에게도 4(하트 2개)의 데미지를 먹이는 무기입니다. 이 자해능력 때문에 마법등급을 주었죠.

이렇게 거의 쓸모가 없는 무기를 추가한 이유는 단순히 제 아이디어가 딸려서입니다... 사신의 낫이란 무기를 생각해두긴 했지만, 아직 구현을 못해서.



아직 전설등급은 없습니다.

3D things에서 이번엔 무기들을 좀 추가해 봤습니다.




일단은 바닐라의 기본 무기들을 3D로 만들어 봤습니다. 성능도 바닐라와 완벽하게 똑같고, 조합법도 그냥 조합대에 해당 무기를 올리는 것... 일단 이정도로 3D가 잘 적용된다는 것을 확인했고, 다음으로 제 모드만의 조합법을 가진 무기를 만들기로 해서, 6번째 무기인 마쿠아후이틀(Macuahuitl)을 만들었습니다. 참고로 마쿠아후이틀은 나무 몸통에 날카로운 흑요석을 박아둔 원시적 무기입니다. 흑요석이 날카로우니 공격력은 다이아몬드와 동일하지만 내구도가 나무와 돌 사이로 되도록 만들었습니다. 몸통은 나무니까요!




그 다음으론 고급진 무기를 만들어보자 해서 특수효과를 가진 전설급 무기를 만들었죠. 월드 오브 워크래프트 시리즈의 일리단이 쓰던 무기, 아지노스의 전투검입니다. 쌍검으로 쓰고 싶으시면 양손에 끼시면 되겠습니다. 부가효과는 없겠지만...




위의 착용샷에서도 알수 있듯 들고있으면 5가지 버프를 걸어주는 사기 무기입니다. 게다가 공격력은 34죠. 




이렇게 두니 엄청 작네요... 뭐 수정은 귀찮아서... 암튼 엄청 비쌉니다.




아 그리고 또 한가지 바뀐게 있는데, 드디어 오어 딕셔너리를 적용하는 법을 알았습니다. 위의 아지노스의 검 조합법도 그렇고 마쿠아후이틀도 오어 딕셔너리가 오어 딕셔너리가 적용되서 같은 종류의 재료를 가져다 쓸수 있습니다. 사실 대체품이래봐야 원목밖에 없어보이긴 하지만.





다음으로 무기가 아닌 블록입니다. 바로 쓰레기통! 이 블록은 설치하고 아무거나 들고 우클릭하면 들고있던 아이템을 지워버립니다.

비교적 난이도가 쉬울거 같아 어떻게 만들지 며칠 생각했었는데, 우클릭을 하면 실행되는 함수에다가 플레이어 손에 든 아이템을 null로 만드는 코드를 작성해 만들었습니다.

추가로 채팅창에 tip이 나오는데 이건 블록이 설치될때 실행되는 함수에다 메세지를 출력하도록 만들어 두었죠.

그리고 얜 타일엔티티로 만들지 않았습니다. 타일엔티티로 등록하지도 않았고, 실제로 타일엔티티 클래스를 작성하지도 않았거든요.




아 그리고 제 모드 아이템과 블록들에 툴팁을 추가했습니다. 좀 더 나아가서 lang파일과 연동(?)해서 언어에 따라 바뀌죠.





이 둘은 아직 미완성된 것들. 위의 캠프파이어는 불을 붙이고 끄고 할수 있도록 만들 예정인데, 풀어야 하는 과제가 아직 해결이 안됬습니다. 바로 block state랑 관련있는 건데, 상태에 따라 다른 모델을 불러오게 하기 위해 필요합니다. 저같은 경우 불이 꺼진 모델(위의 스샷), 불이 붙은 모델(스샷엔 없음)을 왔다갔다 할수 있어야겠죠. 근데 이거 시도하다 크래시나서 일단 어떻게 할지 알아보고 있는 중입니다.

아래쪽의 것은 전에도 나온적 있는 대장간 양동이죠. 이걸 개조해서 플루이딕을 적용한 다음 온갖 액체를 담을수 있게 만들자는 제안을 들어서 해볼 생각인데, 아직 감도 안옵니다.

아 ! 이 얼마나 무서운가

안녕하세요, 세메이아입니다. 한동안 세메이아유틸은 방치할 것 같습니다. CBS도 시즌 2가 열리고 있고 곧 Sprucians Season 7이 오픈하기 떄문이죠!


뭐, 그래서 오늘은 삽질 이야기.


별 내용은 없습니다. 그저 4시간 동안 엔티머님과 틱팀머튽을 질문으로 괴롭히면서 열심히 삽을 떴지만 끝내 오어젠에 실패했고 격노했다는 내용일 뿐입니다.

모드 개발 근황 - 2017년 2월 15일

안녕하세요, 세메이아입니다.


오늘도 아침부터 모딩을 시작했죠



자, 오늘은 갑옷을 만들어 봅시다. 갑옷도 도구와 마찬가지로 매티리얼에 따라 능력치가 결정되는데, 갑옷의 경우는 ArmorMaterial을 사용합니다.



이게 ArmorMaterial 추가 구문입니다.



빨간줄은 net.minecraft.item.ItemArmor.ArmorMaterial을 임포트하면 해결됩니다.



결과물. 도구랑 매우 비슷하죠?


public static ArmorMaterial sprucian = EnumHelper.addArmorMaterial("Sprucium", 2015, new int[]{5, 8, 7, 5}, 50);

public static = 다음 객채를 생성하라

ArmorMaterial sprucian  = sprucian이라는 ArmorMaterial을 추가합니다

= EnumHelper.addToolMaterial(); = EnumHelper로 괄호 안의 ArmorMaterial을 추가해서 sprucian이라는 ArmorMaterial을 그걸로 정의합니다.

("Sprucian", 2015, new int[]{5, 8, 7, 5}, 50) = 추가할 ArmorMaterial을 설정합니다. 이름은 "Sprucian", 기본 내구도는 2015입니다. 실제 내구도는 여기에다가 투구는 11, 흉갑은 16, 바지는 15, 신발은 13을 곱한 값이죠. 방어력은 투구, 흉갑, 바지, 신발이 각각 5, 8, 7, 5입니다. 마법성은 50입니다.


자, 매티리얼은 추가했으니 아이템 생성용 클래스를 짭시다.





나는 만든다 클래스




자세한 설명은 생략



이렇게 됩니다. 자세한 설명은 생략(...) 귀찮아요



클래스를 활용해서 만든 아이템에 정보를 삽입해 줍시다.

자세히 보시면 문제가 있습니다(...)



당연히 크래시. 고쳤습니다.



그 김에 가독성을 위해 주석 좀 달아놨죠.



잘 되는군요.




아이템 등록 구문을 좀 줄였습니다. 단순히 기존 걸 한줄로 줄인 겁니다. 기존에는 앞에서 만든 아이템에 첫 줄에서 정보를 삽입하고 둘째 줄에서 등록했는데 이번에는 같은 줄에서 정보를 삽입하고 바로 등록합니다.


자, 이번에는 드디어 조합법을 해야겠네요. 하는 법은 전혀 모르지만 티머님이 도와주시겠지(어이



그래서 가르침을 받고 있습니다.



잘 되는군요.


* 조합법 추가 설명


조합법 추가에는 3가지 함수가 있습니다. 무형조합법을 추가하는 GameRegistry.addShapelessRecipe()와 유형조합법을 추가하는 GameRegistry.addRecipe()GameRegistry.addShapedRecipe()가 바로 그것입니다.


먼저 무형조합법부터 알아보도록 하겠습니다.


GameRegistry.addShapelessRecipe(new ItemStack(SemeiasUtilsItems.PlateAkashium), SemeiasUtilsItems.MaruyuHammer, SemeiasUtilsItems.IngotAkashium);


간단합니다. new ItemStack()으로 결과 아이템을 먼저 지정하고, 그 뒤에는 재료 아이템을 죽 늘어놓으면 됩니다. 이 경우는 일회용 망치(SemeiasUtilsItems.MaruyuHammer)와 아카슘 주괴(SemeiasUtilsItems.IngotAkashium)로 아카슘 판(SemeiasUtilsItems.PlateAkashium)을 만드는 조합법입니다.


자, 그러면 유형조합법입니다. 유형조합법에는 GameRegistry.addShapedRecipe()와 GameRegistry.addRecipe() 두 개가 있는데 둘의 차이점은 무엇일까요?


GameRegistry.addShapedRecipe()의 경우에는 무조건 그 모양대로만 조합할 수 있습니다. 예를 들어 (석탄/공백/공백 막대/공백/공백 공백/공백/공백)으로 설정했다면 addShapedRecipe()의 경우는 무조건 저 모양으로만 가능합니다. (공백/석탄/공백 공백/막대/공백 공백/공백/공백) 같은 것은 되지 않습니다.


그런데 GameRegistry.addRecipe()의 경우 좀 더 융통성이 있습니다. 예를 들어 횃불의 조합법을 (석탄 막대)로 설정했다면 (석탄/공백/공백 막대/공백/공백 공백/공백/공백)이든 (공백/석탄/공백 공백/막대/공백 공백/공백/공백)이든 뭐든 상관 없이 (석탄 막대)라는 기본 틀만 지킨다면 다 조합이 됩니다. 또한 조합법을 좌우로 뒤집어도 결과물이 그대로 나옵니다. MTRM의 Mirrored와 같습니다.


그러므로 일반적으로는  GameRegistry.addRecipe()를 사용하는 것이 좋습니다.



잘 됩니다. 임시적으로 철 텍스처를 빌려서 사용했습니다. 텍스처 없는 건 판.



텍스처 만들어 박았습니다.



굳굳



판도 잘 만들어지는군요. 저기 깨진 건 일회용 망치입니다.



투명 설정도 하고 갑옷 텍스처도 만들었습니다. 퀄은 저 모양이지만.


그러면 여기까지. 곧 0.3.0버전이 출시됩니다. 자고 나서는 광물을 만들 예정이에요.

'모딩 이야기 > 세메이아의 삽질 공방' 카테고리의 다른 글

모딩 강좌 - 1. 환경 설정  (5) 2017.02.28
아 ! 이 얼마나 무서운가  (3) 2017.02.16
Semeias Utils 0.2.1  (0) 2017.02.15
Semeias Utils 로고  (4) 2017.02.14
모드 개발 근황 - 2017년 2월 14일  (8) 2017.02.14

Semeias Utils 0.2.1






내용물은 전혀 없으니 기대하지 마세요 절대.

절.대.




Semeias Utils-0.2.1.jar


Semeias Utils 로고

1분작입니다

Prev 1 2 Next