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

엔트리포인트

common 엔트리포인트는 CommonModInitializer를 구현하며, 클라이언트와 서버 양쪽에서 실행됩니다. 블록, 아이템, 명령어, 네트워크, 게임 테스트 같은 모든 선언은 이 메서드 안에서 끝내야 합니다.

initPolyMod가 템플릿에서 이름을 바꾼 CrystalGardenMod.java를 아래처럼 바꿉니다. 지금은 크리스털 아이템과 크리스털 블록만 선언하고, 나머지는 다음 페이지들에서 채워 나갑니다.

src/main/java/com/example/crystalgarden/CrystalGardenMod.java
package com.example.crystalgarden;

import dev.polymodloader.api.content.CreativeTab;
import dev.polymodloader.api.content.block.BlockDefinition;
import dev.polymodloader.api.content.block.BlockSound;
import dev.polymodloader.api.content.item.ItemDefinition;
import dev.polymodloader.api.content.item.ItemRarity;
import dev.polymodloader.api.lifecycle.CommonModInitializer;
import dev.polymodloader.api.lifecycle.ModContext;
import dev.polymodloader.api.resource.ResourceId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public final class CrystalGardenMod implements CommonModInitializer {

static final String MOD_ID = "crystal_garden";
static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

static final ResourceId CRYSTAL = ResourceId.of(MOD_ID, "crystal");
static final ResourceId CRYSTAL_BLOCK = ResourceId.of(MOD_ID, "crystal_block");

@Override
public void onInitializeCommon(ModContext mod) {
LOGGER.info("[{}] Planting Crystal Garden {}", MOD_ID, mod.modVersion());

mod.content()
.item(
"crystal",
ItemDefinition.builder()
.rarity(ItemRarity.UNCOMMON)
.creativeTab(CreativeTab.INGREDIENTS)
.build());
mod.content()
.block(
"crystal_block",
BlockDefinition.builder()
.strength(1.5f, 1.5f)
.requiresCorrectTool()
.sound(BlockSound.AMETHYST)
.lightLevel(6)
.item(ItemDefinition.builder()
.creativeTab(CreativeTab.BUILDING_BLOCKS)
.build())
.build());
}
}
  • ResourceId.of(MOD_ID, "crystal")은 crystal_garden:crystal을 가리킵니다. 다른 클래스와 테스트는 이 ID로 아이템을 찾습니다.
  • .item(...)을 지정한 블록은 같은 ID의 블록 아이템도 함께 등록됩니다.
  • build.gradle.kts의 worldCreateSaveTest는 이 로그 줄이 나오는지 확인할 수 있습니다. 템플릿의 확인 줄(Hello from …, Server started)을 [crystal_garden] Planting Crystal Garden 0.1.0 하나로 바꾸세요.
선언은 엔트리포인트 안에서

게임이 레지스트리를 닫은 뒤에 하는 선언(예: 이벤트 리스너 안에서 아이템을 선언하는 경우)은 POLY-CONTENT-002 오류가 됩니다. 명령어, 네트워크, 게임 테스트도 같은 규칙을 따르며, 각각 POLY-COMMAND-002, POLY-NETWORK-002, POLY-GAMETEST-002가 발생합니다.

엔트리포인트에서 예외가 발생하면 Poly 모드 로더는 POLY-ENTRYPOINT-003과 함께 실행을 멈춥니다.

엔트리포인트 종류​

인터페이스poly.mod.json 키실행 시점
CommonModInitializercommon메인 스레드에서 의존성 순서대로, 게임 main보다 먼저
ClientModInitializerclient모든 common 다음, 클라이언트에서만
DedicatedServerModInitializerserver모든 common 다음, 전용 서버에서만

모드 사이의 실행 순서는 의존 대상이 먼저이고, 의존 관계가 같으면 모드 ID 순서입니다.

ModContext​

엔트리포인트가 받는 ModContext로 모든 API 영역에 접근할 수 있습니다.

메서드내용문서
modId(), modVersion(), side()모드 ID, 버전, 실행 측(CLIENT / DEDICATED_SERVER)—
content()블록·아이템·엔티티·효과·게임 규칙·사운드·파티클 등블록
events()이벤트 리스너 등록이벤트
commands()명령어명령어와 권한
network()페이로드 채널네트워크와 동기화
worldgen()바이옴 기능, 코드 바이옴, 지형 생성기월드 생성
resources()데이터·에셋 리로드 리스너리소스와 데이터
permissions()권한 노드와 공급자명령어와 권한
gameTests()게임 내 테스트게임 내 테스트
configDirectory()config/<mod id> 설정 폴더운영
onShutdown(description, task)JVM이 종료될 때 실행할 작업운영
client()키 바인딩, HUD, 그리기(클라이언트 엔트리포인트에서만 사용 가능)클라이언트 기본

다음 단계​

첫 블록에서 이 아이템과 블록에 모양을 입힙니다.

Buy me a coffee