Sprucians

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


안녕하세요, 세메이아입니다. 회 맛있죠 저도 좋아합니다. 아니 이게 아니라.


최근 모드를 만들고 있습니다.


분명 처음 목표는 스프 시즌 7을 위한 한 줄기 희망이었는데 만들고 보니 한 줄기 어둠이 될 것 같습니다. 가성비 좋은 초반 아이템들을 만들겠다는 장대한 목표는 어디론가 사라지고 너프에 유용한 망치, 커터, 줄, 용접기가 탄생했습니다(...)



SemeiasUtils.class입니다. 엔티머님 모드의 ModMain.class에 해당하죠. 보통 (제작자).(모드이름).(모드이름).class로 하는데 특이하게도 티머님은 entimer.customarmor.ModMain.class를 쓰시더라고요. 뭐 하여튼 전 평범하게 semeia.semeiasutils.SemeiasUtils.class입니다. Semeias입니다, Semeia가 아닙니다! Semeia는 단수 주격이고 Semeias는 단수 속격입니다.



SemeiasUtilsItems.class입니다. 별로 없죠. 스프루슘(...) 주괴, 판, 막대, 칼날과 엄청난 내구도(...)의 도구가 있습니다. 그 외에 망치, 커터, 줄칼, 용접기가 보이고요.


보시다시피 망치, 커터, 줄칼, 용접기도 성능은 영 아니지만 도구로 취급됩니다. 전적으로 제 무능력 때문으로, 내구도 있는 아이템을 만들 능력이 없다 보니 도구 취급하는 꼼수를 사용했습니다. 그 때문에 망치는 돌과 석탄을 캘 수 있고 용접기는 철검 수준의 공격력을 자랑합니다. 속도는 처참하지만.



일반 아이템 추가 클래스. 이거 만드느라 1시간 넘게 삽질했습니다. 그래도 하고 나니 쉬워져서 다행. 저거 만들기 전엔 일일이 하나하나 클래스 만들어서(...) 추가하는 병신같은 방법을 썼습니다.



...였지만 말이죠.


그러면 아이템이 늘어날수록 읽어야 하는 클래스 숫자도 계속 늘어나게 됩니다. 결과는 물론 발적화. 따라서 여러분은 클래스 양산을 멀리하고 단일클래스 우려먹기를 가까이하는 것이 좋습니다.



결과물입니다.



Sprucium Ingot(...)


lang파일은 나중에 만들기로.




그런데...


도구를 만들어야 하는데 도저히 안 되더군요(...) (허락 받고) 티머님 모드를 디컴파일했지만 그래도 잘 안 되고.



그래서 전문가를 불렀습니다.



오오 갓티머님



끄응...



결국 성공했습니다.

이유는 어이없게도 private final String name;을 뒤에 한 번 더 적었기 때문입니다(...) 이미 최종적으로 재정의한 것을 다시 재정의하려니 될 리가 없죠.



(...)


참고로 아침에는 크래시가 나길래 몇 번을 살펴봤는데도 문제를 모르겠길래 스프 챗에 올렸는데 카핏이 바로 지적하기를...


IngotSprucium = new SemeiasItems("IngotSprucium");

GameRegistry.registerItem(IngotSprucium, "ingotSprucium");

PlateSprucium = new SemeiasItems("PlateSprucium");

GameRegistry.registerItem(PlateSprucium, "plateSprucium");

PlateSprucium = new SemeiasItems("RodSprucium");

GameRegistry.registerItem(RodSprucium, "rodSprucium");

PlateSprucium = new SemeiasItems("BladeSprucium");

GameRegistry.registerItem(BladeSprucium, "bladeSprucium");


(...)


* 모르는 분들을 위한 설명: 앞에 보면 public static Item IngotSprucium;이라는 부분이 있죠. 이건 IngotSprucium이라는 아이템을 추가하는 부분입니다. 그러면 이 IngotSprucium이 뭔지를 설정해야 하는데, 그 역할은 IngotSprucium = new SemeiasItems("IngotSprucium");가 수행합니다. 그렇게 되면 앞에서 만든 IngotSprucium에다가 아이템 "IngotSprucium"이 삽입되죠. 그리고 마지막으로는 GameRegistry.registerItem(IngotSprucium, "ingotSprucium");이 이 IngotSprucium을 게임에 "ingotSprucium"라는 이름으로 등록합니다.


그런데 보시면 PlateSprucium에 아이템을 3번 삽입하고 있습니다. 그러니까 아이템이 분명 있을 건 다 있으니 이클립스에서는 아무런 문제가 없다고 뜨는데, 실제로 쓰려고 하면 PlateSprucium 하나에 3개의 아이템을 넣으려고 하니 작업을 수행하지 못하고 크래시를 뿜어내는 겁니다(...)


무엇보다 가장 병신같은 건 제가 5번이나 코드를 검토하고서도 이 문제를 발견하지 못했다는 겁니다. 고마워요 카핏.



여러분 저는 병신입니다!



결국 추가에 성공했습니다.


배경이 흰색인 건 단순히 들떠가지고 배경 투명화를 스킵하고 바로 켜본 거니까 신경쓰지 마시기 바랍니다(...)



나머지 도구들도 추가중... 어라??????????????

엥, 공격력이 똑같네? 게다가 크리에선 블럭이 안 캐지네? 다 검이잖아??? 다검이잖아 여담으로 일본어로는 진짜 다이아 검이라고 쓰더라고요


네, 여기서 제가 병신같은 실수를 또 다시 저질렀습니다. 역시 세메이아다워 기대를 저버리는 법이 없어


public static Item.ToolMaterial sprucium = EnumHelper.addToolMaterial("Sprucium", 6, 20150110, 15.0F, 20150110.0F, 50);

public static Item.ToolMaterial forge = EnumHelper.addToolMaterial("Forge", 0, 50, 1.0F, 2.0F, 1);

(중략)

public static Item SwordSprucium;

public static Item AxeSprucium;

public static Item PickSprucium;

public static Item SpadeSprucium;

public static Item HoeSprucium;

(중략)

public static void registerItems()

{

(중략)

SwordSprucium = new SemeiasSwords("SwordSprucium", sprucium);

GameRegistry.registerItem(SwordSprucium, "swordSprucium");

AxeSprucium new SemeiasSwords("AxeSprucium", sprucium);

GameRegistry.registerItem(AxeSprucium, "axeSprucium");

PickSprucium new SemeiasSwords("PickSprucium", sprucium);

GameRegistry.registerItem(PickSprucium, "pickSprucium");

SpadeSprucium new SemeiasSwords("SpadeSprucium", sprucium);

GameRegistry.registerItem(SpadeSprucium, "spadeSprucium");

HoeSprucium new SemeiasSwords("HoeSprucium", sprucium);

GameRegistry.registerItem(HoeSprucium, "hoeSprucium");

}


이상이 당시 제가 스프루슘 도구들을 추가하는 데 사용하던 코드입니다. 하이라이트 힘들었어요 뺴애액. 하여튼 찬찬히 살펴보겠습니다. 일단 유일하게 정상작동하던 검을 기준으로 ARABOPSIDA.


마인크래프트의 도구(검도 도구입니다)들에는 ToolMaterial이 있습니다. 이 ToolMaterial에 따라서 도구의 스탯이 결정됩니다. 도구의 성능에 영향을 주는 것은 오직 ToolMaterial뿐이죠. 기본적은 ToolMaterial에는 나무, 돌, 철, 금, 다이아몬드 5가지가 있습니다.


자, 그러면 이 ToolMaterial에 새로운 재료인 Sprucium을 추가해야 되겠죠? 그런데 마크 자체적으로는 이걸 지원 안 하고(...) 마인크래프트 포지, 정확히는 포지 모드로더에 포함된 Enum 기능으로 추가해야 합니다. 그 부분이 바로 public static Item.ToolMaterial sprucium = EnumHelper.addToolMaterial("Sprucium", 6, 20150110, 15.0F, 20150110.0F, 50);입니다. 이걸 뜯어보면 다음과 같습니다.


public static = 모릅니다. 저 자바 전혀 모릅니다. import가 그 뭐시기고 extends는 상속에 final은 최종 재정의를 의미한다는 것밖에 모릅니다.

Item.ToolMaterial sprucium sprucium이라는 ToolMaterial을 추가합니다

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

("Sprucium", 6, 20150110, 15.0F, 20150110.0F, 50) = 추가할 ToolMaterial을 설정합니다. 이름은 "Sprucium", 채광 레벨은 6, 내구도는 20150110, 채광 속도는 15.0, 공격력은 20150110.0, 마법성은 50입니다.


자, 이렇게 ToolMaterial sprucium을 추가 완료했습니다. 그러면 이제부터는 이 재료를 실제로 사용하는 도구를 추가해야겠지요? 일단 public static Item SwordSprucium;으로 SwordSprucium이라는 아이템을 추가한 후 그 아이템에다 스프루슘 검을 추가해야겠지요. 이 추가 작업은 SemeiasSwords 클래스에서 이루어집니다. 그곳으로 가 봅시다.



하이라이트 넣기 귀찮습니다(...) 자세한 건 생략하고, 중요한 건 다음 부분입니다.


private final String name;

public SemeiasSwords(String name, ToolMaterial sprucium) {

super(sprucium);

this.name = name;

}


그 사이 코드 좀 고쳤는데 거기서 거기입니다. 일단 private final String name;name이라는 스트링을 지정합니다. 그 다음 SemeiasSwords라는.. 이걸 뭐라고 하죠? 함수인가? 하여튼 그걸 이용해서 2개의 입력 - 스트링 name과 툴매티리얼 sprucium - 이 입력되면 그에 따라 이러쿵저러쿵 아이템을 정의해서 메챠쿠챠하는 겁니다. 그리고 name은 name으로 정의했죠. 따라서 이걸 임포트한 SemeiasUtilsItems.class에서는 앞에서 추가한 아이템 이름 = new SemeiasSwords("아이템 이름", ToolMaterial) 구문을 이용해 추가한 아이템에 정보를 삽입할 수 있게 됩니다.


완벽하죠? 뭐가 문제냐고요?


그 삽입하는 부분을 다시 한 번 보여드리겠습니다.


SwordSprucium new SemeiasSwords("SwordSprucium"sprucium);

GameRegistry.registerItem(SwordSprucium, "swordSprucium");

AxeSprucium new SemeiasSwords("AxeSprucium"sprucium);

GameRegistry.registerItem(AxeSprucium"axeSprucium");

PickSprucium new SemeiasSwords("PickSprucium"sprucium);

GameRegistry.registerItem(PickSprucium"pickSprucium");

SpadeSprucium new SemeiasSwords("SpadeSprucium"sprucium);

GameRegistry.registerItem(SpadeSprucium"spadeSprucium");

HoeSprucium new SemeiasSwords("HoeSprucium"sprucium);

GameRegistry.registerItem(HoeSprucium"hoeSprucium");


이제 아시겠죠?



네, 분명 검(SemeiasSwords.class)뿐만 아니라 도끼(SemeiasAxes.class), 곡괭이(SemeiasPicks.class), 삽(SemeiasSpades.class)과 괭이(SemeiasHoes.class)까지 모두 클래스와 메서드???인가 하여튼 아이템 정보 삽입할 때 쓰는 그걸 만들어 놨는데도 멍청하게 도구 5개 전부를 검으로 만들어서 삽입했습니다. 뭐 이런 정신나간 짓을 다 한 거야.




뭐, 하여튼 고쳤습니다. 이번에는 자력으로. 예전 같은 수모는 당하지 않으리(...)



그렇게 했습니다. 이번에는 lang 파일을 만드는 중. 대체 왜 이클립스 기본 세팅이 UTF-8이 아닌 거야



짠.



짠! 아, 공격력 내렸습니다.



덤으로 가공 도구들 - 망치, 커터, 줄칼, 용접기 - 도 만들었습니다. 텍스처가 개판이지만 넘어갑니다. 그리고 얘네는 나름 무기 취급입니다. 그래서 이렇게 용접기로 패리할 수 있습니다(...) 뭐 이런 막장이.


자, 이렇게 일단 아이템과 도구들은 대충 만들었고, 다음 차례는 이 아이템과 도구들을 만들 조합법을 추가하는 것이겠군요.






근데 조합법 어떻게 만들지???


그렇게 제 멘탈은 펄버라이저를 통과했습니다.












... 하지만 여기서 멈출 수는 없는 법.

과연 자바는 0도 모르는 세메이아는 모드 제작에 성공할 것인가!




다음 이 시간에.



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

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

예 반갑습니다. 엔티머입니다.

오늘도 돌아온 개발근황! 이번엔 쓸게 그리 많지 않아요. 오늘은 3D Things 모드만 만지작거렸거든요.




아무튼 오늘의 주인공 대장간 용광로(Forge Smelter)! 사실 전 근황을 보면 알겠지만 원래 철을 넣으면 달군 철을 내뱉는 녀석이였는데, 갈아엎었습니다.




자, 첫번째로 쉬프트+맨손으로 우클릭하면 정보를 출력하게 만들었어요! 채팅 출력하는건 매우 쉽더군요.

암튼 GUI를 안만들겠다 하면서 어떻게든 정보를 알게해주고 싶어서 만든 기능이죠.


그런데 정보를 보면 알겠지만, inventory, tank, progress라는 3가지를 알려주죠. 예 그렇습니다. 예전의 기능은 다 버렸어요. 이젠 갈아엎은 새 기능을 가지고 있습니다. 바로 금속 녹이기!

먼저 철이나 금을 집어넣으면 내부 인벤토리가 차오릅니다. 최대 개수는 8개죠. 즉, 한번에 8개이상 못넣습니다. 일단 주괴를 넣어두고 나면 녹이기가 진행되죠. progress가 바로 그것입니다. 일정 시간당(철은 400틱, 금은 350틱) 1개씩 녹여서 tank에다가 1씩 저장해둡니다. 참고로 탱크의 최대용량은 16.


아 그리고 다른 모드랑 호환따위 불가능합니다. 애초에 실제 인벤토리를 가지는 블록이 아니라 내부 정수 변수 7개를 가지고 노는 거거든요!




그리고 새로운 블록! 바로 대장간 양동이(Forge Bucket)입니다. 사실 용도로는 아이템이여도 무방하지만 '멋'을 위해 블록으로 만들어 봤어요. 이렇게 한두개 설치해두면 멋있지 않겠어요?




이 양동이들의 용도는 바로 녹은 금속 퍼내기입니다. 양동이를 들고 녹은 금속이 담긴 용광로를 우클릭하면 뿅 하고 액체가 담긴 양동이가 튀어나오죠. 역시 이 양동이들도 설치가 가능합니다. 게다가 녹은 금속이 담긴 양동이에선 연기도 나오게 만들었어요!

액체 텍스쳐는 대충 이미지 에디터 열어서 단색으로 덮은 다음에 브러쉬 들고 이리저리 문질렀어요. 꽤 볼만하게 나온듯.



아직 이 녹은 금속들의 사용처는 없습니다. 아직 제 머리속에서만 있죠. 대충 주형틀에 부어서 이리저리 만들게 해볼 생각인데... 암튼 또 언제 올라올지 모르는 개발근황, 오늘은 여기까지입니다!

반갑습니다 엔티머입니다.


글을 뭘 써볼까 하다가 요새 하고있는 마인크래프트 모드개발을 올리자 해서 올립니다.

옛날처럼 의욕적으로 블로그를 하지 않기도 하고 개발 자체가 만들고자 한게 얼마나 걸릴지 잘 모르기도 하고 그래서 비주기적으로 모드 만들기에 관한걸 올릴 생각입니다.


아무튼간에 첫 글! 첫 글인만큼 지금까지 만든 모드들과 성과에 대해 좀 써볼까 해요.



1. Entimer's Utilities


마인크래프트 버전 1.7.10

모드 버전 build15r


eutilities-build15r-mc1.7.10.jar


모딩을 시작한지 얼마 되지 않았을 때 (사실 지금도 얼마 안됬지만) 만든 모드로, 처음엔 1.10.2로 개발하려 했으나 제가 몸을 담고 있는 스프가 1.7.10으로 회귀하면서 1.7.10으로 방향을 튼 모드입니다. 현재는 스프 시즌7에 들어갈 모드 목록중 하나로 자리하고 있습니다.


모딩을 시작한기 극초창기에 만든 모드인만큼 고급진건 못만들고 그냥 이것저것 잡것을 만들어 보기 위해 특별한 컨셉을 잡지 않고 유틸리티로 만들었죠.

이런저런 아이템을 만들다 보니 그냥 블록과 아이템부터, 음식, 작물, 무기, 면마다 텍스쳐가 다른 블록 등을 만들게 됬습니다.



현재는 모드의 크리에이티브 탭을 만들어서 다 집어넣어 두고 있죠.

참고로 아이템/블록들 중 일부는 연습용으로만 만들고 실제 기능은 아무것도 없고 조합도 할수없는 것이 조금 있습니다. 없애기 귀찮아서 냅두는 중...




2. Entimer's Custom Armor Mod


마인크래프트 버전 1.7.10

모드 버전 1.1.5


customarmor-1.1.5_mc1.7.10.jar


두번째 모드는 커스텀 아머 모드로, 갑옷을 추가해보자 해서 시작된 모드입니다. 근데, 그냥 갑옷 추가하긴 밋밋해서 3D 모델을 써보잔 생각에 techne라는 프로그램으로 모델링해서 몇가지 갑옷을 만들었죠.



그렇게 추가된 4종의 갑옷.


맨 위 왼쪽의 종이갑옷은 사실 나무갑옷이였습니다. 갑옷을 연습하잔 생각에 3D모델 안쓰고 마크 자체 갑옷 모델을 사용했죠. 나중에 다른 갑옷 만들며 종이로 변경해서 현재의 종이갑옷이 되었죠. 성능은 재활용 쓰레기입니다.

상단 오른쪽의 초록빛 갑옷은 바이킹 갑옷. 투구의 뿔과 왼팔의 방패가 포인트죠.

셋째는 하단 왼쪽의 기사 갑옷입니다. 이번엔 등의 망토가 달려있어요.

마지막으로 왕의 기사 갑옷. 가장 많이 신경써서 모델링한 갑옷입니다. 다이아몬드 갑옷보다 성능이 좋죠.


이렇게 갑옷을 만들다 보니 이것만으론 부족하다 생각이 들었습니다. 안그래도 갑옷 조합도 기존 갑옷들보다 복잡하고 귀찮은데 별 특징도 없이 만들 이유는 딱히 없단 말이죠. 그래서 보석 강화란 시스템을 만들었습니다.



만들다보니 지금은 9종이 된 광물입니다.

8종은 보석, 1종은 금속으로 만든 광물들이죠.


모든 보석은 낮은 좌표에서 낮은 확률로 생성되고 캐면 원석 아이템이 1~3개씩 떨어지게 만들었습니다. 그리고 원석 5개를 조합하면 다듬어진 특별한 보석이 나오게 되죠.

특별한 보석들은 각각 능력을 지녔습니다. 알맞은 갑옷 부위와 조합하면 능력을 부여하죠. 예를들어 가장 사기 보석인 천리안의 오팔은 투구와 조합하면 야간투시 효과를 주죠. 단, 보석을 여러개 박지는 못하게 만들었습니다.


그리고 가장 오른쪽의 광물은 별철(Starium)입니다. 가상의 금속이죠. 이름은 소설 '눈물을 마시는 새'에서 따왔습니다. 사실 따왔다기도 뭐한게 이름이 똑같으니... 그래도 문제가 없을거라고 믿습니다. 제 모드가 뭐 그리 대단한것도 아니고...

아무튼 이 별철은 80이상의 높은 좌표에서만 생성되죠. 게다가 캐면 원석이 아닌 쬐그만 조각들이 여러개 떨어집니다. 이걸 구워 너겟으로 만든 뒤 9개를 조합하면 주죄가 되죠.

이렇게 얻기 힘들게 만든 이유는 4티어 갑옷의 재료이기 때문. 갑옷이 다이아보다 좋은데 재료를 어떻게 할까 생각하다 만든 광물입니다.


이 모드도 스프 시즌7에 추가됩니다. 근데 오팔은 너프를 먹었죠.




3. 3D Things


마인크래프트 버전 1.10.2

모드 버전 testing(아직 빌드 1번도 안했습니다)


빌드를 안해서 다운용 파일도 없습니다.


이 모드는 최근 만들기 시작한 모드입니다. 1.7.10만 개발하다 보니 이건 너무 오래된 버전이다란 생각이 들어서 한번 만들어보기 시작한 모드죠.

근데 하다보니 3D 만들기가 1.7.10보다 훨씬 쉬워진 느낌이다란 생각이 들게 됬죠.


마크가 1.7.10에서 1.8이상으로 넘어가면서 큰 변경점중 하나가 json이란 것인데요. 이 json이란걸 잘만 짜주면 3d모델은 별다른 코딩 없이 추가가 되게 됩니다.

근데 Mrcrayfish라는 가구모드 제작자가 1.8넘어오면서 직접 개발한 모델링 프로그램이 json을 자동으로 짜 주거든요. 전 자동으로 만든 json에다가 입맛대로 조금만 수정하면 되는 겁니다.


암튼 결론적으로 3D작업이 1.7.10보다 10배는 쉬워진 느낌이 들더라구요. 그래서 컨셉을 잡은게 '3D 투성이인 모드를 만들자' 입니다.


이 모드는 사실 만들기 시작한지 얼마 되지도 않았고 있는게 없는 모드입니다. 하지만 요새 가장 많이 만지는 모드이기도 하죠.



먼저 3D로 된 망치 아이템을 만들었습니다. 육면체 2개짜리 모델이다 보니 1분만에 만든 듯...




그리고 모드 자체 모루를 만들기 위해 대장간 모루 블록을 추가했죠. 아직은 아무 기능도 없는 블록이지만 차차 기능을 가지게 될 블록입니다.




그리고 이 모드에서 가장 많이 개발된 것. 바로 대장간 용광로입니다.


이 블록은 철을 달궈진 철로 바꿔주는 블록인데요, 철을 들고 우클릭하면 내부로 들어가지는데, 10초가 지나면 달궈진 철을 뱉습니다.


그리고 이 블록은 제게 큰 의미가 있는데 바로, 제가 만든 최초의 기능성 타일엔티티라는 것이죠. 지금까진 우클릭하면 메세지나 내보내는게 전부였지만, 이제 특별한 기능을 할수 있게 됬습니다.




그럼 제가 지금까지 만든 모드는 이정도고요, 앞으로도 뭔가를 만들면 개발근황을 올리도록 하겠습니다.