API
월드 생성
광석, 나무, 꽃, 구조물, 바이옴이 월드에 저절로 나타납니다. 무엇을 어디에 둘지 선언하면 새 청크가 이를 받습니다.
광석
block "ruby_ore" { hardness: 3, tool: "pickaxe", tier: "iron" }
ore "ruby_ore" {
replaces: "stone_and_deepslate"
size: 9
per_chunk: 8
height: [-60, 60]
}| 속성 | 값 | 기본값 |
|---|---|---|
block |
놓을 블록: "mymod:other" |
광석과 이름이 같은 블록 |
replaces |
stone, deepslate, stone_and_deepslate(오버월드), netherrack(네더) 또는 end_stone(엔드) |
stone_and_deepslate |
size |
광맥 하나당 블록 수, 1–64 | 8 |
per_chunk |
청크마다 시도하는 광맥 수 | 8 |
height |
[min, max], 높이 범위 |
[-64, 64] |
biomes |
이 바이옴에서만, id 또는 태그로 지정 | 그 암석이 있는 모든 바이옴 |
biomes가 없으면 광석은 replaces가 속한 차원의 모든 바이옴에 나타나며, end_stone 광석은 엔드의 모든 바이옴에 나타납니다. 블록 자체는 단단함, 도구, 전리품과 함께 다른 블록처럼 선언합니다. 블록, 아이템, 조합법을 참고하세요.
ore "void_ore" {
replaces: "end_stone"
size: 5
per_chunk: 6
height: [10, 80]
biomes: ["mymod:crystal_glade"]
}나무
나무는 곧은 줄기와 잎 덩어리로 이루어집니다. 두 블록을 먼저 선언한 다음 나무를 선언합니다.
block "ruby_log" { hardness: 2, tool: "axe", sound: "wood" }
block "ruby_leaves" { hardness: 0.2, transparent: true, sound: "grass" }
tree "ruby_tree" {
trunk: "ruby_log"
leaves: "ruby_leaves"
height: 6
height_variation: 2
leaves_radius: 2
per_chunk: 2
biomes: ["#minecraft:is_forest", "minecraft:plains"]
}| 속성 | 값 | 기본값 |
|---|---|---|
trunk |
줄기 블록(모드 또는 게임의 것): "ruby_log", "minecraft:oak_log" |
— |
leaves |
잎 블록 | — |
height |
줄기 높이(블록 수) | 5 |
height_variation |
나무마다 높이가 달라지는 정도 | 2 |
leaves_radius |
잎 덩어리의 반지름(블록 수) | 2 |
per_chunk |
청크마다 시도하는 나무 수 | 1 |
biomes |
나타나는 바이옴(id 또는 태그) | — |
바이옴은 id(minecraft:plains) 또는 태그(#minecraft:is_forest)로 지정하며 자유롭게 섞을 수 있습니다. 줄기와 잎은 모드의 블록이든 게임의 블록이든 됩니다.
식물과 군락
식물은 꽃처럼 교차한 두 장의 이미지로 그려지는 블록입니다. 아무것도 부딪히지 않고 빛이 통과합니다. 텍스처는 textures/block/ruby_flower.png이며 배경은 투명해야 합니다.
block "ruby_flower" { plant: true, hardness: 0 }
patch "ruby_flowers" {
block: "ruby_flower"
biomes: ["#minecraft:is_overworld"]
rarity: 4
size: 32
spread: 7
}군락은 식물을 월드에 흩뿌립니다.
| 속성 | 값 | 기본값 |
|---|---|---|
block |
식물 블록 | — |
biomes |
나타나는 바이옴(id 또는 태그) | — |
rarity |
이 청크 수마다 군락 하나 | 4 |
size |
군락마다 놓으려고 시도하는 식물 수 | 32 |
spread |
군락 중심에서 가장 먼 거리(블록 수) | 7 |
식물은 오버월드의 땅(잔디, 흙, 이끼, 진흙) 위 공기 중에만 놓입니다. 다른 땅 위, 벽, 천장에 매달리는 식물은 피처를 작성하세요: 코드로 생성하기를 참고하세요.
구조물
구조물은 직접 만드는 건축물입니다.
- 게임에서 짓습니다.
- 구조 블록으로 저장합니다.
.nbt파일을 모드의structures/폴더에 복사합니다. CraftScript 모드는 스크립트 옆, Kotlin이나 Java jar는assets/<모드 id>/structures/입니다.
그런 다음 선언합니다.
structure "ruby_shrine" {
file: "ruby_shrine"
biomes: ["#minecraft:is_overworld"]
spacing: 24
separation: 8
buried: false
}| 속성 | 값 | 기본값 |
|---|---|---|
file |
확장자를 뺀 .nbt 파일 이름 | 첫 번째 variant, 또는 구조물의 이름 |
biomes |
나타나는 바이옴(id 또는 태그) | — |
spacing |
이 청크 수마다 구조물 약 하나 | 24 |
separation |
이 청크 수보다 가까이 생기지 않음(spacing보다 작아야 함) | 8 |
buried |
true면 땅에 파묻힘(폐허용) | false |
offset_y |
서 있는 지표에서 위로 올라가는 블록 수. 음수이면 가라앉힙니다 | 0 |
adapt_ground |
true이면 아래의 땅을 메우고 주변을 치웁니다. false이면 그대로 놓습니다 | true |
heights |
[min, max]: 지표가 있는 곳 어디서든 지표 위가 아니라 이 범위의 임의 높이에 놓습니다(하늘에 뜬 집) |
지표 위 |
/locate structure <모드 id>:ruby_shrine로 찾고 /place structure <모드 id>:ruby_shrine로 배치할 수 있습니다.
변형, 교체, 풍화
하나의 구조물을 여러 파일에서 만들 수 있고, 놓이는 동안 블록이 바뀔 수 있습니다. 매번 조금씩 다른 폐허를 만들 수 있습니다:
structure "old_ruins" {
variants: [{ file: "ruins_small", weight: 3 }, "ruins_tower"]
biomes: ["#minecraft:is_forest"]
spacing: 20
separation: 6
offset_y: -2
skip: ["minecraft:air"]
replace: [{ block: "minecraft:stone_bricks", with: "minecraft:cracked_stone_bricks", chance: 0.3 }]
decay: { left: 0.8, blocks: ["minecraft:stone_bricks", "minecraft:cracked_stone_bricks"] }
}| 속성 | 값 | 기본값 |
|---|---|---|
variants |
그중 하나가 되는 파일: 이름, 또는 { file, weight }. 가중치에 따라 하나가 무작위로 뽑힙니다 |
file만, 가중치 1 |
skip |
파일의 블록 중 놓지 않을 것. "minecraft:air"는 파일이 공기인 곳에서 월드의 블록을 그대로 둡니다 |
— |
replace |
[{ block, with, chance }]: 파일의 블록이 그 확률(0 초과 1 이하)로 다른 블록이 됩니다 |
chance 1 |
decay |
{ left, blocks }: blocks(id 또는 태그) 중 left(0–1) 비율만 남습니다. blocks가 없으면 모든 블록 중에서 |
전부 남음 |
이어 붙이는 조각으로 된 구조물
마을이나 던전은 이어 붙는 조각으로 이루어집니다. 길은 집으로, 복도는 방으로 이어집니다. 각 조각은 게임의 직소 블록이 들어 있는 파일이고, 각 직소 블록은 다음 조각을 가져올 풀의 이름을 <모드 id>:<풀> 형태로 적습니다. 풀을 선언하면 구조물은 첫 번째 풀에서 시작합니다.
structure "hamlet" {
biomes: ["minecraft:plains"]
spacing: 34
separation: 8
depth: 6
pools: [
{ name: "hamlet/square", pieces: [{ file: "hamlet/square" }] },
{ name: "hamlet/streets", fallback: "hamlet/street_ends",
pieces: [{ file: "hamlet/street_straight", weight: 3, follows_ground: true },
{ file: "hamlet/street_corner", follows_ground: true }],
replace: [{ block: "minecraft:stone_bricks", with: "minecraft:oak_planks", where: "minecraft:water" }] },
{ name: "hamlet/street_ends", pieces: [{ file: "hamlet/street_end", follows_ground: true }] },
{ name: "hamlet/houses", none: 2,
pieces: [{ file: "hamlet/house_small", weight: 4 }, { file: "hamlet/house_big" }] },
]
}| 속성 | 값 | 기본값 |
|---|---|---|
pools |
조각의 풀. 첫 번째가 시작하는 곳입니다 | variants 또는 file에서 나온 조각 하나 |
depth |
첫 조각에서 조각 몇 개 떨어진 곳까지 닿는지 | 1 |
각 풀에는 다음이 있습니다:
| 키 | 값 | 기본값 |
|---|---|---|
name |
직소 블록이 쓰는 이름, 예: hamlet/streets |
— |
pieces |
[{ file, weight, follows_ground }]. follows_ground: true이면 조각이 아래의 땅을 따라 휘어지며, 길과 오솔길에 맞습니다. false이면 곧게 유지되며, 집에 맞습니다 |
가중치 1, false |
features |
[{ id, weight }]: 조각으로서의 피처, 여러분의 것 또는 게임의 것(minecraft:chorus_plant) |
— |
none |
조각을 아무것도 놓지 않을 가중치. 빈 터를 위한 것 | 0 |
fallback |
맞는 조각이 없는 곳(길의 끝 등)에서 쓰는 풀 | 없음 |
skip, replace |
단일 구조물과 같습니다. 풀에서는 교체에 where를 더할 수 있습니다: 월드에 이미 그 블록이 있는 곳에서만(물 위에 놓인 길의 벽돌이 판자가 됨) |
— |
모든 조각은 첫 조각에서 80블록 이내에 머뭅니다.
지금은 Kotlin에만 있는 옵션이 둘 있습니다. salt는 구조물이 spacing청크 구간 안의 어디에 놓일지를 정하는 숫자입니다(spacing과 salt가 같은 두 구조물은 같은 자리에 놓이며, 없으면 구조물의 id에서 만들어집니다). aboveBottom은 조각이 월드의 바닥에서 몇 블록 위에 머물러야 하는지입니다(그보다 낮게 닿는 곳에서는 구조물이 만들어지지 않습니다).
코드로 블록 하나하나 짓는 구조물은 코드로 생성하기 페이지에 있습니다.
바이옴
나만의 바이옴은 게임 바이옴의 장소 일부를 차지합니다. 그곳에서 자라고, 살고, 파인 것은 그대로 이어받고, 기후와 색은 자기만의 것을 가집니다.
biome "ruby_meadow" {
replaces: "minecraft:plains"
share: 0.5
temperature: 0.8
downfall: 0.4
precipitation: true
grass_color: "#d05070"
foliage_color: "#c04060"
sky_color: "#ff9fb0"
fog_color: "#ffd0d8"
water_color: "#ff6080"
water_fog_color: "#a03050"
}| 속성 | 값 | 기본값 |
|---|---|---|
replaces |
장소를 가져올 게임 바이옴: "minecraft:plains" |
"minecraft:plains" |
share |
그 장소 중 차지하는 비율, 0보다 크고 1까지 | 0.5 |
temperature |
기후의 온도 | 0.8 |
downfall |
강수량 | 0.4 |
precipitation |
비가 오면 true, 안 오면 false |
true |
grass_color |
풀 색, #rrggbb |
대체되는 바이옴의 값 |
foliage_color |
잎 색 | 대체되는 바이옴의 값 |
sky_color |
하늘 색 | 대체되는 바이옴의 값 |
fog_color |
안개 색 | 대체되는 바이옴의 값 |
water_color |
물 색 | #3f76e4 |
water_fog_color |
물속 안개 색 | 대체되는 바이옴의 값 |
share는 대체되는 바이옴이 있었을 장소에 고르게 나뉩니다. 0.5는 절반, 즉 둘 중 하나를 차지합니다. 새 바이옴은 그곳에서 자라고, 살고, 파인 것(식생, 광석, 동굴, 생물, 음악)과 다른 모드가 그 바이옴에 추가하는 것을 이어받습니다. 지정하지 않은 색은 대체되는 바이옴의 색 그대로입니다.
여러 바이옴이 같은 바이옴을 대체할 수 있으며, 그 장소를 나눠 가집니다. 내 바이옴은 /locate biome <모드 id>:ruby_meadow로 찾습니다.
소리, 지면, 생물
바이옴은 자신만의 음악과 공기를 가질 수 있고, 지면을 여러분의 블록으로 덮을 수 있으며, 누가 사는지도 고를 수 있습니다:
biome "glow_marsh" {
replaces: "minecraft:swamp"
share: 0.4
music: "mymod:music.marsh"
ambient_sound: "mymod:ambient.marsh_hum"
particle: { id: "minecraft:glow", chance: 0.005 }
surface: "mymod:glow_moss"
spawns: [
{ creature: "minecraft:frog", weight: 10, group: [2, 5] },
{ creature: "mymod:marsh_wisp", weight: 4, group: [1, 2] },
]
}| 속성 | 값 | 기본값 |
|---|---|---|
music |
바이옴의 음악으로 재생되는 소리 id | 대체되는 바이옴의 것 |
ambient_sound |
그곳에서 계속 울리는 소리(바람, 웅웅거림) | 대체되는 바이옴의 것 |
particle |
{ id, chance }: 공기 중에 떠다니는 입자. chance는 매 틱 플레이어 근처의 각 지점마다의 확률(0.001이면 조금) |
대체되는 바이옴의 것. chance 0.01 |
surface |
지면을 덮는 블록(각 바닥의 맨 위 블록) | 차원의 평소 지면 |
spawns |
[{ creature, weight, group }]: 그곳에 사는 몹. 하나라도 지정하면 그것들만 나옵니다 |
대체되는 바이옴의 것. weight 10, group [1, 4] |
inherits |
false: 이 바이옴에 주어진 것만 그곳에서 생성됩니다(features, carvers, 모드가 그곳에 놓는 것). 대체되는 바이옴에서 생성되는 것은 생성되지 않습니다 |
true |
features |
[{ id, step }]: 이미 존재하는 피처, 게임의 것이나 데이터의 것을 그곳에 놓습니다. step은 lakes, surface, ores, underground, vegetation 중 하나 |
— |
carvers |
그곳의 동굴을 파내는 카버의 id, 여러분의 것이나 게임의 것. 주어진 순서대로, 대체되는 바이옴의 것보다 먼저 실행됩니다 | — |
inherits: false여도 바이옴은 대체되는 바이옴의 자리를 그대로 가져가며, 직접 지정하지 않으면 몹과 소리도 따라옵니다. 그곳에서 자라고 파이던 것만 따라오지 않게 됩니다. 블록 단위로 만드는 지면과 자신만의 카버는 코드로 생성하기 페이지에 있습니다.
엔드의 바이옴
엔드에서 바이옴은 기후에 따른 자리가 아니라, 너비 약 200블록의 영역 전체를 가져갑니다. minecraft:end_highlands를 대체하면 그 영역의 모든 섬 땅(하이랜드, 미드랜드, 바렌)을 가져가고, minecraft:small_end_islands를 대체하면 섬 사이의 허공을 가져갑니다. 중앙 섬은 게임의 것 그대로이며, 영역은 월드마다 다릅니다.
biome "crystal_glade" {
replaces: "minecraft:end_highlands"
share: 0.3
sky_color: "#2a1840"
fog_color: "#3c2a5a"
surface: "mymod:crystal_moss"
inherits: false
features: [{ id: "minecraft:end_gateway_return", step: "surface" }]
}알아 두면 좋은 점
- 새 청크만. 이미 생성된 청크는 바뀌지 않습니다. 모드를 설치한 뒤 생성된 청크에만 광석, 나무, 식물, 구조물, 바이옴이 나타납니다. 새로운 지형을 탐험해 찾아보세요.
- 없는 이름은 제외됩니다.
biomes에 적은 바이옴이나 태그가 존재하지 않으면(예: 설치되지 않은 다른 모드의 것) 오류가 아니라 건너뜁니다. - 땅이 없으면 구조물도 없습니다. 지표에 서는 구조물은 그 열에 땅이 전혀 없는 곳, 예를 들어 엔드 섬 사이의 허공에서는 만들어지지 않습니다.
- 코드로 작성하는 피처, 구조물, 땅, 바이옴 지도, 카버, 지면은 코드로 생성하기 페이지에 있습니다.
- 나만의 월드 전체는 차원 페이지에 있습니다.
Kotlin에서
ore("ruby_ore") {
replaces = OreHost.STONE_AND_DEEPSLATE
size = 9
perChunk = 8
minY = -60
maxY = 60
}
ore("void_ore") {
replaces = OreHost.END_STONE
biome("mymod:crystal_glade")
}
tree("ruby_tree") {
trunk = "ruby_log"
leaves = "ruby_leaves"
height = 6
perChunk = 2
biome("#minecraft:is_forest")
}
block("ruby_flower") { plant = true }
patch("ruby_flowers") {
block = "ruby_flower"
rarity = 4
biome("#minecraft:is_overworld")
}
structure("old_ruins") {
variant("ruins_small", weight = 3)
variant("ruins_tower")
biome("#minecraft:is_forest")
spacing = 20
offsetY = -2
skip("minecraft:air")
replace("minecraft:stone_bricks", "minecraft:cracked_stone_bricks", chance = 0.3)
decay(0.8, "minecraft:stone_bricks", "minecraft:cracked_stone_bricks")
salt = 120457
}
structure("hamlet") {
biome("minecraft:plains")
spacing = 34
depth = 6
pool("hamlet/square") { piece("hamlet/square") }
pool("hamlet/streets") {
piece("hamlet/street_straight", weight = 3, followsGround = true)
piece("hamlet/street_corner", followsGround = true)
fallback = "hamlet/street_ends"
replace("minecraft:stone_bricks", "minecraft:oak_planks", where = "minecraft:water")
}
pool("hamlet/street_ends") { piece("hamlet/street_end", followsGround = true) }
pool("hamlet/houses") {
piece("hamlet/house_small", weight = 4)
piece("hamlet/house_big")
none = 2
}
}
biome("glow_marsh") {
replaces = "minecraft:swamp"
share = 0.4
music = "mymod:music.marsh"
ambientSound = "mymod:ambient.marsh_hum"
particle("minecraft:glow", chance = 0.005)
surface = "mymod:glow_moss"
spawn("minecraft:frog", weight = 10, group = 2..5)
}
biome("crystal_glade") {
replaces = "minecraft:end_highlands"
share = 0.3
surface = "mymod:crystal_moss"
inherits = false
feature("minecraft:end_gateway_return", FeatureStep.SURFACE)
}