마인크래프트/모드/자바 에디션/포지
1. 개요
홈페이지
포지 모음 링크
2020년 11월 25일 기준으로 마인크래프트 자바 에디션 1.16.4버전을 기준, 포지의 최신버전은 35.1.4이다.
어지간한 모드의 설치, 사용을 위해서 필요한, 다른 모드들을 쉽게 만들 수 있도록 만들어주는 비공식 모드 플랫폼. 1.8이 넘어간 지금은 모드 설치시 가장 우선적으로 설치한 후 게임 실행 확인→종료하는 게 기본이 되었다. 모드 충돌 방지 모드를 한번에 통합시킨 범용성, 또한 32x32 이상의 리소스팩을 쓰면 텍스처가 깨지는 현상을 보완해 주는 MC패쳐의 역할까지 맡고 있어 포지를 깔게 되면 MC패쳐가 필요 없어지게 되어 Modloader보다 더 많이 사용되는 모드. 마인크래프트 모드계의 92% 이상을 장악하고 있다. 포지와 호환되는 모드까지 합하면 98% 이상이다.
특히 1.5 이상 버전의 포지는 Modloader의 기능도 포함하게 되어 더욱 범용성이 늘었다. 사실 이는 포지/FTB[1] 팀의 부도덕성을 알려주는 대목이기도 한데, 포지 측에서 모드로더가 여러모로 유용함을 눈여겨보고 자신들의 팀에 들어올 것을 권유했으나 이를 거절당하자 모드로더를 일일히 뜯어내어 포지의 코드에 통합해버리고 튕기게끔 코딩했다. 참고로 모드리스트에 ForgeModLoader라 써있는 게 리수가미가 역관광한 코드다. 참고로 위에 있는 모드들을 모아놓은 링크에선 모드들을 포지와 호환이 가능한가 불가능한가를 나누었다. 포지의 파워를 알 수 있는 대목.
1.13 포지는 마인크래프트의 코드가 많이 바뀌어서 개발하는데 시간이 많이 걸렸으며, 2019년 2월 15일에 드디어 공개되었다.[2] 그러나 2019년 8월 기준으로 1.13 포지에는 베타라고 적혀있으며, 심각한 문제가 발생할 수도 있다는 경고문이 붙어있다. 안정적인 플레이를 원할 경우 버그 우려가 있는 25.0.219 대신 다른 버전을 사용하는 것이 권장된다. 같은 해 6월부터는 1.14 포지 위주로 개발이 진행되어 1.13 포지는 개발이 일시 중단된 상태이다.
1.15부터는 Mojang에서 게임의 난독화 맵을 공개하였으며, 포지의 업데이트 속도 또한 다소 빨라지게 되었다.
2. FML Cycle
Forge Mod Loader(이하 FML)은 포지 API로 작성된 모드를 실제 마인크래프트에 올려 실행시킨다. 그러기 위해서 다음과 같은 로딩 작업을 시작한다. 1.13에서의 구조 변경 이후 이 과정은 모두 멀티스레드로 이루어지며, 따라서 구조 변경 이전인 1.12 이하 버전에 비해서 로딩 시간이 상당히 향상되었다.
- Registry Events
RegistryEvent.Register
이벤트를 구독하여 레지스트리에 컨텐츠를 추가할 수 있다. 기존 PreInit에서 하던 일을 추가되는 컨텐츠의 종류에 따라서 나누어 놓은 느낌이다. 만약 아이템을 추가하고 싶다면 RegistryEvent.Register
을 구독하는 메소드를 만든 후 내부에서 event.getRegistry().register(new MyItem())
과 같은 방식으로 아이템을 추가할 수 있다.- Setup
- Sided Setup
FMLClientSetupEvent
가, 서버에서는 FMLDedicatedServerSetupEvent
가 호출된다. 주로 조작키 설정이라던가 그래픽적인 부분에 대한 조정같이 클라이언트에만 적용되는 설정들을 할 때 사용된다. 이외에도 클라이언트/서버를 나누어서 하고 싶은 설정이 있으면 이것을 사용하면 된다.- IMC(Inter-Mod Communication, 모드 간 통신) Enqueue
- IMC Process
변경 전인 1.12 이하 버전의 사이클은 아래 문단과 같다.
[1.12.2 이하 버전]
아이템, 블록의 이미지를 등록한다. 로드하는 파일들의 크기가 가장 크기에 로딩 시간에 개인차가 심하다. 가끔 이 단계에서 10분 이상 멈추기도 한다.}}}
이후 마인크래프트가 실행된다. 서버와 클라이언트가 약간씩 다르다. 서버 시작, 맵 로딩과 같은 과정들은
MinecraftForge.EVENT_BUS
에서 해당하는 이벤트를 구독하면 사용할 수 있다.[4] 자세한 것은 포지와 마인크래프트의 소스 코드를 뒤져 보면서 찾아볼 수 있다.3. 광물사전
광물 사전은 기본적으로 모드간의 아이템 호환성을 위해 존재하는 기능이다. 이름은 광물 사전(Ore Dictionary) 이지만, 광물 외의 아이템 또한 등록이 가능하다.
광물사전 이름은 개발자가 원하는 대로 지정할 수 있지만, 보통 아이템 유형을 접두사로, 아이템의 재질이나 종류를 접미사로 한 형태를 가진다. 예를 들어, 써멀 익스펜션의 구리 주괴는 ingot(주괴) + Copper(구리) 로 등록되어 있으며, 인더스트리얼크래프트 2, 이머시브 엔지니어링 등 타 모드의 조합법에 활용 가능하다. 또한 대소문자를 구분하는 점에 유의해야 한다.
NEI, 메카니즘(Mekanism), 마인트위커 등의 모드를 사용하면 아이템의 광물사전 이름의 확인이 가능하다.
1.14부터는 바닐라에서 유사한 기능인 태그(Tag)를 지원함에 따라 삭제되었다. 아이템만 등록 가능하던 광물사전과 달리 블록[5] 이나 액체[6] 도 직접 등록이 가능하여 더욱 범용적이다.
3.1. 광물사전 통합 기능
Thermal Foundation, 메카니즘, 매리컬쳐(Mariculture) 등의 모드의 아이템과 블록을 통해 광물사전에 같이 등록된 아이템끼리 변환시킬 수 있다.
4. 플루이드 레지스트리
5. 포지 에너지 (Forge Energy, FE)
1.10 포지에 추가된 기능으로 포지의 자체적인 에너지 api이다. 2019년 현재 RF를 이용하던 모드 대부분은 포지 에너지로 갈아탔으며, RF 지원을 존치하는 모드에서도 RF와 1:1 비율로 교환 가능하다.[7]
여담으로 이 api의 코드는 RF api 코드를 원작자에게 허락받고 포지로 옮겨온것이라고 한다.
6. 통용 양동이 (Universal Bucket)
1.11 포지에 추가된 기능. 이전에는 별도의 양동이 아이템을 추가해야 모드 액체를 담고 있는 양동이를 구현 가능하였으나 이 기능이 생기며 보다 쉽게 액체 양동이를 추가할 수 있게 되었다. 통용 양동이에 기체 물질을 등록할 경우 뒤집힌 양동이에 내용물이 담긴 형태로 표시된다.
1.13부터는 아이템 ID 개수 제한이 풀리면서 메타데이터나 NBT 등으로 구분되는 아이템의 사용을 자제하는 분위기로 바뀌었으므로 이 기능이 삭제되었으며, 액체 양동이를 별도의 아이템으로 추가시켜야 한다. 그러나 통용 양동이의 모델은 여전히 남아있기에 모드에서 이용 가능하다.
6.1. 오디오모드 (Audiomod)
링크
모드에서 따로 효과음을 지원하게 해준다. 요구하는 모드를 사용하려면 설치를 권장. 1.6.2 이후 포지에 흡수.
7. 설치법
7.1. 기존 런처 설치법 ( ~ 1.5.2)
- 2014년 초부터 구조가 다른 런처를 배포하고 기존 런처는 막아 놓았다. 이 설치법도 쓸 수는 있으나 권장되지 않는 방법이므로 참고용으로만 봐 주시길.
7.2. 신 런처 설치법 (1.5.2 ~ )
1.5.2부턴 아예 간편 설치기를 배포한다. 간편 설치기 사용 방법은 jar 파일을 마우스 오른쪽 클릭, 프로그램에서 열기, Java(TM) Platform SE binary를 선택하면 된다. 이래도 실행되지 않을 경우 Jarfix 홈페이지에서 Jarfix 프로그램을 내려받아 한 번만 실행하면 문제가 발생한 코드가 수정되어 이후 큰 문제가 없을 경우 정상적으로 설치 파일을 실행할 수 있다.
1.6.4부터는 Windows 전용 exe 파일도 배포한다.[8] Installer-Windows에서 다운받을 수 있다. 한편 기존의 jar 아카이브 형식은 그냥 Installer에서 다운받을 수 있다. 운영체제에 관계없이 이용할 수 있다는 뜻이다. 두 개의 UI는 같다. 따라서 리눅스나 맥 사용자들은 반드시 이걸 받자. 또한 Universal에 있는 것도 있다. 아마도 libraries 폴더에 종류별로 압축을 풀어 사용하는 것으로 보인다.
신 런처(버전 바꾸기가 가능하고 각 버전 별로 미리 세팅해 둘 수 있는 런처)부터는 .minecraft 폴더 안에 mods 폴더를 만든 뒤, 모드를 집어 넣고 모드 버전(1.5.2, 1.7.2 등)에 맞는 포지로 설정 후 실행하면 바로 적용된다.
8. 모드 적용 방법
위의 내용은 '''Forge를 공식 사이트에서 적용한 것'''을 기준으로 작성되었다.Forge가 정상적으로 실행/적용됐다면, .minecraft 폴더에 Mods라는 폴더가 생긴다.[찾는방법]
Mods 폴더에 자신이 다운받은 모드 파일[9]
을 '''압축을 풀지 않고''' Mods 폴더에 넣어준다.Forge 버전을 실행한다.
정상적으로 적용됨을 확인[10]
한 후 Minecraft를 종료한다.
8.1. 버전별 모드 적용 방법
[1] 포지 팀은 FTB 팀의 하위 팀이다.[2] 마인크래프트 코드도 많이 바뀐 김에 포지 자체도 오래된 코드들을 바닥부터 갈아엎는 작업을 거쳤다.[3] 마인크래프트가 클라이언트와 서버로 나뉜다는 사실은 흔히 알고 있는데, 싱글플레이어 월드는 사실 한 컴퓨터에서 클라이언트와 서버를 모두 구동시킨 이후(!!!) 둘이 서로 통신하는 식으로 작동한다는 사실을 아는 사람은 많지 않다. 모드 코딩을 하다 보면 진짜 말 그대로 물리적으로 떨어진 클라이언트/서버에서만 작동해야 되는 코드가 있고, 논리적 서버에서 작동해야 하는 코드가 있는데, 물리적 서버는 논리적 서버를 포함하지만, 논리적 서버가 무조건 물리적 서버라고는 말할 수 없기 때문에 둘을 구별해서 코딩하는 것이 중요하다.[4] 사실 좀 더 정확하게 말하자면, 위의 FML 사이클이라고 표현된 과정들도 전부 Event 기반으로 작동하지만, 위의 과정들은 Registry Events를 제외하면 전부 모드의 이벤트 버스를 구독해야 한다는 차이점이 있다.[5] 광석사전에 블록을 등록하려면 블록의 아이템을 등록해야 한다.[6] 모드가 설치된 경우 한정. 바닐라에서는 블록과 아이템만 태그를 지원한다.[7] 포레스트리 등 일부 모드에서는 포지 에너지만 사용함에도 불구하고 전력 표기를 FE가 아닌 RF로 하고 있다. 또한 RF의 원조 모드인 Thermal Expansion도 이 에너지를 지원한다.[8] 이는 자바파일을 exe파일로 변환시켰기 때문에 자바가 깔려있지 않으면 실행되지 않는다.[찾는방법] Windows 검색 창에 %appdata%를 입력한다. Roaming 폴더에 들어가 .minecraft 폴더를 찾는다.[9] 보통 .jar, .zip 등 압축된 파일로 나온다.[10] 왼쪽 아래의 모드 갯수가 늘어나 있으면 정상적으로 적용된 것이다.[예시] 1.7.10 모드 → 1.7.10