프로젝트 만들기
명령 한 줄로 만들기 (권장)
압축을 푼 템플릿 폴더(crystal-garden)에서 initPolyMod를 실행합니다. 모드 ID, 이름, 패키지, 엔트리포인트 클래스, 프로젝트 이름을 그 자리에서 한꺼번에 바꿔 줍니다.
- Windows (PowerShell)
- macOS · Linux (bash)
.\gradlew.bat initPolyMod -PmodId=crystal_garden "-PmodName=Crystal Garden" "-PmodPackage=com.example.crystalgarden"
.\gradlew.bat build
./gradlew initPolyMod -PmodId=crystal_garden "-PmodName=Crystal Garden" "-PmodPackage=com.example.crystalgarden"
./gradlew build
build가 성공하면 준비가 끝난 것이므로, 아래 직접 이름 바꾸기는 건너뛰어도 됩니다. initPolyMod는 손대지 않은 템플릿에서만 동작합니다. 처음부터 다시 하려면 템플릿의 압축을 다시 풉니다. 속성과 기본값은 모드 제작 도구에서 확인할 수 있습니다.
만들어진 프로젝트
crystal-garden/
├─ settings.gradle.kts 프로젝트 이름, Gradle이 Poly 모드 로더를 찾는 곳
├─ build.gradle.kts 모드 플러그인 dev.polymodloader.mod
├─ gradle.properties 실행할 Minecraft 버전(선택)
├─ .run/runClient.run.xml IntelliJ 실행 구성
├─ src/main/java/com/example/crystalgarden/CrystalGardenMod.java 엔트리포인트
└─ src/main/resources/poly.mod.json 모드 메타데이터
템플릿에는 예시로 루비 아이템과 루비 블록이 들어 있습니다. 이 내용은 다음 페이지들에서 Crystal Garden의 코드로 바꿀 것입니다.
pluginManagement {
// -PpolyLocalSdk: use a local Poly Mod Loader build (./gradlew publishToMavenLocal and
// ./gradlew -p build-logic publishToMavenLocal in Poly Mod Loader) even for a version that is published.
val localFirst = providers.gradleProperty("polyLocalSdk").isPresent
repositories {
if (localFirst) mavenLocal()
// The Poly Mod Loader SDK: the dev.polymodloader.mod plugin and, through it, Poly Mod Loader itself.
maven("https://www.polymc.net/maven/") {
name = "Poly Mod Loader"
content { includeGroupByRegex("dev\\.polymodloader(\\..*)?") }
}
// A local Poly Mod Loader build of a version the SDK repository does not have.
if (!localFirst) mavenLocal()
gradlePluginPortal()
}
}
rootProject.name = "crystal-garden"
Gradle은 dev.polymodloader.mod 플러그인과, 이 플러그인을 거쳐 Poly 모드 로더 자체를 먼저 Poly 모드 로더 웹사이트의 Maven 저장소(dev.polymodloader 그룹만)에서 찾고, 그다음 Maven Local, Gradle Plugin Portal 순서로 찾습니다. 같은 버전은 처음 찾은 저장소의 것을 씁니다. -PpolyLocalSdk는 Maven Local을 맨 앞에 둡니다. 로컬 Poly 모드 로더 빌드를 시험하는 기여자용입니다(모드 템플릿 받기).
build.gradle.kts의 첫 부분에서 Poly 모드 로더 모드 플러그인을 적용합니다.
plugins {
id("dev.polymodloader.mod") version "0.2.0-beta.1"
}
group = "com.example"
version = "0.1.0"
dev.polymodloader.mod 플러그인은 다음 기능을 제공합니다.
- Java 25 toolchain
compileOnly의존성: Native API(poly-lifecycle-api)와 SLF4J. 실행할 때는 Poly 모드 로더가 제공하므로 모드 jar에는 들어가지 않습니다validatePolyModJson:poly.mod.json을 Poly 모드 로더와 같은 검사기로 검증합니다(check에 포함)polyResources와generatePolyResources: 블록과 아이템의 모델, 블록 상태, 전리품, 이름 파일을 빌드할 때 만들어 줍니다checkPolyResources: 파일 이름, JSON, 모델·텍스처 참조의 실수를 게임을 켜기 전에 찾아냅니다(check에 포함)- 실행·검증 작업:
runClient,runServer,gameTests,worldCreateSaveTest,clientWorldReloadTest,serverBootSmokeTest
직접 이름 바꾸기
initPolyMod를 실행하지 않고 압축을 푼 템플릿의 이름을 직접 바꿔도 됩니다. 아래 네 곳을 바꿉니다.
| 바꿀 곳 | 예시 |
|---|---|
poly.mod.json의 id, name, 엔트리포인트 | "id": "crystal_garden" |
| Java 패키지와 클래스 | com.example.mymod.MyMod → com.example.crystalgarden.CrystalGardenMod |
| 리소스 폴더 | assets/my_mod/ → assets/crystal_garden/, data/crystal_garden/ |
settings.gradle.kts, build.gradle.kts | rootProject.name, group, worldCreateSaveTest가 확인할 로그 줄 |
모드 ID에는 소문자, 숫자, 밑줄만 쓸 수 있습니다.
리소스 폴더 이름이 모드 ID와 다르면 모델, 텍스처, 번역을 찾지 못합니다. 게임 안에서 보라색·검은색 체크무늬 텍스처가 보이면 폴더 이름부터 확인하세요.
다음 단계
poly.mod.json을 작성합니다.