poly.mod.json
poly.mod.json은 모드의 ID, 버전, 엔트리포인트, 의존성을 적는 메타데이터 파일입니다. Poly 모드 로더는 jar 안에 이 파일이 있는지를 보고 Poly 모드인지 판단합니다.
src/main/resources/poly.mod.json
{
"schemaVersion": 1,
"id": "crystal_garden",
"version": "0.1.0",
"name": "Crystal Garden",
"environment": "both",
"minecraft": [
"26.*"
],
"entrypoints": {
"common": ["com.example.crystalgarden.CrystalGardenMod"],
"client": ["com.example.crystalgarden.CrystalGardenClient"]
},
"depends": {
"poly": ">=0.1.0-alpha <0.2.0"
}
}
템플릿의 파일에는 client 줄이 없습니다. 위 예시는 클라이언트 코드에서 만들 CrystalGardenClient를 미리 적어 둔 것입니다. 적어 둔 클래스가 없으면 클라이언트가 시작할 때 POLY-ENTRYPOINT-001(클래스를 로드하지 못함)로 멈춥니다. 클라이언트 코드를 작성하기 전에 runClient를 실행해 보려면 이 줄을 잠시 빼 두세요.
필드
| 필드 | 뜻 |
|---|---|
schemaVersion | 스키마 버전. 지금은 1 |
id | 모드 ID. 소문자·숫자·밑줄 |
version | 모드 버전(SemVer) |
name | 표시 이름 |
environment | both(클라이언트·서버), client, server |
minecraft | 지원하는 Minecraft 버전 목록 |
entrypoints.common | 양쪽에서 실행됩니다. 콘텐츠, 명령어, 네트워크 채널은 여기서 선언합니다 |
entrypoints.client | 클라이언트에서만 실행됩니다. 키 바인딩, HUD, 화면, 그리기를 선언합니다 |
entrypoints.server | 전용 서버에서만 실행됩니다 |
depends | 필요한 모드와 버전 범위. poly는 Poly 모드 로더 자체를 가리킵니다 |
conflicts, capabilities, replacesSystems, transforms 같은 고급 필드는 poly.mod.json 스키마에서 설명합니다.
minecraft에 버전 적기
위 예시에서는 와일드카드 "26.*"를 적었습니다. minecraft 목록의 항목은 세 가지 형식으로 적을 수 있으며, 항목 중 하나라도 게임 버전과 맞으면 됩니다.
| 형식 | 예 | 맞는 버전 |
|---|---|---|
| 정확한 버전 | "26.2" | 그 버전 하나 |
| 와일드카드 | "26.*", "26.2.*", "*" | 26.*는 26.1, 26.2.1 같은 26 계열 전체, 26.2.*는 26.2와 그 핫픽스, *는 모든 버전 |
| 범위 | ">=26.2 <27" | 공백으로 구분한 비교식을 모두 만족하는 버전. 연산자는 >=, >, <=, <, = |
- 모드 템플릿과 Crystal Garden은
"26.*"를 사용합니다. - Crystal Garden처럼 Native API만 쓰는 모드는 와일드카드나 범위를 적습니다. 그러면 Poly 모드 로더가 새 버전을 지원하는 시점에 다시 빌드하지 않아도 그 버전에서 실행됩니다. 다만 그 버전의 게임 계층이 모드가 쓰는 API를 모두 구현하고 있어야 합니다.
- 변환 규칙(
transforms)처럼 특정 버전의 게임 코드에 의존하는 모드는 정확한 버전을 적습니다. - 범위는 숫자로 된 릴리스 버전끼리만 비교하므로 스냅숏과는 맞지 않습니다. 스냅숏에서 실행하려면 스냅숏 ID를 정확히 적으세요.
- 형식이 올바르지 않으면
POLY-METADATA-009가 발생합니다. 게임 버전과 맞는 항목이 없으면 Poly 모드 로더가 실행을 멈추고POLY-DEPENDENCY-007을 알립니다.
모드를 실행할 Minecraft 버전은 이 목록이 아니라 gradle.properties의 polyMinecraft로 고릅니다. 자세한 내용은 테스트 실행을 참고하세요.
검증
build(check)는 validatePolyModJson 작업으로 이 파일을 검증합니다. Poly 모드 로더가 실행할 때 쓰는 것과 같은 검사기를 사용하며, 오류가 있으면 어느 필드가 틀렸는지 알려 줍니다. 메타데이터 오류 코드는 POLY-METADATA-*입니다.
다음 단계
엔트리포인트를 작성합니다.