WorldGen Feature 기초 — 광물 생성
데이터팩 3종(configured_feature / placed_feature / biome_modifier)으로 루비 광석을 오버월드 지하에 생성하는 전체 흐름을 학습합니다.
WorldGen Feature 기초 — 광물 생성
이 챕터에서는 데이터팩 JSON 3종만으로 새 광물을 세계 생성(WorldGen)에 추가하는 방법을 학습합니다. NeoForge 26부터 광물 배치는 코드가 아닌 데이터팩으로 정의하는 것이 공식 권장 방식입니다.
개요 — 3종 JSON의 역할
| 파일 | 위치 | 역할 |
|---|---|---|
configured_feature | worldgen/configured_feature/ | 무엇을 생성할지 정의 (Feature 종류 + 설정) |
placed_feature | worldgen/placed_feature/ | 어디에 얼마나 배치할지 정의 (높이·개수·Placement Modifier) |
biome_modifier | neoforge/biome_modifier/ | 어느 바이옴에 추가할지 정의 (NeoForge 전용) |
세 파일이 모두 있어야 광물이 실제 세계에 생성됩니다. 하나라도 빠지면 광물이 나타나지 않습니다.
1. configured_feature — 무엇을 생성할지
configured_feature는 Feature의 종류와 파라미터를 지정합니다. 광물에는 minecraft:ore Feature 타입을 사용합니다.
// examplemod-template-26.1.2/src/main/resources/data/examplemod/worldgen/configured_feature/ruby_ore.json
{
"type": "minecraft:ore",
"config": {
"size": 8,
"discard_chance_on_air_exposure": 0.0,
"targets": [
{
"target": {"predicate_type": "minecraft:tag_match", "tag": "minecraft:stone_ore_replaceables"},
"state": {"Name": "examplemod:ruby_ore"}
}
]
}
}각 필드 설명
| 필드 | 값 | 설명 |
|---|---|---|
type | "minecraft:ore" | 광맥(vein) 형태로 블록을 배치하는 내장 Feature 타입 |
size | 8 | 광맥 한 개의 최대 블록 수. 다이아몬드 광석(size: 9)과 유사한 규모 |
discard_chance_on_air_exposure | 0.0 | 공기에 노출된 블록을 제거할 확률. 0.0 = 제거 없음. 석탄처럼 노출 허용 |
targets | 배열 | 교체 대상 블록과 결과 블록 쌍의 목록 |
target.tag | "minecraft:stone_ore_replaceables" | 교체 가능한 블록 태그. 석재·심층암 계열 모두 포함 |
state.Name | "examplemod:ruby_ore" | 생성될 루비 광석 블록의 레지스트리 ID |
stone_ore_replaceables태그
minecraft:stone,minecraft:deepslate,minecraft:granite,minecraft:diorite,minecraft:andesite등 광석이 교체 가능한 모든 바닐라 돌 블록을 포함합니다. 이 태그를 사용하면 하나의configured_feature로 석재 구역과 심층암 구역 모두에서 올바른 블록으로 생성됩니다.
2. placed_feature — 어디에 얼마나 배치할지
placed_feature는 configured_feature를 참조하고, Placement Modifier 목록으로 배치 위치와 횟수를 제어합니다.
// examplemod-template-26.1.2/src/main/resources/data/examplemod/worldgen/placed_feature/ruby_ore.json
{
"feature": "examplemod:ruby_ore",
"placement": [
{"type": "minecraft:count", "count": 8},
{"type": "minecraft:in_square"},
{"type": "minecraft:height_range", "height": {"type": "minecraft:uniform", "min_inclusive": {"absolute": -64}, "max_inclusive": {"absolute": 32}}},
{"type": "minecraft:biome"}
]
}Placement Modifier 순서별 역할
| 순서 | 타입 | 역할 |
|---|---|---|
| 1 | minecraft:count | 청크당 광맥 생성 시도 횟수. count: 8 = 청크당 최대 8번 시도 |
| 2 | minecraft:in_square | X/Z 좌표를 청크 내 무작위 위치로 분산 |
| 3 | minecraft:height_range | Y 좌표 범위 지정. -64(지하 바닥) ~ 32(지상 약간 위) 사이 균등 분포 |
| 4 | minecraft:biome | 현재 바이옴이 biome_modifier에 지정된 바이옴과 일치하는지 최종 확인 |
Y 범위 설계
루비 광석은-64~32범위에 균등 분포합니다. 다이아몬드(최적 Y: -59)보다 약간 넓고 높은 대역으로, 지하 채굴 중 자연스럽게 발견될 수 있습니다. 원하는 희귀도에 따라count와 Y 범위를 조절하세요.
3. biome_modifier — 어느 바이옴에 추가할지 (NeoForge 전용)
biome_modifier는 NeoForge가 추가한 시스템으로, 기존 바이옴의 Feature 목록을 데이터팩으로 수정합니다. 바닐라 데이터팩만으로는 이 기능을 사용할 수 없습니다.
// examplemod-template-26.1.2/src/main/resources/data/examplemod/neoforge/biome_modifier/add_ruby_ore.json
{
"type": "neoforge:add_features",
"biomes": "#minecraft:is_overworld",
"features": "examplemod:ruby_ore",
"step": "underground_ores"
}각 필드 설명
| 필드 | 값 | 설명 |
|---|---|---|
type | "neoforge:add_features" | 바이옴에 Feature를 추가하는 NeoForge 수정자 타입 |
biomes | "#minecraft:is_overworld" | 적용 대상 바이옴 태그. # prefix = 바이옴 태그 참조 |
features | "examplemod:ruby_ore" | 추가할 placed_feature의 레지스트리 ID |
step | "underground_ores" | Feature가 삽입될 생성 단계. 광석에는 underground_ores 사용 |
#minecraft:is_overworld태그
오버월드에 속하는 모든 바이옴(평원·사막·타이가·정글 등)을 포함합니다. 모드 추가 바이옴도 이 태그를 상속하면 자동 포함됩니다.
특정 바이옴에만 추가하려면"biomes": "minecraft:plains"처럼 단일 바이옴 ID를 지정하거나,["minecraft:plains", "minecraft:forest"]배열로 나열합니다.
biome_modifier 저장 경로 주의
data/examplemod/neoforge/biome_modifier/add_ruby_ore.json
↑ ↑
모드 네임스페이스 NeoForge 전용 네임스페이스
data/<모드이름>/neoforge/biome_modifier/ 경로에 저장해야 합니다. data/<모드이름>/worldgen/ 이 아닙니다.
4. 안티패턴 — biome_modifier 누락
⚠️ biome_modifier 누락
configured_feature+placed_feature만 작성하고biome_modifier를 누락하면:
- 어느 바이옴에도 Feature가 추가되지 않음
- 새 세계를 생성해도 루비 광석이 전혀 나타나지 않음
- 빌드 오류나 경고가 없어 원인 파악이 어려움
3종 JSON 모두 필수:
번호 파일 역할 1 configured_feature/ruby_ore.jsonFeature 정의 2 placed_feature/ruby_ore.json배치 규칙 3 neoforge/biome_modifier/add_ruby_ore.json어느 바이옴에 ← NeoForge 전용, 누락 금지
5. 인게임 검증
5-1. 새 세계 생성 후 지하 탐색
- Minecraft 실행 → 새 세계 생성 (싱글플레이어, 크리에이티브 권장)
- 지하 Y: -64 ~ 32 구역 채굴
- 붉은 루비 광석 블록이 자연 생성되어야 함
5-2. /locate 명령으로 빠른 검증
/locate structure minecraft:mineshaft
또는 지하를 빠르게 탐색하려면 크리에이티브 모드에서 스펙테이터로 전환합니다.
/gamemode spectator
스펙테이터 모드에서 블록을 통과해 지하를 탐색하면 루비 광석 배치를 신속하게 확인할 수 있습니다.
5-3. F3 디버그로 Y좌표 확인
F3 키를 눌러 디버그 화면을 열면 현재 Y좌표가 표시됩니다. Y: -64 ~ 32 범위에서 탐색하고 있는지 확인하세요.
요약
| 단계 | 파일 경로 | 핵심 내용 |
|---|---|---|
| 1 | worldgen/configured_feature/ruby_ore.json | minecraft:ore + size:8 + stone_ore_replaceables 태그 |
| 2 | worldgen/placed_feature/ruby_ore.json | count:8 + Y범위 -64~32 |
| 3 | neoforge/biome_modifier/add_ruby_ore.json | neoforge:add_features + #minecraft:is_overworld + underground_ores |
다음 챕터에서는 커스텀 구조물(Structure)을 데이터팩으로 정의하는 방법을 학습합니다.