본문으로 건너뛰기
버전: Minecraft 26.2

첫 Poly 모드 만들기

Poly 모드(영어: Poly Mod)는 Poly 모드 로더의 Native API로 만들어 Poly 모드 로더에서 실행하는 모드를 가리키는 이름으로, Fabric 모드나 Forge 모드와 같은 위치의 용어입니다.

이 튜토리얼에서는 Crystal Garden이라는 Poly 모드를 처음부터 만듭니다. 크리스털 새싹을 심으면 시간이 지나면서 자라고, 다 자란 새싹을 사용하면 크리스털을 얻을 수 있습니다. 소요 시간은 30분 정도입니다.

개발자 미리보기(0.2.0-beta.1)

Poly 모드 로더 웹사이트의 모드 템플릿에서 시작하며, Poly 모드 로더는 Gradle이 웹사이트의 Maven 저장소에서 다운로드합니다. 모든 API가 PREVIEW 등급이므로 앞으로 바뀔 수 있습니다.

만들 것​

기능Native API페이지
크리스털 아이템, 크리스털 블록콘텐츠 선언, polyResources로 리소스 자동 생성첫 블록
4단계로 자라는 크리스털 새싹블록 상태 속성, 매 틱 실행되는 블록 엔티티, 블록 동작자라는 블록
플레이어별·월드별 수확 기록엔티티 데이터, 월드 저장소(클라이언트 동기화)저장 데이터와 명령어
/garden stats, /garden grow명령어, 권한 노드저장 데이터와 명령어
모드가 없는 클라이언트에는 접속 전에 안내접속 준비 단계 교환접속 확인
새싹 위 성장 표시, 수확 횟수 HUD, 단축키블록 엔티티 그리기, HUD 레이어, 키 바인딩클라이언트 코드
기능 자동 확인게임 내 테스트(창 없이 실행)게임 테스트

모든 코드는 공개 API(dev.polymodloader.api.*)만 사용하므로 Minecraft 클래스 이름, Mixin, 별도의 API 모드가 필요 없습니다. 그래서 poly.mod.json에 "minecraft": ["26.*"]처럼 적어 두면, Poly 모드 로더가 지원하는 26 계열 버전에서 모드를 다시 빌드하지 않고도 쓸 수 있습니다.

순서​

  1. 요구 사항 확인 — JDK 25
  2. 모드 템플릿 받기 — zip 하나를 다운로드해 압축 풀기
  3. 프로젝트 만들기 — initPolyMod 한 줄
  4. poly.mod.json — 모드 메타데이터
  5. 엔트리포인트 — CommonModInitializer와 ModContext
  6. 첫 블록 — 크리스털과 크리스털 블록, 리소스 자동 생성
  7. 자라는 블록 — 블록 상태와 블록 엔티티
  8. 저장 데이터와 명령어 — 수확 기록, 명령어, 권한
  9. 접속 확인 — 서버와 클라이언트의 모드 구성 맞추기
  10. 클라이언트 코드 — 그리기, HUD, 키 바인딩
  11. 게임 테스트 — 창 없이 기능 확인
  12. 빌드·실행·배포 — 게임에서 실행하고 jar 배포하기

IntelliJ IDEA를 사용한다면 IntelliJ IDEA를, 진행하다 막히면 문제 해결을 참고하세요.

다 만들면 이런 모양입니다​

crystal-garden/
├─ settings.gradle.kts 프로젝트 이름, Gradle이 Poly 모드 로더를 찾는 곳
├─ build.gradle.kts 모드 플러그인 dev.polymodloader.mod, polyResources
├─ src/main/java/com/example/crystalgarden/
│ ├─ CrystalGardenMod.java common 엔트리포인트: 선언을 모아 둡니다
│ ├─ CrystalSprout.java 자라는 새싹 블록
│ ├─ GardenCommands.java /garden 명령어
│ ├─ GardenTests.java 게임 내 테스트
│ └─ CrystalGardenClient.java client 엔트리포인트
└─ src/main/resources/
├─ poly.mod.json 모드 메타데이터
└─ assets/crystal_garden/ 새싹의 블록 상태, 번역

완성된 프로젝트는 Poly 모드 로더 소스의 examples/crystal-garden입니다. 소스는 지금 비공개이므로, 직접 작성하는 모든 파일의 코드를 이 페이지들에 실었습니다.

Buy me a coffee