API
Generowanie świata
Rudy, drzewa, kwiaty, struktury i biomy, które pojawiają się w świecie same. Deklarujesz co i gdzie, a nowe chunki to dostają.
Rudy
block "ruby_ore" { hardness: 3, tool: "pickaxe", tier: "iron" }
ore "ruby_ore" {
replaces: "stone_and_deepslate"
size: 9
per_chunk: 8
height: [-60, 60]
}| Właściwość | Wartości | Domyślnie |
|---|---|---|
block |
blok do postawienia: "mymod:other" |
blok o takiej samej nazwie jak ruda |
replaces |
stone, deepslate, stone_and_deepslate (Overworld), netherrack (Nether) lub end_stone (End) |
stone_and_deepslate |
size |
bloków w żyle, 1–64 | 8 |
per_chunk |
prób żył na chunk | 8 |
height |
[min, max], zakres wysokości |
[-64, 64] |
biomes |
tylko w tych biomach, przez identyfikator lub tag | każdy biom, w którym jest jej skała |
Bez biomes ruda pojawia się w każdym biomie wymiaru, do którego należy replaces; ruda z end_stone w każdym biomie Endu. Sam blok deklaruje się jak każdy inny, z jego twardością, narzędziem i łupem; zobacz Bloki, przedmioty i receptury.
ore "void_ore" {
replaces: "end_stone"
size: 5
per_chunk: 6
height: [10, 80]
biomes: ["mymod:crystal_glade"]
}Drzewa
Drzewo to prosty pień z kulą liści. Zadeklaruj dwa bloki, a potem drzewo.
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"]
}| Właściwość | Wartości | Domyślnie |
|---|---|---|
trunk |
blok pnia, z moda lub z gry: "ruby_log", "minecraft:oak_log" |
— |
leaves |
blok liści | — |
height |
wysokość pnia w blokach | 5 |
height_variation |
o ile wysokość różni się między drzewami | 2 |
leaves_radius |
promień kuli liści w blokach | 2 |
per_chunk |
drzewa próbowane na chunk | 1 |
biomes |
biomy, w których występuje, przez identyfikator lub tag | — |
Biomy podajesz przez identyfikator (minecraft:plains) albo tag (#minecraft:is_forest), w dowolnej mieszance. Pień i liście mogą być blokami moda lub gry.
Rośliny i skupiska
Roślina to blok rysowany jako dwa skrzyżowane obrazki, jak kwiat: nic z nią nie koliduje, a światło przez nią przechodzi. Jej tekstura to textures/block/ruby_flower.png, z przezroczystym tłem.
block "ruby_flower" { plant: true, hardness: 0 }
patch "ruby_flowers" {
block: "ruby_flower"
biomes: ["#minecraft:is_overworld"]
rarity: 4
size: 32
spread: 7
}Skupisko rozsiewa rośliny po świecie:
| Właściwość | Wartości | Domyślnie |
|---|---|---|
block |
blok rośliny | — |
biomes |
biomy, w których występuje, przez identyfikator lub tag | — |
rarity |
jedno skupisko na tyle chunków | 4 |
size |
rośliny, które każde skupisko próbuje postawić | 32 |
spread |
największa odległość od środka skupiska w blokach | 7 |
Rośliny stawiane są tylko w powietrzu, na gruncie powierzchni (trawa, ziemia, mech i błoto). Żeby rośliny rosły na innym gruncie, na ścianach albo zwisały z sufitów, napisz feature: zobacz Generowanie kodem.
Struktury
Struktura to budowla, którą tworzysz sam:
- Zbuduj ją w grze.
- Zapisz ją blokiem strukturalnym.
- Skopiuj plik
.nbtdo folderustructures/moda: obok skryptów w modzie CraftScript albo doassets/<id moda>/structures/w jarze Kotlina lub Javy.
Potem ją zadeklaruj:
structure "ruby_shrine" {
file: "ruby_shrine"
biomes: ["#minecraft:is_overworld"]
spacing: 24
separation: 8
buried: false
}| Właściwość | Wartości | Domyślnie |
|---|---|---|
file |
nazwa pliku .nbt, bez rozszerzenia | pierwszy wariant albo nazwa struktury |
biomes |
biomy, w których występuje, przez identyfikator lub tag | — |
spacing |
mniej więcej jedna struktura na tyle chunków | 24 |
separation |
nigdy bliżej niż tyle chunków; mniej niż spacing | 8 |
buried |
true zagłębia ją w ziemi, na ruiny | false |
offset_y |
bloków w górę od powierzchni, na której stoi; wartość ujemna zagłębia ją | 0 |
adapt_ground |
true wypełnia grunt pod nią i oczyszcza go wokół; false stawia ją taką, jaka jest | true |
heights |
[min, max]: na losowej wysokości z tego zakresu, gdziekolwiek jest powierzchnia, zamiast na powierzchni (dom na niebie) |
na powierzchni |
Znajdziesz ją przez /locate structure <id moda>:ruby_shrine, a postawisz przez /place structure <id moda>:ruby_shrine.
Warianty, zamiany i rozpad
Jedna struktura może pochodzić z kilku plików, a jej bloki mogą się zmieniać podczas stawiania. Dzięki temu ruiny nigdy nie są całkiem takie same:
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"] }
}| Właściwość | Wartości | Domyślnie |
|---|---|---|
variants |
pliki, z których jest jedną: nazwy albo { file, weight }; jeden jest wybierany losowo, według wagi |
tylko file, waga 1 |
skip |
bloki z jej plików, które nie są stawiane. "minecraft:air" zostawia bloki świata tam, gdzie plik ma powietrze |
— |
replace |
[{ block, with, chance }]: blok z jej plików zamienia się w inny z tą szansą (więcej niż 0, do 1) |
chance 1 |
decay |
{ left, blocks }: zostaje tylko left (0–1) z blocks (id lub tagi); bez blocks z dowolnych bloków |
zostaje wszystko |
Struktury z łączących się części
Wioska albo loch składa się z części, które się łączą: ulica prowadzi do domu, korytarz do sali. Każda część to plik z blokami puzzli (jigsaw) z gry, a każdy blok puzzli nazywa pulę, z której pochodzi następna część, jako <id moda>:<pula>. Zadeklaruj pule; struktura zaczyna od pierwszej.
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" }] },
]
}| Właściwość | Wartości | Domyślnie |
|---|---|---|
pools |
pule części; pierwsza jest tą, od której zaczyna | jedna część, z variants lub file |
depth |
jak daleko od pierwszej części sięga, w częściach | 1 |
Każda pula ma:
| Klucz | Wartości | Domyślnie |
|---|---|---|
name |
nazwa, której używają jej bloki puzzli, jak hamlet/streets |
— |
pieces |
[{ file, weight, follows_ground }]. follows_ground: true wygina część do gruntu pod nią, dla ulic i ścieżek; false zostawia ją prostą, dla domów |
waga 1, false |
features |
[{ id, weight }]: feature jako część, twój albo z gry (minecraft:chorus_plant) |
— |
none |
waga braku jakiejkolwiek części, dla pustej działki | 0 |
fallback |
pula używana tam, gdzie żadna część nie pasuje, na przykład na końcu ulicy | nic |
skip, replace |
jak dla pojedynczej struktury. W puli zamiana może dodać where: tylko tam, gdzie świat ma już ten blok (cegły ulicy nad wodą stają się deskami) |
— |
Wszystkie części pozostają w promieniu 80 bloków od pierwszej.
Dwie opcje są na razie tylko w Kotlinie: salt, liczba, która wybiera, gdzie w swoim odcinku spacing chunków wypada struktura (dwie struktury o tym samym spacing i salt wypadają w tych samych miejscach; bez niej powstaje ona z id struktury), oraz aboveBottom, o ile bloków nad dnem świata muszą pozostać jej części (tam, gdzie któraś sięgnęłaby niżej, struktura nie powstaje).
Struktury, które twój kod buduje blok po bloku, opisuje strona Generowanie kodem.
Biomy
Własny biom zajmuje część miejsc biomu z gry. Zachowuje to, co tam rośnie, żyje i jest wydrążone, a do tego ma własny klimat i kolory.
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"
}| Właściwość | Wartości | Domyślnie |
|---|---|---|
replaces |
biom z gry, którego miejsca zajmuje: "minecraft:plains" |
"minecraft:plains" |
share |
ułamek tych miejsc, który zajmuje, większy niż 0 i do 1 | 0.5 |
temperature |
temperatura klimatu | 0.8 |
downfall |
jak bardzo pada | 0.4 |
precipitation |
true, gdy pada deszcz, false, gdy nie |
true |
grass_color |
kolor trawy, #rrggbb |
takie jak w zastępowanym biomie |
foliage_color |
kolor liści | takie jak w zastępowanym biomie |
sky_color |
kolor nieba | takie jak w zastępowanym biomie |
fog_color |
kolor mgły | takie jak w zastępowanym biomie |
water_color |
kolor wody | #3f76e4 |
water_fog_color |
kolor mgły pod wodą | takie jak w zastępowanym biomie |
share rozkłada się równomiernie na miejsca, w których byłby zastępowany biom: 0.5 zajmuje połowę, co drugie. Nowy biom dziedziczy to, co tam rośnie, żyje i jest wydrążone (roślinność, rudy, jaskinie, stworzenia, muzyka) oraz to, co inne mody dodają do tego biomu. Pominięte kolory zostają takie jak w zastępowanym biomie.
Kilka biomów może zastępować ten sam: dzielą jego miejsca. Znajdziesz swój poleceniem /locate biome <id moda>:ruby_meadow.
Dźwięk, grunt i stworzenia
Biom może też mieć własną muzykę i powietrze, pokrywać swój grunt twoim blokiem i wybierać, kto w nim żyje:
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] },
]
}| Właściwość | Wartości | Domyślnie |
|---|---|---|
music |
id dźwięku, odtwarzanego jako muzyka biomu | z zastępowanego biomu |
ambient_sound |
dźwięk, który gra tam bez przerwy (wiatr, szum) | z zastępowanego biomu |
particle |
{ id, chance }: cząsteczka unosząca się w jego powietrzu; chance na miejsce w pobliżu gracza w każdym ticku (0.001 to kilka) |
z zastępowanego biomu; chance 0.01 |
surface |
blok, którym pokryty jest jego grunt (górny blok każdej podłogi) | zwykły grunt wymiaru |
spawns |
[{ creature, weight, group }]: stworzenia, które tam żyją; gdy poda jakiekolwiek, to te i żadne inne |
z zastępowanego biomu; weight 10, group [1, 4] |
inherits |
false: generuje się tam tylko to, co dano temu biomowi (jego features, jego carvers, to, co mody w nim stawiają), a nie to, co generuje się w zastępowanym biomie |
true |
features |
[{ id, step }]: istniejące już featury, z gry lub z danych, stawiane w nim. step to lakes, surface, ores, underground lub vegetation |
— |
carvers |
id wyrzynaczy (carverów), które drążą jego jaskinie, twoich lub z gry; działają w podanej kolejności, przed tymi z zastępowanego biomu | — |
Przy inherits: false biom nadal zajmuje miejsca zastępowanego biomu oraz zachowuje jego stworzenia i dźwięki, chyba że podasz własne; przestaje się tam pojawiać tylko to, co rośnie i jest wydrążone. Grunt tworzony blok po bloku i własne carvery opisuje strona Generowanie kodem.
Biomy Endu
W Endzie biom zajmuje całe regiony, szerokie na około 200 bloków, zamiast miejsc klimatu. Zastępując minecraft:end_highlands, zajmuje całą wyspową ziemię swoich regionów (wyżyny, średnie tereny i pustkowia); zastępując minecraft:small_end_islands, pustkę między wyspami. Centralna wyspa pozostaje taka jak w grze, a regiony są inne w każdym świecie.
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" }]
}Warto wiedzieć
- Tylko nowe chunki. Chunki już wygenerowane się nie zmieniają; rudy, drzewa, rośliny, struktury i biomy dostają tylko chunki wygenerowane po zainstalowaniu moda. Eksploruj nowy teren, żeby je znaleźć.
- Brakujące nazwy są pomijane. Biom lub tag w
biomes, który nie istnieje (na przykład z innego moda, który nie jest zainstalowany), jest pomijany, a nie jest błędem. - Bez gruntu nie ma struktury. Struktura stojąca na powierzchni nie powstaje tam, gdzie jej kolumna nie ma żadnego gruntu, jak w pustce między wyspami Endu.
- Featury, struktury, ląd, mapy biomów, carvery i grunty pisane w kodzie opisuje strona Generowanie kodem.
- Całe własne światy opisuje strona Wymiary.
W Kotlinie
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)
}