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

리소스와 데이터

모드 jar의 팩​

모드 jar의 assets/는 클라이언트 리소스 팩으로, data/는 서버 데이터 팩으로 자동으로 추가됩니다.

  • 팩 ID는 poly/<mod id>입니다.
  • 필수 팩이며, 바닐라 위에 놓입니다.
  • 형식은 바닐라 26.2과 같습니다.
경로용도
assets/<mod>/blockstates/<block>.json, models/block/…, textures/block/…블록 모양
assets/<mod>/items/<item>.json, models/item/…, textures/item/…아이템 모양
assets/<mod>/lang/en_us.json, ko_kr.jsonblock.<mod>.<id>, item.<mod>.<id>, key.<mod>.<id>, key.category.<mod>.keybinds
assets/<mod>/textures/entity/…몹 텍스처
assets/<mod>/sounds.json사운드 이벤트
assets/<mod>/particles/<path>.json, textures/particle/…파티클 스프라이트
assets/<mod>/post_effect/<path>.json, shaders/post/…후처리 셰이더
data/<mod>/loot_table/blocks/<block>.json블록 드롭(없으면 아무것도 떨어지지 않음)
data/<mod>/recipe/*.json레시피
data/<mod>/advancement/*.json발전 과제
data/<mod>/worldgen/…, dimension/…, dimension_type/…, damage_type/…월드 생성, 차원, 피해 유형
data/minecraft/tags/block/mineable/pickaxe.json ("replace": false)도구 태그
data/my_mod/loot_table/blocks/glow_block.json
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1.0,
"conditions": [{"condition": "minecraft:survives_explosion"}],
"entries": [{"type": "minecraft:item", "name": "my_mod:glow_block"}]
}
]
}

리로드 리스너​

모드가 자기만의 형식으로 된 데이터 파일을 읽을 때 사용합니다.

mod.resources().onDataReload("my_mod/spells", files -> { /* … */ }); // data/<ns>/my_mod/spells/**.json
mod.resources().onAssetReload("my_mod/tips", files -> { /* … */ }); // assets/… (클라이언트)
mod.resources().onDataFiles("my_mod/banners", ".txt", files -> { /* … */ }); // 바이트로 받음 (onAssetFiles도 있음)
  • onDataReload/onAssetReload는 JSON 파일을 Map<ResourceId, String>으로, onDataFiles/onAssetFiles는 지정한 확장자의 파일을 Map<ResourceId, byte[]>로 넘겨 줍니다.
  • 파일 ID는 <namespace>:<디렉터리 아래 경로> 형식이며, 같은 ID의 파일이 여러 팩에 있으면 우선순위가 높은 팩의 파일을 씁니다.
  • 서버 데이터: 서버를 시작할 때와 /reload를 실행할 때 게임 데이터 다음에 읽습니다. 시작할 때는 메인 스레드에서, /reload 때는 서버 스레드에서 호출됩니다.
  • 클라이언트 에셋: 게임을 시작할 때와 F3+T를 누를 때 클라이언트 스레드에서 읽습니다.
  • 파일을 읽지 못하거나 리스너가 실패하면 POLY-RESOURCE-003을 기록하고 계속 진행합니다.

받은 내용을 다른 스레드에서 읽는다면 volatile 필드를 통째로 교체하는 방식으로 공개하세요.

static volatile Map<ResourceId, String> messages = Map.of();

mod.resources().onDataReload("my_mod_messages", files -> messages = files);

오류 코드​

코드뜻
POLY-RESOURCE-001잘못된 리로드 디렉터리
POLY-RESOURCE-002등록이 닫힌 뒤에 선언함
POLY-RESOURCE-003파일을 읽지 못함 또는 리스너 실패(기록하고 계속 진행)
POLY-CONTENT-004팩 종류를 알 수 없음
Buy me a coffee